while和until循环的应用实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了while和until循环的应用实践相关的知识,希望对你有一定的参考价值。
10.1 当型和直到型循环语法
while时条件表达式成立之后,会进入循环体里面执行,不成立时退出,until循环语句的用法于while类似,区别在于在条件表达式不成立时候,进入循环执行指令,条件表达式成立时,终止循环。很少用until
while <条件表达式>
do
指令....
done
当型和直到型循环的基本范例
每隔几秒输出一个系统负载,在脚本的结尾使用&符号在后台运行
#!/bin/bash while true do uptime #uptime >> /tmp/load.txt sleep 3 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 -gt 0 ] 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 -lt 1 ] 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 export LANG="zh_CN.UTF-8" a=$(($RANDOM%61)) b=1 echo "这个擀面皮"$a"元" sleep 2 echo "----------------" clear echo "这个面皮多钱?请输入0-60的价格" read -p "请输入你的价格:" num if [ $num -eq $a ]; then echo $b exit 1 else num1=$num fi while [ $num1 -ne $a ] do if [ $num1 -gt $a ]; then echo "这个价格有点高" elif [ $num1 -lt $a ]; then echo "这个价格有点低" else echo "恭喜你猜对了" return 0 fi read -p "再次输入价格:" num1 ((b++)) done echo “你共猜了"$b"次才才猜对的,很笨”
范例10-5:手机充值10元,每发 一次短信(输出当前余额)花费1角5分钱,当余额低于1角5分钱的时候就不能在发短信了,提示“余额不足,请充值”(允许用户充值后继续发短信),请用while语句实现。
目前写的最专业,最好的脚本 #!/bin/bash export LANG="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 -eq 0 ]; then sum=$(($sum+$num)) printf "充值成功,充了$num,现在还有"$sum"话费\n" else echo "这是一个错误的数字" # return 0 fi } send() { if [ $sum -ge 15 ]; then sum=$(($sum-$b)) printf "发送一条短信,现在还有“$sum”话费,请及时充值\n" else printf "余额不足,请充值\n" sleep 3 chong fi } main() { me while true do read -p "your choices:" dd case "$dd" in 1) chong ;; 2) send ;; 3) exit 5 ;; *) echo "this is a bad" esac done } main
以上是关于while和until循环的应用实践的主要内容,如果未能解决你的问题,请参考以下文章