for循环


1.
ls -R 递归查看
touch file_{1,2,3}_{a,b,c}
dirname 返回文件所在路径
basename 返回文件名
eg:
# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
# basename /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts


2. for loop语法:
for 变量名 in 列表
do 
循环体
done


列表就是一个集合,可以是以下几种:
1)数字/字符集合 eg:1 2 44 或 {1..254}
2) 文件集合 eg: /etc/*.conf
3) $(find /etc/ -perm -003) 


3. 批量修改防火墙规则


1)输出防火墙规则
#!/bin/bash
for ADDR in {1..254}
do
echo "iptables -I INPUT -s 172.24.0.$ADDR"
done


2)新建一个空的脚本setfw.sh, 将要修改的防火墙规则重定向到sefw.sh中,以便下次直接执行setfw.sh脚本即可改变防火墙规则 
#touch /tmp/setfw.sh


#vim iptables.sh
脚本内容:
#!/bin/bash
SETFW=/tmp/setfw.sh
echo "#!/bin/bash" > $SETFW
for ADDR in {1..254}
do
        echo "iptables -I INPUT -s 172.24.0.$ADDR" >> $SETFW
done
chmod a+x $SETFW


3)编辑脚本,添加参数,以便手动输入要改变规则的网段
#!/bin/bash
SUBNET=$1
SETFW=/tmp/setfw.sh
echo "#!/bin/bash" > $SETFW
for ADDR in {1..254}
do
        echo "iptables -I INPUT -s $SUBNET.$ADDR" >> $SETFW
done
chmod a+x $SETFW


4)执行脚本sh iptables.sh,cat /tmp/setfw.sh查看规则是否写入文件中


4. 批量备份文件


1)将/etc/*.conf文件复制到/tmp目录下
#!/bin/bash
SUFFIX=$(date +%Y%m%d)
for filename in /etc/*.conf
do
        cp -v $filename /tmp/$filename.$SUFFIX
done


2)系统提示出错,因为不存在/tmp//etc/目录,复制时我们使用的时完整路径名,所以使用basename取出文件名,修改如下:
#!/bin/bash
SUFFIX=$(date +%Y%m%d)
for filename in /etc/*.conf
do
        cp -v $filename /tmp/$(basename $filename).$SUFFIX
done


3)为了灵活修改备份目录,添加变量
#!/bin/bash
DES=/tmp
SUFFIX=$(date +%Y%m%d)
for filename in /etc/*.conf
do
        cp -v $filename $DES/$(basename $filename).$SUFFIX
done


5. 批量测试服务器是否在线


1)先测试ping一台服务器
#!/bin/bash
SERVER="172.24.254.254"
ping -c2 $SERVER &> /dev/null
RES=$?
if [[ $? -eq 0 ]];then
        echo "$SERVER is online"
else
        echo "$SERVER is not online"
fi


2)用for循环
#!/bin/bash
for SERVER in 172.24.254.254 192.168.1.1 172.25.8.8
do
        ping -c2 $SERVER &> /dev/null
        RES=$?
        if [[ $? -eq 0 ]];then
                echo "$SERVER is online"
        else
                echo "$SERVER is not online"
        fi
done


3)/tmp下新建testservers.conf, 将要测试的服务器都写进去
文件内容:
#ftp server
172.24.254.254


#loop IP
#127.0.0.1


#router IP
192.168.1.1


#proxy server
172.24.100.180
172.24.8.8


查看有效内容:
cat /tmp/testservers.conf |grep -Ev '^($|#)'


4)修改脚本,通过读取文件里的server IP ,测试是否在线
#!/bin/bash
SERVERS=/tmp/testservers.conf
for SERVER in $(cat $SERVERS | grep -Ev '^($|#)')
do
        ping -c2 $SERVER &> /dev/null
        RES=$?
        if [[ $RES -eq 0 ]];then
                echo "$SERVER is online"
        else
                echo "$SERVER is not online"
        fi
done


5)执行脚本sh testservers.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值