shell入门学习笔记-09-分支语句与test命令

版权声明:本文为博主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

猜你喜欢

转载自blog.csdn.net/hanchao5272/article/details/86430623