while 循环语句

while 循环语句语法格式为:

while < 条件表达式 >
do指令
done

有关脚本运行的相关用法

命令 说明
sh file.sh & 把 file.sh 脚本放到后台运行(后台运行脚本的常用方法)
ctl+c 停止执行当前脚本或任务
ctl+z 暂停执行当前脚本或任务
bg 把当前脚本或任务放到后台执行
fg 把当前脚本或任务放到前台执行。如果是多个脚本,需加编号,如: fg 2
jobs 查看当前执行的脚本或任务
kill 关闭执行的脚本任务

有关进程管理的 Linux 相关命令

命令 说明
kill、killall、pkill 杀掉进程
ps 查看进程
pstree 显示进程状态树
top 显示进程
renice 改变优先权
nohup 用户退出系统之后继续工作
pgrep 查找匹配条件的进程
strace 跟踪一个进程的系统调用情况
ltrace 跟踪进程调用库函数的情况
小结

一. while 循环结构及相关语句综合实践

  1. while 循环的特长是执行守护进程,以及实现我们希望循环持续执行不退出的应用,适合用于频率小于 1min 的循环处理其他的 while 循环几乎都可以被 for 循环及定时任务 crontab 功能代替
  2. case 语句可以用 if 语句来替代,而在系统启动脚本时传入少量固定规则字符串的情况下,多用 case 语句,其他普通判断多用 if 语句
  3. 一句换场景,if 语句、for 语句最常用,其次是 while(守护进程)、case(服务启动脚本)

二. shell 脚本中各个语句的使用场景

  1. 条件表达式,用于简短的条件判断及输出(文件是否存在,字符串是否为空等)
  2. if 取值判断,多用于不同值数量较少的情况
  3. for 最常用于正常的循环处理中

案例一:
猜数字
随机生成一个 100 以内的数字,让用户输入数字来猜。游戏规则:输入的必须是数字,猜错时出现大小提示,才对时给出所用次数

#!/bin/bash
total=0
RETVAL=0
key=$((RANDOM%100))
echo "Let's play the guessing game!"
echo "key:$key"
panduan(){read -p "input num: " numexpr $num + 1 &>/dev/nullRETVAL=$?if [ $RETVAL -ne 0 ];thenecho "number number !!!"panduanfi
}guess(){((total++))if [ $num -lt $key ];thenecho "It is too small"panduanelif [ $num -gt $key ];thenecho "It is too big"panduanelseecho "Guess right"echo "yi gong cai le $total ci"exit 0fi
}
main(){panduanwhile truedoguessdone
}
main $*

案例二:
手机充值并发送短信。这个案例并没有实际用途,可以当做一个综合练习玩玩的
以下功能:

  1. 充值,但重复充值金额不累计,充值后立即查询余额无法正常使用
  2. 发送短信,输入发送的条数和短信内容,当金额不足时,可以选择(y:充值,n:修改发送条数,o:返回菜单)
  3. 查询余额,只有当使用发送功能选择(o:返回菜单)时,查询才可以生常使用
  4. 退出,结束当前脚本
#!/bin/bash
RETVAL=0
balance=0
menu(){
cat << EOF1) Recharge2) Send information3) Query4) exit
EOF
read -p " please enter a number: " num
case $num in1)echo "Welcome to chongzhi !"recharge;;2)echo "Welcome Check the balance !"send;;3)echo "Welcome to the query interface !"selects;;4)echo "Looking forward to your next arrival !"exit;;*)echo "Tips:{1|2|3|4}"menu
esac
}recharge(){read -p "please enter to RMB: " rmbexpr $rmb + 1 &>/dev/nullRETVAL=$?if [ $RETVAL -ne 0 ];thenecho "please input num"rechargefiecho "$rmbs  Rechargs success"((rmbs=$rmb + $balance))menu
}send(){while trueread -p "send several messages: " stripsexpr $strips + 1 &>/dev/nullRETVAL=$?if [ $RETVAL -ne 0 ];thenecho "please input num"sendfi((count=$strips * 15))doif [ $count -gt $rmbs ];thenecho "Insufficient amount !!!"read -p "Recharge(y|n|o) ?" orif [ $or = y -o $or = Y ];thenrechargeelif [ $or = n -o $or = N ];thensendelse menufielse read -p "Please input information content: " inputecho "sending:$input  send success"((balance=$rmbs - $count))echo "Balance: $balance"fi((rmbs=$rmbs - $count))done
}selects(){echo "Query:$balance"menu
}menu $*

案例三:
使用 while 守护进程的方式监控网站,每隔 10s 检测一次网站是否正常

#!/bin/bash
. /etc/init.d/functions
count=0
url_list=(
www.baidu.com
blog.51cto.com
www.taobao.com
www.192.168.80.123.com
)waits(){echo -n "3s run after"for((i=0;i<3;i++))doecho -n .sleep 1doneecho
}url(){waitsfor((i=0; i<`echo ${#url_list[*]}`; i++))dowget -o /dev/null -T 3 --tries=1 --spider ${url_list[$i]}>/dev/null 2>&1if [ $? -eq 0 ];thenaction "${url_list[$i]}" /bin/trueelseaction "${url_list[$i]}" /bin/falsefidone((count++))
}main(){while truedourlecho "------count:$count------"sleep 10done
}
main
while 循环按行读文件

方法一:

cat 文件|while read line
do命令
done

方法二:

while read line
do命令
done<文件

案例一:
编写一个 shell 脚本,实现 cat 命令的基本功能

#!/bin/bath
while read line
doecho $line
done</home/shell/fun.sh

案例二:
编写 shell 脚本,根据短时间内的 PV 量封掉对应 ip,解决类 DoS 的功能

#!/bin/bash
count=0
while true
do
netstat -an|grep EST|awk -F '[ :]+' '{print $6}'|sort|uniq -c>ip.log
exec<ip.log
while read line
dopv=`echo $line|awk '{print $1}'`ip=`echo $line|awk '{print $2}'`if [ $pv -gt 10 ]&&[ `iptables -nL|grep $ip|wc -l` -eq 0 ];theniptables -t filter -I INPUT -s $ip -j DROPecho "sun success"fi
done((count++))
sleep 10
echo "---$count---"
done

转载于:https://blog.51cto.com/12384628/2297292

Shell语法—— while 条件语句相关推荐

  1. linux while 多个条件,Shell语法—— while 条件语句

    while 循环语句 while 循环语句语法格式为: while < 条件表达式 > do 指令 done 有关脚本运行的相关用法 命令 说明 sh file.sh & 把 fi ...

  2. shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)

    文章目录 shell编程之条件语句 条件测试 test命令 整数值测试 free -m 提供了更简洁的查看系统内存使用情况: 字符串和逻辑测试 字符串 逻辑测试 一元运算符,二元运算符和三元运算符 i ...

  3. Shell编程之条件语句(if语句,case分支语句)

    Shell编程之条件语句 一.条件测试操作 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if语句 单分支结构 双分支结构 多分支结构 三.case分支语句 一.条 ...

  4. Linux网络服务与shell脚本——Shell编程之条件语句

    第八章 Shell编程之条件语句 一.条件测试 1.测试命令 (1)test 条件表达式 (2)[条件表达式] (3)$?:根据返回值判断前者是否成立 2.文件测试:根据指定路径名称,判断对应文件或目 ...

  5. shell脚本之条件语句

    1 条件测试 1.1 Test命令 可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立,反之不成立). 使用test命令测试时,有两种形式:(常用格式二) 格式一:te ...

  6. shell中的条件语句

     if-elif-else-fi语句 语法如下 if pipeline [pipeline-] then statements-if-true-1 [elif pipeline [pipeline ...

  7. Shell脚本之——条件语句if详解

    文章目录 一.test命令 1.2.格式 1.2.实例操作 二.文件测试 2.1.格式: 2.2.常用的测试操作符 2.3.实例操作 三.整数值比较 3.1.格式 3.2.常用的测试操作符 3.3.实 ...

  8. 你说shell编程的条件语句太难,我说那是你没看过这篇博客。

    文章目录 一.条件测试操作 (一). 条件测试操作 1.test命令 (二).文件测试 1.文件测试基本格式 2.常见的测试操作符 (三).整数测试 1.整数值比较 2.常用的测试操作符 (四).字符 ...

  9. Shell编程之条件语句

    目录 条件测试 条件测试操作-1 条件测试操作-2 条件测试操作-3 条件测试操作-4 条件测试操作-5 条件测试操作-6 条件测试操作-7 if语句的结构 单分支结 双分支结构 case语句结构 条 ...

最新文章

  1. WMI技术介绍和应用——执行方法
  2. [微信小程序]实现一个自定义遮罩层组件(完整示例代码附效果图)
  3. 程序员转型AI,成功几率有几分?
  4. java inner class,C# Inner Class vs. java 的inner class比较-JSP教程,Java技巧及代码
  5. java script valueof_Javascript new Date().valueOf()的作用与时间戳由来详解
  6. 允许用户把多个作业同时提交给计算机,2005年7月操作系统试题和答案
  7. ci框架去除index.php,ci框架如何隐藏index.php
  8. task search in offline - three filters implementation
  9. [css] css中最常用的字体有哪些?你是怎么选择字体的?
  10. CHM乱码解决方案!
  11. sqrt()平方根计算函数的实现1——二分法
  12. 用DropDownList实现的省市级三级联动
  13. Node介绍及环境配置~超级详细哦
  14. 设备唯一标志的解决方案
  15. 计算机网络中的www服务,计算机网络基础练习题01
  16. 用计算机怎么计算税率,税率计算器 个税计算器2017税率表公式
  17. linux源码rm函数,linux的rm命令源码
  18. 拍照识别植物软件app哪个好?这3个工具可以增加你的知识储备
  19. [Python爬虫]爬取新浪理财师股票问答
  20. 电大计算机基础光盘电脑安装,电大《计算机应用技术基础》第一章 计算机的硬件安装...

热门文章

  1. 装 linux后 win7消失了,win7系统重装后ubuntu启动消失不见的解决方法
  2. 为多孔介质的当量直径_新型纳米多孔碳材料在催化剂载体方面的应用
  3. Request请求对象
  4. 利用三层交换机实现VLAN间路由配置
  5. 全国计算机等级考试题库二级C操作题100套(第18套)
  6. 智能家居(工厂模式)
  7. linux 修改文件名_Linux常用命令
  8. python语言1002python语言_PYTHON语言学习
  9. 深大计算机科学与技术在广东省,广东考生请注意:深圳大学2021年计划本省总招生人数比例超过75%!...
  10. mybatis使用statement.getGenreatedKeys(); useGeneratedKeys=”true”;使用自增主键获取主键值策略和Oracle不支持自增,Oracle使用序列