流程控制
和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 $? # 判断执行是否成功
函数返回值
使用函数返回值(Janusgraph图数据库官方启动服务脚本片段)
return返回的数字,只是作为函数执行状态的返回值,也就是接下来$?获取的值 对于类似于下面的BIN=abs_path``语句,获取的是函数体内所有的echo、printf输出组合成的一个字符串









