2017-09-06 35 views
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 

我期待着紐約州的幫助,感謝你在

+0

用反斜槓將它轉義出來,你知道'\ *',並測試它 –

+0

所以如果我轉義每個'*',那麼在寫入之前我必須替換每個'\ *'。這會大大增加運行時間。你有其他想法嗎? – Vangorec

+0

您是否嘗試過在ls命令中使用反引號(')而不是使用$()表示法?所以看起來像data ='ls /scripts/s.iptables.d/iptables*' –

回答