Shell 循环控制语句
1、if格式
a、脚本格式
#!/bin/bash ###本脚本主要是练习20190909 ###本脚本主要是用于if循环语句; ###判断批量执行的参数是否为空; if [ ! $1 ] then echo "********批量执行格式:sh $0 BatchTask_1" break fi ###判断批量执行的参数是否等于BatchTask_1 canshu=BatchTask_1 if test $1 = $canshu then sh start.sh $1 else echo "*********批量执行的参数不正确,请参数以下批量执行格式!" echo "*********批量执行格式:sh $0 BatchTask_1" break fi
b、命令行格式:
if [ $(ps -ef |grep -c "ssh") -ge 1 ];then echo last >>/home/log/1/last_log.sh;fi
2、if else
#!/bin/bash ###判断批量执行的参数是否等于BatchTask_1 canshu=BatchTask_1 if test $1 = $canshu then sh start.sh $1 else echo "*********批量执行的参数不正确,请参数以下批量执行格式!" echo "*********批量执行格式:sh $0 BatchTask_1" break fi
3、if elif else
#!/bin/bash ###本脚本写于20190909 if test $1 = M then echo "这是个男的!" elif test $1 = F then echo "这是个女的!" else echo "性别不详,有待考究!" fi
4、for循环;
a、脚本格式:
#!/bin/bash ###本脚本主要用于联系for循环 ###本脚本写于20190909 for i in 1 2 3 4 5 do echo "这是$i次循环!" done
b、命令行格式:
for i in 1 2 3 4 5;do echo "这是$i次循环!";done;
5、while循环
while循环用于不断循环执行以系列命令,也用于从输入文件中读取数据,命令通常为测试条件;
#!/bin/bash ###本脚本主要用于练习while循环; ###本脚本写于20190909; int=1 while(( $int<=5 )) do res=`expr $int * $int` echo "$int * $int等于$res" let "$int++" done
a、while循环的test
#!/bin/bash ###本脚本写于20190910 ###本脚本主要用于while循环test; echo "===========>>按下Ctrl+d退出脚本运行!!!" echo -e -n "请输入你想输入的名字: " while read res do echo "$res is a little caiji!!!" done
b、无限循环
#!/bin/bash ###无限循环 int=1 while true do echo "$int" let "int++" done ###命令行格式; while true;do echo "true";done;
6、until循环
until循环执行一系列命令直至条件为true时停止;
until循环与while循环处理方式上恰好相反,判断条件返回值为false,则继续执行循环体内的语句,否则跳出循环;
#!/bin/bash ###本脚本主要用于until循环语句; ###本脚本写于20190910; echo "输出打印小于特定数字的所有整数" if [ ! $1 ] then echo "=======>>脚本执行格式:sh $0 参数1" break fi int=0 until [ $int -gt $1 ] do echo $int let "int++" done
7、case
shell case语句为多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相应的命令。
#!/bin/bash ###本脚本主要用于练习case ###本脚本写于20190910 if [ ! $1 ] then echo "========执行脚本命令格式错误=========" echo "========执行格式为:sh start.sh 参数" break else case $1 in BatchTasck_WZ) sh start.sh BatchTasck_WZ echo "正在执行的批量为:sh start.sh BatchTasck_WZ" ;; BatchTasck_MS) sh start.sh BatchTasck_MS echo "正在执行的批量为:sh start.sh BatchTasck_MS" ;; BatchTasck_HK) sh start.sh BatchTasck_HK echo "正在执行的批量为:sh start.sh BatchTasck_HZ" ;; BatchTasck_ZA) sh start.sh BatchTasck_ZA echo "正在执行的批量为:sh start.sh BatchTasck_ZA" ;; *) echo "=================>>MS的批量脚本参数为:BatchTask_MS" echo "=================>>WZ的批量脚本参数为:BatchTask_WZ" echo "=================>>HK的批量脚本参数为:BatchTask_HK" echo "=================>>ZA的批量脚本参数为:BatchTask_ZA" ;; esac fi
8、跳出循环
在循环过程中,有时候需要在未达到循环结束条件的时候跳出循环,有两个命令可以实现该功能:break和continue;
a、break
break允许跳出所有循环(终止执行后面所有的循环)
#!/bin/bash ###本脚本主要用于练习break命令; ###本脚本写于20190910 if [ ! $1 ] then echo "==========>>本脚本执行的格式为:sh $0 参数1" echo "==========>>参数1为字符格式" break else if test $1 = 毛 then echo "==========>>这可不是随便玩的!!" break else echo "来了$1老弟!!" fi fi
b、continue
continue命令与break命令类似,只有一点差别,他不会跳出所有循环,仅仅跳出当前循环;
#!/bin/bash ###本脚本主要是用于练习continue命令; ###本脚本写于20190910 while true do echo -e -n "请输入你想要输入的姓名: " read name if [ ! $name ] then continue else if test $name = 毛 then echo "==========>>这可不是随便玩的!!" continue else echo "来了$1老弟!!" sleep 5 fi fi done