版权声明:本文为博主hanchao5272原创文章,转载请注明来源,并留下原文链接地址,谢谢! https://blog.csdn.net/hanchao5272/article/details/86430623
系列目录与参考文献传送门: shell入门学习笔记-序章
分支语句
- 在sh/bash中,分支不能为空,没有则不写。
if-else
admindeMacBook-Pro:myshell admin$ if [ $( ps -ef | grep -c java ) -ge 1 ]
> then
> echo true
> echo true
> else
> echo false
> fi
true
true
admindeMacBook-Pro:myshell admin$ if [ $( ps -ef | grep -c java ) -ge 1 ];then echo true;echo true; else echo false;fi
true
true
admindeMacBook-Pro:myshell admin$ if [ 2 == 1 ];then echo "2 == 1";elif [ 2 == 3 ];then echo "2 == 3";else echo "2 == 2";fi
2 == 2
- 在一个分支中,可以执行多个语句。
for
admindeMacBook-Pro:myshell admin$ for var in 1 2 3
> do
> echo $(expr $var \* $var)
> done
1
4
9
admindeMacBook-Pro:myshell admin$ for var in 1 2 3;do echo $(expr $var \* $var);done
1
4
9
admindeMacBook-Pro:myshell admin$ a=(1 2 3)
admindeMacBook-Pro:myshell admin$ for var in "${a[@]}";do echo $var;done
1
2
3
admindeMacBook-Pro:myshell admin$ for var in "${a[*]}";do echo $var;done
1 2 3
admindeMacBook-Pro:myshell admin$ for var in "${a[@]}";do printf "%d-" $var;printf "%d-" $var;echo $var;done
1-1-1
2-2-2
3-3-3
admindeMacBook-Pro:myshell admin$ for var in "${a[*]}";do printf "%d-" $var;printf "%d-" $var;echo $var;done
1-2-3-1-2-3-1 2 3
admindeMacBook-Pro:myshell admin$ for var in ${a[@]};do echo $var;done
1
2
3
admindeMacBook-Pro:myshell admin$ for var in ${a[*]};do echo $var;done
1
2
3
- 一次循环中可以执行多条命令。
- 注意
"${a[*]}"
、"${a[@]}"
以及${a[*]}
的区别。
while
admindeMacBook-Pro:myshell admin$ i=1
admindeMacBook-Pro:myshell admin$ while [ $i -le 3 ];do echo $i;let i++;done
1
2
3
admindeMacBook-Pro:myshell admin$ while read NAME;do echo $NAME;done
david
david
lili
lili
until
admindeMacBook-Pro:myshell admin$ until (( i==3 ));do echo $i;((i++));done
1
2
- 与while相反,一致循环直到条件为真。
(())
- 变量无需加
$
- 所有表达式可以像C语言一样,如
((i++))
。 - 可以进行四则运算,如
((a=a+1))
。 - 可以进行逻辑运算,如
((a=1?11:22))
。 - 扩展了控制语句的测试条件,如
for((i=0;i<=10;i++))
- 变量无需加
无限循环
admindeMacBook-Pro:myshell admin$ while :;do echo 1111;done
admindeMacBook-Pro:myshell admin$ while true;do echo 1111;done
admindeMacBook-Pro:myshell admin$ for (( ; ; )) ; do echo 111;done
case
admindeMacBook-Pro:myshell admin$ while read NUM
> do
> case $NUM in
> 1) echo 1111111
> ;;
> 2) echo 2222222
> ;;
> *) echo "******"
> ;;
> esac
> done
1
1111111
2
2222222
3
******
case
语句必须追加in
。case
分支必须有右括号)
。case
分支必须以双分号;;
结束。case
分支以*
处理不匹配的情况。case
语句以esac
对称方式退出语句。case
语句只会匹配一个分支。
break和continue
admindeMacBook-Pro:myshell admin$ while read NUM
> do
> case $NUM in
> 1|2|3) echo $NUM$NUM$NUM$NUM$NUM
> ;;
> *) echo "not illegal"
> break
> ;;
> esac
> done
1
11111
3
33333
4
not illegal
admindeMacBook-Pro:myshell admin$ while read NUM; do case $NUM in 1|2|3) echo $NUM$NUM$NUM$NUM$NUM; ;; *) echo "not illegal"; continue; ;; esac; done
1
11111
2
22222
4
not illegal
2
22222
break
跳出所有循环continue
跳出本层循环
test命令
test
命令与[ ]
是等价的。
admindeMacBook-Pro:myshell admin$ if [ 2 -gt 1 -a 2 == 2 ]; then echo true; fi
true
admindeMacBook-Pro:myshell admin$ if test 2 -gt 1 -a 2 == 2; then echo true; fi
true