0
我正在處理一個加載一些iptables列表並將每行寫入相關鏈文件的小腳本。 只有當腳本在空目錄中運行時,這一切纔有效。 據我瞭解正確,這是由於我有*存儲的值的數組。只要調用帶*的行,該值將被當前目錄中的所有文件替換。bash,使用帶*的數組
你們知道一個簡單的解決方案在非空文件夾中運行腳本嗎?
這裏是輸出的一個例子,當腳本〜
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
我期待着紐約州的幫助,感謝你在
用反斜槓將它轉義出來,你知道'\ *',並測試它 –
所以如果我轉義每個'*',那麼在寫入之前我必須替換每個'\ *'。這會大大增加運行時間。你有其他想法嗎? – Vangorec
您是否嘗試過在ls命令中使用反引號(')而不是使用$()表示法?所以看起來像data ='ls /scripts/s.iptables.d/iptables*' –