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