Shell脚本编程(二)

脚本传参

使用$0代表脚本的相对路径

#!/bin/bash              
filename=$(basename $0)
echo $filename
echo $0
echo $1
echo $2
echo $3

给脚本赋值:

./14.sh 7 10 9

其中14.sh是脚本的名称,7,10,9分别给变量1,2,3赋值,执行后的输出结果为:

14.sh
./14.sh
7
10
9

使用#表示参数的总数,使用@来遍历所有参数:

#!/bin/bash
filename=$(basename $0)
echo $filename
echo $0
echo $1
echo $2
echo $3
echo "参数的总数:$#"
for param in "$@";
do
  echo "param:$param"
done

给脚本赋值:

./14.sh 7 10 9

执行后的输出结果为:

14.sh
./14.sh
7
10
9
参数的总数:3
param:7
param:10
param:9

输入输出重定向

标准输入输出:

0    STDIN      标准输入
1    STDOUT     标准输出
2    STDERR     标准错误

1.如下,默认是输出到控制台:

#!/bin/bash                
echo "yy"
echo "zz"

要将上述输出到test文件中,可以在控制台输入:

./15.sh 1>test

这样就可以将输出重定向到test文件中,我们可以验证一下,控制台输入:

cat test

可以看见test中:

yy
zz

这表示已经将输出重定向到test文件中了,但是这样并不够,我们想要在shell脚本中,将每个输出都重定向到一个文件中,显然在控制台输入这样的命令是不够的,我们需要统一处理:

#!/bin/bash                                     
exec 1>test2
echo "yy"
echo "zz"

其中exec 1>test2就是做这样的处理的,将脚本中所有的输出重定向到test2文件中,在控制台输入./15.sh,即可实现重定向,我们可以同上验证。
2.将标准错误输出到文件中:

#!/bin/bash                                       
exec 1> test3
exec 2> test4
echo "yy"
echo "zz"
ls -a "./f"

这里没有f文件,所以ls -a "./f"将会报错,这里将报错的内容都重定向到test4文件中。
3.自定义输出:

#!/bin/bash                                
exec 1> test3
exec 2> test4
exec 7> test5
echo "yy" >&7
echo "zz"
ls -a "./f"

这里就将yy自定义输出到test5文件中,注意>&7之间不能有空格,自定义输出一般用的很好,做为了解就行。

函数调用

#!/bin/bash
#第一种方式
function myfun
{
   echo "myfun函数"
}

#第二种方式
myfun()
{                                 
   echo "myfun2函数"
}
myfun

上述存在两种方式,分别是用function标注和用()去表示函数myfun,两种方式都可以,一般我会用第一种方式。这里存在函数覆盖的,第二种方式的写在第一种方式的下面,会覆盖第一种方式。而第一种方式的写法又有多种,如:

function myfun {
   echo "myfun函数"
}

这里myfun{之间存在空格,否则会报错,还可以这样写:

function myfun(){
   echo "myfun函数"
}

函数传参、返回值

#!/bin/bash                                
function myfun
{
   echo $[ $1 + $2 ]
}
value=$(myfun 8 5)
echo "value:$value"

执行结果为:

value:13

跨脚本调用

被调用的函数库脚本18.sh

#!/bin/bash                                     
#函数库
function add()
{
   echo $[ $1 + $2 ]
}

调用18.sh的脚本17.sh

#!/bin/bash                       
#引入 ./18.sh
#source ./18.sh
. ./18.sh

function myfun(){
   echo $value
}

value=20
myfun
echo "add value:$(add 10 20)"

其中.就是source的快捷别名。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,036评论 1 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 内容一:Shell脚本语言-管道? ​分析场景:有的时候我们需要一个命令的输出作为另外一个命令输入? ​​ ​语法...
    Jackey_song阅读 437评论 0 1
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,128评论 2 34
  • 生活中,我们总是捉襟见肘,恨不得跟上巨人的脚步,来证明自己的夸夸其谈都是有据可询。然而真相往往在浮出水面的那一刻就...
    0城三点半阅读 468评论 0 0