Shell脚本 (三)for循环 while循环 case分支语句

Shell脚本 (三)for循环 while循环 case分支语句

################for循环语句的结构#############
使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象、需要预先指定(如通讯录、IP黑名单)
·
语法样式
for 变量名 in 取值列表
do
  命令序列
done
·
#####for循环语句列子####
需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号,
初始密码均设置为“123456”,其中,员工列表的账户数量不固定,不相同。
·
1.编辑文本
[root@localhost ~]# cd /opt
[root@localhost opt]# vi users.txt
zhang3
li4
wang5
sun6
2.编辑脚本
##创建多个用户
[root@localhost opt]# vi uaddfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo “123456” | passwd –stdin $UNAME &>/dev/null
done
·
##删除uaddfor.sh脚本添加的用户
cd opt
vi udelfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
userdel -r $UNAME &>/dev/null
id $UNAME
done
·
##IP地址检查主机状态
[root@localhost opt]# vi ipadds.txt
192.168.10.1
192.168.10.2
192.168.10.3
192.168.10.4
·
[root@localhost opt]# vi chkhosts.sh
#!/bin/bash
HLIST=$( cat /opt/ipadds.txt )
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo “host $IP is up.”
else
echo “host $IP is down.”
fi
done
[root@localhost opt]# chmod +x chkhosts.sh
[root@localhost opt]# ./chkhosts.sh
host 192.168.32.1 is down.
host 192.168.32.2 is up.
host 192.168.32.3 is down.
host 192.168.32.11 is up.
·
#############while循环语句的结构###########
for循环语句非常适合列表对象无规则,且列表来源固定的场合,而对于需求控制的循环次数,操作对象按数字顺序的编号,按特定的条件执行重复操作等情况,则更适合使用一种循环语句—-while语句。
while语句使用流程:首先判断while后条件测试操作结果,如果条件成立,则执行do……done循环体;返回while后,再次判断条件测试结果,如果条件仍然成立,则继续折行循环体;再次返回while后,判断条件测试结果……..如此循环,直到while后的条件测试结果不在成立为止,最后跳到done语句,表示循环结束。
whlie特点:重复测试某个条件,只要条件成立则反复执行
·
语法样式
while 条件测试操作
do
命令序列
done
·
#####while循环语句实例#####
批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户,即stu1、stu2、……、stu20
初始密码均设为123456
·
[root@localhost opt]# vi uaddwhile.sh
#!/bin/bash
PREFIX=”stu”
i=1
while [ $i -le 20 ]
do
useradd ${PREFIX}$i
echo “123456” | passwd –stdin ${PREFIX}$i &> /dev/null
let i++
done
[root@localhost opt]# chmod +x uaddwhile.sh
[root@localhost opt]# ./uaddwhile.sh
·
###删除用户###
[root@localhost opt]# cd /opt
[root@localhost opt]# vi udelwhile.sh
#!/bin/bash
PERFIX=”stu”
i=1
while [ $i -le 20 ]
do
userdel -r ${PERFIX}$i
let i++
done
[root@localhost opt]# chmod +x udelwhile.sh
[root@localhost opt]# ./udelwhile.sh
·
·
###实例2###
猜商品价格游戏
通过变量RANDOM获得随机数
提示用户猜测并记录次数,猜中后退出循环
·
[root@localhost opt]# vi pricegame.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo “商品的实际价格范围0-999,猜猜看是多少”
while true
do
read -p “请输入你猜猜的价格数目:” INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo “恭喜你答对了,实际价格是 $PRICE”
echo “您总共猜对了 $TIMES 次”
exit 0
elif [ $INT -gt $PRICE ] ; then
echo “太高了!”
else
echo “太低了!”
fi
done
·
###解释###
1、while true 是代表无限循环下去
2、$RANDOM是Bash的内部函数,随机取值范围在0 – 32767之间
·
[root@localhost opt]# chmod +x pricegame.sh
[root@localhost opt]# ./pricegame.sh
商品的实际价格范围0-999,猜猜看是多少
请输入你猜猜的价格数目:900
太高了!
请输入你猜猜的价格数目:800
太高了!

请输入你猜猜的价格数目:325
恭喜你答对了,实际价格是 325
您总共猜对了 13 次
·
#############case分支语句的结构#############
针对变量的不同取值,分别执行不同的命令序列
·
###语法样式
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
 ……
)
默认命令序列
esac
·
###case使用特点
·
case行尾必须为单词”in”,每一模式必须以”)”结束
双分号”;;” 表示命令序列结束
模式字符串中,可以用方括号表示已个连续的范围,如”[0-9]”;还可以用竖杠符号”|”表示,如”A|B”
最后的”
” 表示默认模式,其中的相当于通配符。
·
###示例1
击键类型识别
提示用户输入一个字符
判断出该字符是字母、数字或者其他字符
·
vi hitkey.sh
#!/bin/bash
read -p “请输入一个字符,并Enter键确认:” KEY
case “$KEY” in
[a-z] | [A-Z])
echo “您输入的是 字母.”
;;
[0-9])
echo “您输入的是 数字.”
;;
)
echo “您输入的是 空格、功能键或者是其他控制字符.”
esac
·
[root@localhost opt]# chmod +x hitkey.sh
[root@localhost opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:A
您输入的是 字母.
[root@localhost opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:a
您输入的是 字母.
[root@localhost opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:1
您输入的是 数字.
[root@localhost opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:
您输入的是 空格、功能键或者是其他控制字符.

转载于:https://blog.51cto.com/13348945/2175540

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101418.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android DeepLink介绍与使用

    Android DeepLink介绍与使用前段时间公司让调研一下DeepLink,说以后会用到,之前看了很久,并做了个demo,现整理一下,方便以后查阅,如果有幸帮助到其他人就更好了。基本概念DeepLink,又叫deeplinking,中文翻译作深层链接。简单地从用户体验来讲,DeepLink,就是可以让你在手机的浏览器/GoogleSearch上点击搜索的结果,便能直接跳转到已安装的应用中的某一个页面的技术。对于不…

    2022年6月18日
    105
  • 手机NFC模拟M1门禁卡、写CUID白卡的一些研究记录

    手机NFC模拟M1门禁卡、写CUID白卡的一些研究记录一、需求场景近来小区安装了智能门禁,但只配发了一张门禁卡,不方便使用,于是产生了用手机模拟门禁卡,或者复制一张门禁卡的想法。本文使用的软件:(CSDN无法修改下载积分了。。。)包括手机NFC读写卡神器MifareClassicTool(MCT)2.2.5最新版、手机读卡工具NFCTagInfo、NFC卡模拟软件Cardemulator、RE管理器,以及一款NFC模拟…

    2022年6月10日
    176
  • Java冒泡排序实现

    Java冒泡排序实现Java冒泡排序原理:依次比较相邻的两个书,将较大的数放右边思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。代码演示:…

    2022年7月8日
    19
  • NFS修改2049端口号

    NFS修改2049端口号欢迎大家搜素微信公众号“东面而视”,分项技术及讨论技术《什么是NFS》   就是通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录内的数据。(一般共享视频,图片等静态数据) 为什么修改NFS的2049端口1. 其他服务再用2049端口2. 由于某些规定(如端口号必须在10000以上)修改方法1. 检查LINUX是否按装NFS[root@CT5_6-32-22…

    2022年6月27日
    27
  • VIM命令模式与输入模式切换

    VIM命令模式与输入模式切换

    2021年10月11日
    39
  • ubuntu完全卸载_docker安装ubuntu

    ubuntu完全卸载_docker安装ubuntudpkg-l|grepdockeraptremove–purgedockker.io

    2022年8月30日
    3

发表回复

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

关注全栈程序员社区公众号