10.1 当型和直到型循环语法
while时条件表达式成立之后,会进入循环体里面执行,不成立时退出,until循环语句的用法于while类似,区别在于在条件表达式不成立时候,进入循环执行指令,条件表达式成立时,终止循环。很少用until
while <条件表达式>
do
指令....
done
当型和直到型循环的基本范例
#!/bin/bash whiletrue do uptime #uptime>>/tmp/load.txt sleep3 done
在实际工作中,一般会通过客户端ssh连接服务器,因此可能就会有在脚本或命令执行期间不能中断的需求,若中断,前功尽弃,更要命的会破坏系统数据,下面是防止脚本中断的几个可行方法;
1)利用 sh /server/scripts/while_01.sh & 命令,即使用&在后台运行脚本
2)使用nohup /server/scripts/uptime.sh & 命令。即使用nohup加&在后台运行脚本
3)利用screen保持会话,然后在执行命令或脚本,即使用screen保持当前会话状态
1和2的差别在于,如果当前ssh远程连接的shell界面断开连接,1就会停止,而2不会停止
让shell脚本在后台运行的知识
用法 说明
sh while_01.sh 把脚本放到后台执行(在后台运行脚本的常用方法)
ctrl+c 停止执行当前脚本
ctrl+z 暂停执行当前脚本或任务
bg 把当前脚本或任务放到后台执行,bg可以理解为background
fg 把当前脚本或任务放到前台执行,
jobs 查看当前执行的脚本或者任务
kill 关闭执行的脚本任务,即以“kill % 任务编号”
竖向打印54321:
#!/bin/bash i=5 while(($i>0)) do echo$i ((i--)) done 或者: #!/bin/bash i=5 while[$i-gt0] do echo$i ((i--)) done 或者: #!/bin/bash i=5 while[[$i>0]] do echo$i ((i--)) done
也可以使用$1传参的命令进行计算。
使用until进行判断:
#!/bin/bash i=5 until[$i-lt1] do echo$i ((i--)) done
计算从1加到100之间(请使用1+2+3...+100的方法)
#!/bin/bash i=1 sum=0 while(($i<101)) do sum=$(($sum+$i)) ((i++)) done echo$sum
范例:猜数字游戏,首先让系统随机生成一个数字,给这个数字设定一个范围(1~60),让用户输入所猜的数字,游戏规则是:对输入进行判断,如果不符合要求,就给予高或低的提示,猜对后则给出所用的次数,请用while实现。
自己写的简易版本的: #!/bin/bash exportLANG="zh_CN.UTF-8" a=$(($RANDOM%61)) b=1 echo"这个擀面皮"$a"元" sleep2 echo"----------------" clear echo"这个面皮多钱?请输入0-60的价格" read-p"请输入你的价格:"num if[$num-eq$a];then echo$b exit1 else num1=$num fi while[$num1-ne$a] do if[$num1-gt$a];then echo"这个价格有点高" elif[$num1-lt$a];then echo"这个价格有点低" else echo"恭喜你猜对了" return0 fi read-p"再次输入价格:"num1 ((b++)) done echo“你共猜了"$b"次才才猜对的,很笨”
范例10-5:手机充值10元,每发 一次短信(输出当前余额)花费1角5分钱,当余额低于1角5分钱的时候就不能在发短信了,提示“余额不足,请充值”(允许用户充值后继续发短信),请用while语句实现。
目前写的最专业,最好的脚本 #!/bin/bash exportLANG="zh_CN.UTF-8" sum=15#初始费用 b=15#发一次短信需要的费用 me(){ cat<<EOF 当前余额为$sum,余额不足,请充值 ============================== 1.充值 2.发消息 3.退出 ============================== EOF } chong(){ read-p"请输入充值金额:"num expr$num+10>/dev/null js=$? if[$js-eq0];then sum=$(($sum+$num)) printf"充值成功,充了$num,现在还有"$sum"话费\n" else echo"这是一个错误的数字" #return0 fi } send(){ if[$sum-ge15];then sum=$(($sum-$b)) printf"发送一条短信,现在还有“$sum”话费,请及时充值\n" else printf"余额不足,请充值\n" sleep3 chong fi } main(){ me whiletrue do read-p"yourchoices:"dd case"$dd"in 1) chong ;; 2) send ;; 3) exit5 ;; *) echo"thisisabad" esac done } main原文链接:https://www.f2er.com/bash/388785.html