while与read及selec循环(菜单)

while与read及selec循环(菜单)本文深入探讨了 Shell 脚本中的 while 与 read 命令的高级应用 包括如何避免空值陷阱 实现 IP 地址的黑名单功能 精确查找系统 nologin 账户 以及通过邮件发送磁盘警告的报警机制

大家好,欢迎来到IT知识分享网。

一、while与read

①、echo li |read x;echo $x ==》空

原因:将li传给x,但x与$x不在同一个shell中

都会输出 li

②、禁止某ip连接

iptables -A INPUT -s $ip -j REJECT

③、专门逐行处理,如找出nologin的系统账户

格式:

while read line;do 操作 done < /etc/passwd 
#!/bin/bash while read line;do if [[ $line =~ .*/sbin/nologin$ ]];then echo $line|cut -d: -f1,3 fi done < /etc/passwd 

④、稍微详细点的报警

#!/bin/bash WARNING=80 MAIL=@.com df|sed -nr '/\/dev\/sd/s#([^ ]+) .* ([0-9]+)%.*#\1 \2#p'|while read DEVICE USE;do if [ $USE -gt $WARNING ] ;then echo "$DEVICE will be full,use:$USE%" |mail -s "DISK WARNING" $MAIL fi done 

二、select循环(菜单)

语法:

select 变量 in 菜单; do 循环命令 done 

注:菜单的次序保存在$REPLY中
循环的提示符为PS3(PS2是cat <<EOF的提示符)

#!/bin/bash PS3="请点菜(1-6):" color='echo -e \033[1;32m' color1='echo -e \033[1;35m' end='\033[0m' sum=0 echo -e "\033[1;34m\c" select MENU in 土豆丝 千叶豆腐 大盘鸡 红烧牛肉 拉面 选择完毕;do echo -e "\033[0m" case $REPLY in 1|2) $color这道菜价为:¥10$end let sum+=10 $color1目前总共为:¥$sum$end ;; 3) $color这道菜价为:¥20$end let sum+=20 $color1目前总共为:¥$sum$end ;; 4) $color这道菜价为:¥25$end let sum+=25 $color1目前总共为:¥$sum$end ;; 5|6) $color这道菜价为:¥6$end let sum+=6 $color1目前总共为:¥$sum$end ;; 7) $color1您点的菜总共为¥$sum$end break ;; *) echo -e "\033[36;1m亲,没有这道菜哦,请重新选择吧\033[0m" esac done 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130350.html

(0)
上一篇 2025-08-15 21:33
下一篇 2025-08-15 21:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信