day04:for、case
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
day04:for、case
假如需要进⾏批量的操作,例如批量添加⽤户,批量复制⽂件。
这些批量执⾏的操作时if语句⽆法实现的,只能依靠循环语句再次之前了解⼀个造数⼯具:seq
seq 1 1 10 ###从1开始每次⾃加1,输出到10结束。
即输出1-10
for循环语句——基于变量赋值的循环(只要有值赋给变量,就⼀直循环、直到所有的值赋值完毕,循环结束)
for 变量名 in 取值列表【假如此处定以了多个值,空格分隔每⼀个值】
do
语句
done
例如:监测⼀段ip内的主机,那些在线、不在线(ping通认为在线)
vim /server/scripts/day04.sh
#!/bin/bash
for i in `seq 110`
do
IP=192.168.31.${i}
ping -c2 -W1 ${IP} >/dev/null ##ping对应主机,-c指定包的个数,-W指定超时时间
if [ $? -eq 0 ] ##判断ping命令的返回结果是否等于0,ping通返回0,ping不通返回⾮0
then
echo "${IP} is online"
else
echo "${IP} is not online"
fi
done
执⾏:
[root@rhel4 scripts]# bash day04.sh
192.168.31.1 is online
192.168.31.2 is online
192.168.31.3 is not online
192.168.31.4 is not online
192.168.31.5 is not online
192.168.31.6 is not online
192.168.31.7 is not online
192.168.31.8 is not online
192.168.31.9 is not online
192.168.31.10 is not online
例如:批量添加⽤户,并配置初始密码为123456
vim /server/scripts/day04.sh
#!/bin/bash
for user_name in user1 user2 user3 ##依次把user1、user2、user3赋值给变量user_name
do
id ${user_name} > /dev/null2>&1 ##判断本地有该⽤户,任何输出都不显⽰,有则返回0;⽆则返回⾮0
if [ $? -eq 0 ] ##判断上条shell的返回结果
then
echo "${user_name} already exists"
else
useradd ${user_name} && echo 123456 | passwd --stdin ${user_name} >/dev/null2>&1 ##添加⽤户、并且赋予密码if [ $? -eq 0 ] ##判断上条添加⽤户和修改密码的shel语句是否执成功
then ##为真
echo "${user_name} create successfully..."
else ##为假
echo "${user_name} create failed..."
fi
fi
done
执⾏:
[root@rhel4 ~]# bash /server/scripts/day04.sh ##第⼀次执⾏会添加⽤户
user1 create successfully...
user2 create successfully...
user3 create successfully...
[root@rhel4 ~]# bash /server/scripts/day04.sh ##第⼆次执⾏,判断系统有该⽤户,不添加
user1 already exists
user2 already exists
user3 already exists
================================
case 语句:根据变量的不同取值执⾏不同的操作
⼀般与⽤户交互输⼊,根据不同的输⼊,执⾏不同的操作 *每个case的匹配模式必须以 )结尾,;; 表⽰命令序列的结束case 变量名 in
变量值1)
命令序列1;;
变量值2)
命令序列2;;
变量值N)
命令序列N;;
*) ##都不匹配,才是匹配上*
命令序列*;;
例如:
vim /server/scripts/day04.sh
#!/bin/bash
read -p "请输⼊'mem|disk|cpu'其中的⼀个:" info
case $info in
mem)
free -m;;
disk)
df -h | grep /$;;
cpu)
w | sed -n 1p;;
*) ##以上都没有匹配上,该条为通⽤匹配
echo "输⼊错误";;
esac
执⾏:
[root@rhel4 ~]# bash /server/scripts/day04.sh
请输⼊'mem|disk|cpu'其中的⼀个:mem
total used free shared buff/cache available
Mem: 1839 102 1579 8 156 1578
Swap: 2047 0 2047
[root@rhel4 ~]# bash /server/scripts/day04.sh
请输⼊'mem|disk|cpu'其中的⼀个:disk
/dev/mapper/centos-root 27G 2.0G 25G 8% /
[root@rhel4 ~]# bash /server/scripts/day04.sh
请输⼊'mem|disk|cpu'其中的⼀个:cpu
14:49:56 up 1:41, 2 users, load average: 0.02, 0.03, 0.05
[root@rhel4 ~]# bash /server/scripts/day04.sh
请输⼊'mem|disk|cpu'其中的⼀个:111
输⼊错误。