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

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

[root@www bin]#

Logo

更多推荐