[内容] Linux for 循环

内容一:Linux for 循环的格式

for <variable> in <list>
do
<command>
done

内容二:Linux for 循环的使用案例

2.1 案例一:以名称作为循环条件

# for i in host1 host2 host3; do echo $i; done
host1
host2
host3

(补充:这里以 host1、host2、host3 三个名称作为循环条件为例)

2.2 案例二:以数组中的元素作为循环条件

# for i in {host1,host2,host3}; do echo $i; done
host1
host2
host3

(补充:这里以 host1、host2、host3 三个名称作为循环条件为例)

2.3 案例三:以名称和正则表达式的组合作为循环条件

# for i in host{1..3}; do echo $i; done
host1
host2
host3

(补充:这里以 host1、host2、host3 三个名称作为循环条件,并且通过通佩符进行了缩写为例)

2.4 案例四:以当前目录下的文件名,并以名称和通佩符的组合作为循环条件

# for i in *.txt ;do ls $i; done
a.txt
b.txt
c.txt

(补充:这里以所有以 txt 结尾的文件作为循环条件为例)

2.5 案例五:以当前目录下名称和正则表达式的组合文件名作为循环条件

# for i in {a..c}.txt; do ls $i; done
a.txt
b.txt
c.txt

(补充:这里以所有以 txt 结尾的文件作为循环条件为例,并且通过通佩符进行了缩写为例)

2.6 案例六:以连续数字作为循环条件

2.6.1 以连续数字作为循环条件
# for i in 1 2 3 4 5 6 7 8 9 10;do echo $i;done
1
2
3
4
5
6
7
8
9
10

或者:

# for((i=0;i<=10;i++));do echo $i;done
1
2
3
4
5
6
7
8
9
10
2.6.2 以 seq 命令生成的数字作为循环条件
# for i in `seq 1 10`; do echo $i; done
1
2
3
4
5
6
7
8
9
10

(补充:这里以 seq 1 10 命令的运行结果 1 到 10 作为循环条件为例)

2.6.3 以 seq 命令生成的数字作为循环条件 (使用变量)
# start=1 ; end=10
# for i in `seq $start $end`; do echo $i; done
1
2
3
4
5
6
7
8
9
10

(补充:这里以 seq 1 10 命令的运行结果 1 到 10 作为循环条件为例)

2.6.4 以连续符号命令生成的数字作为循环条件
# for i in {1..10} ; do echo $i; done
1
2
3
4
5
6
7
8
9
10

(补充:这里以 {1..10} 符号命令的运行结果 1 到 10 作为循环条件为例)

2.7 案例七:以等差数列作为循环条件

# for i in `seq 6 2 12`; do echo $i; done
6
8
10
12

(补充:这里以 seq 6 2 12 命令的运行结果 6 到 12 里的等差是 2 的等差数列作为循环条件为例)

2.8 案例八:以命令的运行结果作为循环条件

# for i in `cat user.list`; do echo $i; done
Tom
Natasha

(补充:这里以 cat user.list 命令的运行结果 user.list 文件里的内容作为循环条件为例)

2.9 案例九:多个循环条件

> for i in {1..4}.{1..4}; do echo $i; done
1.1
1.2
1.3
1.4
2.1
2.2
2.3
2.4
3.1
3.2
3.3
3.4
4.1
4.2
4.3
4.4

(补充:这里以 {1..4}.{1..4} 命令的运行结果 1.1 到 4.4 作为循环条件为例)

2.10 案例十:通过循环创建数组

2.10.1 创建使用数组的脚本
# vim test.sh

创建以下内容:

#!/bin/bash
Variaty=`echo a;echo b;echo c`
Number=0
Array=(0 1 2)

for i in $(echo $Variaty)
do
    Array[$Number]="$i"
    let Number++
done

The_first_value=${Array[0]}
The_second_value=${Array[1]}
The_third_value=${Array[2]}

echo $The_first_value
echo $The_second_value
echo $The_third_value

(补充:这里以创建名为 test.sh 显示全部三个数组的值为例)

2.10.2 执行使用数组的脚本
# . test.sh 

(补充:这里以执行名为 test.sh 的脚本为例)

[工具] Shell 取消所有已开放的端口策略 (firewalld 版)

介绍

基本信息

作者:朱明宇
名称:取消所有已开放的端口策略
作用:取消所有已开放的端口策略

使用方法

1. 给此脚本添加执行权限
2. 执行此脚本

脚本

#!/bin/bash

systemctl start firewalld
systemctl enable firewalld

for i in `firewall-cmd --list-all | grep ports | egrep [0-9] | awk -F':' '{print $2}'`
do
        pports=`echo $i | awk -F'/' '{print $1}'`
        ptus=`echo $i | awk -F'/' '{print $2}'`

        firewall-cmd --remove-port=$pports/$ptus --permanent

done

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

[工具] Shell 取消所有已设置的复杂端口策略 (firewalld 版)

介绍

基本信息

作者:朱明宇
名称:取消所有已设置的复杂端口策略
作用:取消所有已设置的复杂端口策略

使用方法

1. 给此脚本添加执行权限
2. 执行此脚本

脚本

#!/bin/bash

systemctl start firewalld
systemctl enable firewalld

max=`firewall-cmd --list-all | grep "rule family" | wc -l`

for i in `seq 1 $max`
do
        echo $i
        lines=`firewall-cmd --list-all | grep "rule family" | sed -n $[i]p`
        ipvs=`echo $lines | awk -F'"' '{print $2}'`
        ips=`echo $lines | awk -F'"' '{print $4}'`
        ports=`echo $lines | awk -F'"' '{print $6}'`
        tus=`echo $lines | awk -F'"' '{print $8}'`
        acts=`echo $lines | awk -F'"' '{print $9}'`

        echo $ipvs $ips $ports $tus $acts
        firewall-cmd --remove-rich-rule="rule family="$ipvs" source address="$ips" port protocol="$tus" port="$ports" $acts" --permanent
done

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

[工具] Shell 开放所有正处于监听状态的端口策略 (firewalld 版)

介绍

基本信息

作者:朱明宇
名称:开放所有正处于监听状态的端口策略
作用:开放所有正处于监听状态的端口策略

使用方法

1. 给此脚本添加执行权限
2. 执行此脚本

脚本

#!/bin/bash

systemctl start firewalld
systemctl enable firewalld

for k in `ss -ntulap |grep 0.0.0.0 | grep LISTEN | awk '{print $5}' | awk -F':' '{print $2}'`
do 
        firewall-cmd --add-port=$k/tcp --permanent
done

firewall-cmd --reload