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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • rs232 ttl区别(新宝骏RM和RS的区别)

    CMOS电平和TTL电平:CMOS逻辑电平范围比较大,范围在3~15V,比如4000系列(4011与非门),当5V供电时,输出在4.6以上为高电平,输出在0.05V以下为低电平。输入在3.5V以上为高电平,输入在1.5V以下为低电平。    而对于TTL芯片,供电范围在0~5V,常见都是5V,如74系列5V供电,输出在2.7V以上为高电平,输出在0.5V以下为低电平,输入在2V以上为高

  • Mac 键盘快捷键

    Mac 键盘快捷键Mac键盘快捷键您可以按下组合键来实现通常需要鼠标、触控板或其他输入设备才能完成的操作。要使用键盘快捷键,请按住一个或多个修饰键,同时按快捷键的最后一个键。例如,要使用快捷键Command-C(拷贝),请按住Command键并按C键,然后同时松开这两个键。Mac菜单和键盘通常对某些按键使用符号,其中包括以下修饰键:Command⌘Shift⇧Option⌥Con…

  • 截图bat文件_dos批处理

    截图bat文件_dos批处理******批处理bat命令快速截图********set”p=E:\Test\”::设置截图保存的路径,注意结尾要有\sett=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%::设置当前的时间,用于截图的命名adbshell/system/bin/screencap-p/sdc…

  • 仿QQ聊天程序(java)

    仿QQ聊天程序(java)java聊天程序推荐java聊天室项目:http://zyshare.cn/resource/detail/15推荐java相关毕业设计项目整理:https://blog.csdn.net/zwx19921215/article/details/103225211推荐java最新聊天项目(java仿微信聊天):https://blog.csdn.net/zwx19921215/art…

  • strftime函数

    strftime函数strftime函数用于接收时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定(格式参数在本章前一节有详细介绍)。例如:01#!/usr/bin/envpython02#–coding:UTF-8–0304importtime0506t=(2018,7,17,17,3,1,1,1,0)07t=time.mktime(t)08print(time.strftime(“%b%d%Y%H:%M:%S”,time.gmtime(t)))执行结果如下:Jul

    2022年10月21日
  • P1396 营救_p1336燃烧失火

    P1396 营救_p1336燃烧失火P1396营救218通过571提交题目提供者yeszy标签二分图论并查集福建省历届夏令营难度普及-题目描述“咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门……妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的…

发表回复

您的电子邮箱地址不会被公开。

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