Arrays bash,使用带有*的数组
我正在编写一个小脚本,加载一些iptables列表,并将每一行写入关联的链文件。 仅当脚本在空目录中运行时,这一切才起作用。 就我的理解而言,这是由于存储了*值的数组造成的。只要调用带有*的行,该值就会替换为当前目录中的所有文件 你们知道在非空文件夹中运行脚本的简单解决方案吗 下面是脚本在中运行时的输出示例~Arrays bash,使用带有*的数组,arrays,bash,Arrays,Bash,我正在编写一个小脚本,加载一些iptables列表,并将每一行写入关联的链文件。 仅当脚本在空目录中运行时,这一切才起作用。 就我的理解而言,这是由于存储了*值的数组造成的。只要调用带有*的行,该值就会替换为当前目录中的所有文件 你们知道在非空文件夹中运行脚本的简单解决方案吗 下面是脚本在中运行时的输出示例~ LOG tcp -- Bilder Dokumente Downloads Musik Öffentlich Schreibtisch Videos Vorlagen eth1 !125.
LOG tcp -- Bilder Dokumente Downloads Musik Öffentlich Schreibtisch Videos Vorlagen eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:45 LOG flags 0 level 4 prefix `LOGSMTP '
LOG tcp -- Bilder Dokumente Downloads Musik Öffentlich Schreibtisch Videos Vorlagen eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:225 LOG flags 0 level 4 prefix `LOGSMTP '
下面是一个在空文件夹中运行的输出示例
应该是这样的
LOG tcp -- * eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:45 LOG flags 0 level 4 prefix `LOGSMTP '
LOG tcp -- * eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:225 LOG flags 0 level 4 prefix `LOGSMTP '
这是剧本
#!/bin/bash
cd /scripts/s.iptables.d/work
data=$(ls /scripts/s.iptables.d/iptables*)
for file in $data
do
outputpath="/output/s.iptables-"
while read -r line
do
arr=($line)
case "$line" in
Chain* ) chain=${arr[1]}
output=$outputpath$chain
inactiveoutput=$outputpath$chain"-inactive"
;;
[1-9]* ) reg="^[0-9]*\s+0\s+0.*$"
if [[ "$line" =~ "$reg" ]]
then
echo "${arr[@]:3}" >> $inactiveoutput
else
echo "${arr[@]:3}" >> $output
fi
;;
esac
done < <(cat "$file")
done
我期待任何帮助并提前感谢您不要解析ls->and
执行以下操作之一:
files=( /scripts/s.iptables.d/iptables* )
for file in "${files[@]}"
或者干脆
for file in /scripts/s.iptables.d/iptables*
还完成了
done < "$file"