一篇教会你写90%的shell脚本(入门小结)

2020-05-11 13:57:41王旭

流程控制

和Java、PHP等语言不一样,sh的流程控制不可为空,即if或者else的大括号中无任何语句

if else

if
if condition
then
 command1 
 command2
 ...
 commandN 
fi

if else

if condition
then
 command1 
 command2
 ...
 commandN
else
 command
fi

if else-if else

if condition1
then
 command1
elif condition2 
then 
 command2
else
 commandN
fi

for

for var in item1 item2 ... itemN
do
 command1
 command2
 ...
 commandN
done

while

while condition

while condition
do
 command
done

while 无限循环

while :
do
 command
done

until

until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。

until condition
do
 command
done

case

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break,其中“;;”不是跳出循环,是不在去匹配下面的模式
case语句格式如下:

case 值 in
 模式1)
 command1
 command2
 ...
 commandN
 ;;
 模式2)
 command1
 command2
 ...
 commandN
 ;;
esac

跳出循环

break :跳出总循环 continue:跳出当前循环,继续下一次循环

定义函数

可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

函数定义

[ function ] funname()
{
 action;
 [return int;]
}

参数传递

调用函数: fun_name 2 3 4 函数中使用:和shell取用函数相同 $n $# $* $? 或者加上{}
funWithParam(){
 echo "第一个参数为 $1 !"
 echo "第二个参数为 $2 !"
 echo "第十个参数为 $10 !"
 echo "第十个参数为 ${10} !"
 echo "第十一个参数为 ${11} !"
 echo "参数总数有 $# 个!"
 echo "作为一个字符串输出所有参数 $* !"}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
echo $? # 判断执行是否成功

函数返回值

return字样可存在也可不存在 return 只能为 return [0-255],此处的返回可作为函数执行的状态,通过$?获取的便是这个返回值 如果不加return , 则默认最后一条语句的执行状态所为函数执行状态的返回值,如果最后一条语句执行成功,则$?为0,否则不为0

使用函数返回值(Janusgraph图数据库官方启动服务脚本片段)

return返回的数字,只是作为函数执行状态的返回值,也就是接下来$?获取的值 对于类似于下面的BIN=abs_path``语句,获取的是函数体内所有的echo、printf输出组合成的一个字符串