shell的while和until 的用法
shell while循环工作中使用的不多,一般适用于守护进程程序或始终循环执行场景,其他循环计算等。
while条件句:
语法:
while 条件
do
指令…
done
ok,我们测试一下:
测试:每隔2秒屏幕输出系统负载值。
[root@bqh-118 scripts]# vim while.sh
while true #条件为真时,也可以用 "[1]"代替
do
uptime #查看系统负载情况
sleep 2 #2秒后
done

提示:while true 表示条件永远为真,因此会一直运行,像死循环一样,每隔2秒查看一下系统负载情况,但我们称呼为守护进程。
接下来我们来一个稍微难一点的:计算从1+到100之和(1+2+3+4+......100)的方法
[root@bqh-118 scripts]# vim while1_100sum.sh
#!/bin/sh
#no.1
i=1
sum=0
while [ $i -le 100 ] #当i小于100时,往下执行
do
((sum=sum+i)) #sum+变量i
((i++)) #执行一次循环i+1,直到条件不成立为止。
done
echo $sum #输出总和sum
#no.2 #数据公式计算
a=100
((sum=a*(a+1)/2))
echo $sum

更多方法详情去:https://blog.51cto.com/oldboy/767862
================================================================
until循环语句:until应用场景不多。(属于先执行后判断,类似于先上车,后补票。)
语法:
until 条件
do
指令...
done
测试:
[root@bqh-118 scripts]# vim while1_100sum.sh
#!/bin/sh
a=5
until [[ $a < 1 ]] #当a不小于1时,执行循环,注意判断是单[]须转义加\或用其他方法
do
echo "My name is bqh!"
((a--)) #执行一次循环变量a递减一次
done

提示:以上语句中5<1不成立那么就开始循环,直到小于1时停止,注意要用"[[]]"或"-lt"判断
ok,我们来调整一个实战测试吧:
1、编写手机业务一键服务脚本
[root@bqh-118 scripts]# vim sjyjcx.sh
#!/bin/sh
#date:2019-04-25
#author:aゞ锦衣卫
#script function:Mobile phone recharge query service
menu() { #定义菜单函数
cat <<bqh
==========================================
Mobile phone recharge query service
------------------------------------------
1.话费充值
2.余额查询
3.发送短信
4.退出服务 author:aゞ锦衣卫
date:2019-04-25
==========================================
bqh
} TOTAL=0 #定义总额
MSG=1 #定义一条短信1元
green='\e[1;32m' #绿色
red='\e[1;31m' #红色
yelow='\e[1;33m' #黄色
shan='\e[31;5m' #闪烁红
res='\e[0m' #清除颜色 judge() { #定义判断函数
read -p "请输入您要办理的业务:" num
expr $num + 1 &>/dev/null
if [ "$?" -ne 0 ];then
echo -e "${shan}请您输入{1|2|3|4}${res}"
exit
fi
} recharge() { #定义充值话费函数
while :
do
read -p "请输入您要充值的金额:" a
expr $a + 1 &>/dev/null #检测变量a是否为整数
if [ "$?" -ne 0 ];then
echo -e "${shan}充值失败!${res}"
echo -e "${shan}请输入数值!${res}"
exit 2
else
((TOTAL+=a)) && echo "充值中....." && sleep 1
echo -e "${green}充值成功!\n目前您的余额为$TOTAL元!${res}"
return 1 #退出当前函数
fi
done
} query() { #定义查询余额函数
echo -e "${green}您好!您当前的余额为:$TOTAL元${res}"
} sending_sms() { #定义发送短信函数
if [ "$TOTAL" -lt "$MSG" ];then #判断是否有足够的钱支持本次发送短信服务
echo -e "${shan}很抱歉,由于您余额不足本次发送,请您及时充值。${res}"
else
read -p "请输入您要发送的内容:" txt
read -p "您确定是否发送?{y/n}" select
case "$select" in #判断用户最终是否确定发送短信
[yY]|[yY][eE][sS])
echo -e "${yelow}$txt${res}"&& echo "正在发送......"
sleep 1
echo -e "${green}发送成功!${res}"
;;
[nN]|[nN][oO])
echo -e "${green}取消发送!${res}"
;;
*)
echo -e "${shan}很抱歉,由于您操作有误,暂不支持本次发送!${res}"
;;
esac
fi
} server() { #定义办理业务函数
while :
do
menu && judge
case "$num" in 根据用户输入的变量num,并给出相应的服务。
1)
recharge
;;
2)
query
;;
3)
sending_sms
;;
4)
echo -e "${green}感谢您使用一键查询服务。${res}"
exit 177
;; *)
echo -e "${shan}请您输入{1|2|3|4}${res}"
exit 188
;;
esac
done
}
server #调用办理业务函数
执行效果如下:



------------------------------------------------------------------------------------------------------------------------------------
各语句常用于场景:
条件表达式:简单的判断(文件是否存在/字符串是否为空等等)
if语句:取值判断,不同值数量较少的情况
while:守护进程、无限循环(sleep)
case:服务启动脚本、菜单等
for:正常的循环处理,最常用。
while 循环总结:
1、while 循环的特征是执行守护进程以及我们希望可持续执行的环境,用于频率小于1分钟的循环处理,其他的while循环几乎都可以被for循环代替。
2、几乎所有的case语句都可以用if语句代替,case语句常用于系统脚本启动,其他普通判断多用于if语句。
3、if和for语句最常用,其次while(守护进程)和case(服务启动脚本)。
·····································································································································
因小柏目前水平有限,正在努力学习中,写的不好,路过的大佬多多指教,谢谢。
shell的while和until 的用法的更多相关文章
- [记录]Shell中的getopts和getopt用法
Shell中的getopts和getopt用法 1.getopts getopts(shell内置命令)不能直接处理长的选项(如:--prefix=/home等),getopts有两个参数,第一个参数 ...
- (转)轻松掌握shell编程中数组的常见用法及示例
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...
- Shell中的(),{}几种语法用法-单独总结
shell中的(),{}几种语法用法 查看脚本语法是否有错误: bash -n modify_suffix.sh 跟踪执行 sh -x modify_suffix.sh aaa 1. ${var} 2 ...
- Linux shell中&,&&,|,||的用法
前言 在玩dvwa的命令注入漏洞的时候,遇到了没有预料到的错误,执行 ping 127.0.0.1 & echo "<?php phpinfo(); ?>" & ...
- 发现linux shell中$0,$?,$!等的特殊用法
记录下linux shell下的特殊用法及参数的说明 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代 ...
- Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法
一.需求背景 因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...
- linux shell中$0,$?,$!等的特殊用法
记录下linux shell下的特殊用法及参数的说明 变量说明: $$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值 ...
- Shell基础(五):sed基本用法、使用sed修改系统配置、sed多行文本处理、sed综合脚本应用
一.sed基本用法 目标: 本案例要求熟悉sed命令的p.d.s等常见操作,并结合正则表达式,完成以下任务: 1> 删除文件中每行的第二个.最后一个字符 2> 将文件中每行的第一个. ...
- shell中echo基础及高级用法详解-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月19日 1.1 基础用法 echo命令用来输出文本,在shell脚本中用来输出提示信息用的比较多. 单引号:原样输出所有的内容,不用转义就能输出特殊 ...
- shell中$0,$?,$!等的特殊用法
变量说明: $$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表 ...
随机推荐
- Ansible基础认识及安装使用详解(week5_day1_part1)--技术流ken
Ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量 ...
- 介绍一款文档神器:pandoc
http://pandoc.org/ 因为工作需要,将一批markdown的文档转换成word文档,找来找去,这个pandoc真是神器 啊,推荐给大家 If you need to convert f ...
- spring_08aop原理及案例
*参考优质文档: https://www.cnblogs.com/xrq730/p/4919025.html 一.简介 aop(Aspect Oriented Programming)是面向切面编程, ...
- Root(hdu5777+扩展欧几里得+原根)2015 Multi-University Training Contest 7
Root Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Su ...
- <a>标签的特殊和文本的样式
a是特殊的,要改变a里面的颜色,必须直接给a设置,给a的父级设置不行 属性继承:明明是父级上的的设置样式,结果后代标签也跟着发生变化,这就叫做属性继承. Html 标记语言, 不是编程语言.说白了就是 ...
- thinkphp 3.2 去除调试模式后报错,怎么解决
1.案例一: 最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 “页面调试错误,无法找开页面,请重试”的错误. 我就郁闷啦,明明本地设置defin ...
- SqlMapConfig配置加注解
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...
- Salesforce 导入导出数据简介
导入数据的方式 有两种方式可以将数据导入Salesforce: 数据导入向导 Data Loader工具 Salesforce支持将csv文件中的数据导入系统. 数据导入向导 数据导入向导可以从设置界 ...
- iOS------App之间传递数据的几种方式
UIDocumentInteractionController UIActivityViewController Shared Keychain Access Custom URL Scheme We ...
- Android 方法数超过64k、编译OOM、编译过慢解决方案。
目前将项目中的leancloud的即时通讯改为环信的即时通讯.当引入easeui的时候 出现方法数超过上限的问题. 搜索一下问题,解决方法很简单. 这里简单记录一下,顺序记录一下此解决方案导致的另一个 ...