Shell脚本的循环:重复执行命令

1.for循环

语法:

for 变量名称 in 变量值列表

do

命令

Done

For根据变量值列表中的内容,重复执行命令,直到变量值列中的所有内容都取值完后结束。

取值列表的类型:可以是特定文本文件,命令生成列表

案例:

vi user.txt

Zsan

Lisi

:wq

clip_image002

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

clip_image004

chmod +x useradd_for.sh

./useradd_for.sh

clip_image006

案例:检查网络中存活主机

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

clip_image008

clip_image010

案例:设置开机服务

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

clip_image012

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等小服务的管理器

clip_image014

clip_image016

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

clip_image018

clip_image020

数组列表:

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

[root@www bin]#

clip_image022

clip_image024