2017-04-18 37 views
0

我有一個非常簡單的bash腳本重置我的iptables的規則。它從另一個包含bash變量的「Config-File」中讀取配置參數。因此我使用關鍵字「來源」。Bash腳本從源文件讀取變量顯示沒有這樣的文件或目錄錯誤

我使用穩定軟件包運行debian服務器。 是bash版本運行

GNU的bash,版本30年3月4日(1)-release下(x86_64-PC-Linux的GNU)

當我執行我的Debian的服務器上的腳本輸出打印以下文字:

: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 

這裏bash腳本的內容:

#!/bin/bash 

CONFIG=../config/easywall.cfg 

if [ -f $CONFIG ]; 
then 
source $CONFIG 
fi 

eval $IPTABLES -F 
eval $IPTABLES -X 
eval $IPTABLES -t nat -F 
eval $IPTABLES -t nat -X 
eval $IPTABLES -t mangle -F 
eval $IPTABLES -t mangle -X 
eval $IP6TABLES -F 
eval $IP6TABLES -X 
eval $IP6TABLES -t nat -F 
eval $IP6TABLES -t nat -X 
eval $IP6TABLES -t mangle -F 
eval $IP6TABLES -t mangle -X 

exit 0 

而且配置文件中的內容:

!/bin/bash 
IPTABLES=/sbin/iptables 
IP6TABLES=/sbin/ip6tables 

大家有一個想法,爲什麼我得到這個錯誤?

+1

可能是回車在任何文件中的字符。運行'od -c filename'並查找'\ r'字符。另外,'eval'沒有用處,分號沒用,'!/ bin/bash'中缺少'#'。如果你發現回車符,用'dos2unix filename'將文件轉換成Unix行尾。 – Jens

+0

嘗試添加一個「else echo」無配置文件!「;退出1'到'if'語句,以查看文件是否被找到。我懷疑配置沒有被讀取,並且腳本繼續使用空變量。您還可以添加一個'echo「$ IPTABLES」'和'echo「$ IP6TABLES」'來檢查'source'是否按預期工作。 – Socowi

+0

Hi Jens!非常感謝您的超快速答案。問題是config-File中的一些'\ r \ n'字符。使用dos2unix轉換文件爲我工作。 –

回答

0

Jens的評論爲我工作。

首先我用

od -c filename 

展現bash腳本的內容和配置文件。 bash腳本的內容很好,但配置文件的內容顯示很多

\r\n 

在裏面。 我將文件轉換爲

dos2unix filename 

並且錯誤消失。

相關問題