1.for循环
语法:
for 变量名称 in 变量值列表
do
命令
Done
For根据变量值列表中的内容,重复执行命令,直到变量值列中的所有内容都取值完后结束。
取值列表的类型:可以是特定文本文件,命令生成列表
案例:
vi user.txt
Zsan
Lisi
:wq
vi useradd_for.sh
#!/bin/bash
Un=$(cat /root/bin/user.txt)
for i in $Un
do
useradd $i
echo 123123 |passwd --stdin $i
done
:wq
chmod +x useradd_for.sh
./useradd_for.sh
案例:检查网络中存活主机
vi chk_net_alive_host.sh
#!/bin/bash
read -p "please your want chk net:" NET
for i in $(seq 1 254)
do
ping -c 2 $NET.$i &&echo "$NET.$i is up."
done
案例:设置开机服务
vi chk_ser_onboot_for.sh
#!/bin/bash
SL=$(cat /root/bin/ck.list)
for i in $SL
do
/etc/init.d/$i status |grep pid
if [ $? -ne 0 ];then
/etc/init.d/$i restart
fi
chkconfig $i on
done
vi ck.list
auditd ##审计服务
blk-availability ##块设备管理服务
crond ##计划任务
dhcpd
gpm
iptables ##iptables防火墙
lvm2-monitor ##lvm的管理服务
named ##dns服务
network ##网络
ntpd ##时间服务器
postfix ##邮件服务
rsyslog ##系统日志服务
sshd ##远程连接
udev-post ##udev硬件管理服务
xinetd ##超级服务,cvs,tftpd等小服务的管理器
for取值列表扩展:序列列表,数组列表
序列列表:
vi for_list.sh
#!/bin/bash
FL={vsftpd,dhcpd,named}
for i in $FL
do
/etc/init.d/$i restart
chkconfig $i on
done
for i in {1..254}
do
ping -c 2 192.168.10.$i &>/dev/null
done
数组列表:
vi for-arry.sh
#!/bin/bash
A=(crond gpm iptables lvm2-monitor network rsyslog sshd udev-post)
echo ${A[1]}
echo ${A[5]}
echo A arry length is ${#A[*]}
for i in ${A[*]};do
chkconfig --list $i
done
[[email protected] bin]#