shell编程控制语句及示例
1、条件选择:if语句 ①单分支 if判断条件;then 条件为真的分支代码 fi ②双分支 if判断条件;then 条件为真的分支代码 else 条件为假的分支代码 fi ③多分支 if判断条件1;then 条件为真的分支代码 elif判断条件2;then 条件为真的分支代码 elif判断条件3;then 条件为真的分支代码 else 以上条件都为假的分支代码 fi 示例:请用户输入成绩:80-100为优秀,60-79为通过,其他淘汰。 #!/bin/bash read-p"peleaseinputyourscore:"score if["$score"-ge80-a"$score"-le100];then echo"优秀" elif["$score"-lt80-a"$score"-ge60];then echo"通过" else echo"淘汰" fi 2、条件判断: case语句 语法:case变量引用in PAT1) 分支1;; PAT2) 分支2;; ... *) 默认分支;; esac case支持glob风格的通配符: 。。。 示例:编写脚本,提示用户输入yes或no不区分大小写,并判断用户输入的是yes还是no或者其他信息。 #!/bin/bash read-p"pleaseinputyesorno:"yn ans=$(echo$yn|tr"[[:upper:]]""[[:lower:]]") case$ansin y|yes) echoyes;; n|no) echono;; *) echoyes/no? esac 3、for循环 语法:for 变量名 in 列表; do 执行机制:依次将列表中的元素赋值给“变量名” ; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。 列表生成方式: 示例:用for循环打印九九乘法表。 #!/bin/bash foriin{1..9};do forjin$(seq$i);do echo-ne"$j*$i=$[$i*$j]t" done echo done for循环的特殊格式: for ((控制变量初始化;条件判断表达式; 控制变量的修正表达式))
#!/bin/bash for((i=1;i<=9;i++));do for((j=1;j<=i;j++));do echo-ne"$j*$i=$[$j*$i]t" done echo done 4、while循环 语法:while CONDITION; do CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环 示例:求100以内能被3整除的数之和 #!/bin/bash declarei=1 declaresum=0 while["$i"-lt100];do leti++ if[$[i%3]-ne0];then continue fi letsum+=$i done echosumis$sum while的特殊用法(遍历文件的每一行): while read line; do 示例:找出ID号为偶数的所有用户,显示其用户名及ID号。 whilereadline;do if[$[`echo$line|cut-d:-f3`%2]-eq0];then echo-ne"username:`echo$line|cut-d:-f1`t" echo"uid:`echo$line|cut-d:-f3`" fi done</etc/passwd 或者将内容通过管道传给while循环: 示例:若磁盘利用率大于80%,则通知用户。 #!/bin/bash df|grep"/dev/sd"|whilereaddisk;do diskused=$(echo$disk|sed-r's/.*([0-9]+)%.*/1/') diskname=$(echo$disk|cut-d""-f1) [$diskused-ge80]&&echo"$disknamewillbifull:$diskused%" done 5、untill循环 语法until CONDITION; do done 示例:用until打印九九乘法表 #!/bin/bash j=1 i=1 until["$j"-gt9];do until["$i"-gt"$j"];do echo-ne"$i*$j=$[i*j]t" leti++ done echo leti=1 letj++ done 6、循环控制语句continue continue用于循环体中 示例:打印除了5以外1-10之间的数字。 #!/bin/bash foriin{1..10};do if[$i-eq5];then continue else echo$i fi done 7、循环控制语句break 语法: break[N]:,最内层为第1层 whileCONDTIITON1;do CMD1 ... ifCONDITION2;then break fi CMDn ... done break与continue的区别在于,continue是在循环中跳过满足条件的单次循环,而break则默认跳出自己处于的循环体。continue示例中如果换为break则只打印1-4,由于5触发break跳出循环之后的不在打印。 8、循环控制shift命令 shift [n] #!/bin/bash while(($#>0));do echo$* shift done 显示结果: [root@R1app]#./haha.shabcde abcde bcde cde de e 9、select循环与菜单 selectvariableinlist do 循环体命令 done
#!/bin/bash PS3="pleasechooseyourmenu:" selectmenuinhuimianlamianhulatangyrt;do case$REPLYin 1) echo"thepriceis$10";; 2) echo"thepriceis$15";; 3) echo"thepriceis$5";; 4) echo"thepriceis$20";; *) echo"getout!" break esac done 10、信号捕捉trap trap '触发指令' 信号 示例: #!/bin/bash trap'echo“signal:SIGINT"'int trap-p for((i=0;i<=10;i++)) do sleep1 echo$i done trap''int trap-p for((i=11;i<=20;i++)) do sleep1 echo$i done trap'-'int trap-p for((i=21;i<=30;i++)) do sleep1 echo$i done (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |