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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二进制、八进制、十进制、十六进制关系及转换[通俗易懂]

    二进制、八进制、十进制、十六进制关系及转换[通俗易懂]二进制,八进制,十进制,十六进制之间的关系是什么?浮点数是什么回事?本文内容参考自王达老师的《深入理解计算机网络》一书<中国水利水电出版社>一、数制解释:1、编程中经常使用的数制分类(“你编程时能使用的数制全部在这里了”):⑴、十进制十进制是我们生活中使用得最频繁的进制了。十进制的基数是10,也就是说,十进制有10个数字符

    2022年10月17日
  • Java HashSet的实现原理详解

    Java HashSet的实现原理详解HashSet是JavaMap类型的集合类中最常使用的,本文基于Java1.8,对于HashSet的实现原理做一下详细讲解。(Java1.8源码:http://docs.oracle.com/javase/8/docs/api/)一、HashSet实现原理总结HashSet的实现原理总结如下:①是基于HashMap实现的,默认构造函

    2022年10月29日
  • 阿里云配置MYSQL远程连接

    想要远程连接阿里云服务器安装的mysql(不是RDS,RDS申请外网地址即可)需要两个步骤,第一步是修改允许连接mysql的权限,具体操作如下:首先登录:mysql-uroot-hlocalhost-ppassword打开mysql数据库:usemysql;将host设置为%表示任何ip都能连接mysql,当然您也可以将host指定为某个ip:updateuse

    2022年4月6日
  • 中国著名的D版和激活成功教程软件下载网站(转)「建议收藏」

    中国著名的D版和激活成功教程软件下载网站(转)「建议收藏」中国著名的D版和激活成功教程软件下载网站 (1)无忧软件网 – 不可多得的激活成功教程软件下载基地,附有无忧书库,无忧字体,代码基地,无忧教学,**园地,完全游戏http://www.51soft.com/ ;(2)精品软件秀 – 软件下载网页,可惜更新太慢!分类清楚,更新及时,也值得一看。http://www.ohsoft.com/ ;(3)163软件园 – 163软件园是国内著名的软件网站,网站定位是提供“提

    2022年6月18日
  • Ubuntu18.04下更改apt源为阿里云源「建议收藏」

    Ubuntu18.04下更改apt源为阿里云源「建议收藏」前言:看见Ubuntu新出了18.04版本感觉不错,装一个玩玩,虽然有很多教程可以参考,但我也给出一个不是很一样的方案吧,尽量解释的详细一点。为了下载更方便,速度更快,我们往往在使用Linux系列系统时修改apt源为国内的源,一般选择有阿里云,豆瓣之类的,下面简单说下如何更改为阿里云源。1.复制源文件备份,以防万一我们要修改的文件是sources.list,它在目录/etc/ap…

    2022年5月4日
  • windows系统上配置pip国内下载源

    windows系统上配置pip国内下载源

    2021年6月28日

发表回复

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

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