2015-07-22 62 views
0

我有以下指令:bash的:如果指令,檢查來自可變行數失敗

if [[ ! `wc -l <<< $SILENT_LOG` -eq 1 -o ! `wc -l <<< $ACTIVE_LOG` -eq 1 ]] then 
     echo "There should be only a silent report log file!" >> $DEST_DIR/$RESULT_FILE 
     OK=0; 
fi 

行應該被設置爲0時SILENT_LOG或ACTIVE_LOG具有0個或多個行。問題是,以下引發錯誤:

**./reportComparator.sh: line 26: syntax error near `-o' 
./reportComparator.sh: line 26: `if [[ ! `wc -l <<< $SILENT_LOG` -eq 1 -o ! `wc -l <<< $ACTIVE_LOG` -eq 1 ]] then'** 

而且,我試着用回聲$ SILENT_LOG更換wc -l <<< $SILENT_LOG | wc-l但它仍然不起作用。

回答

1

你的代碼中有一些語法問題。

對於[[...]你可以使用:

if [[ $(wc -l < "$SILENT_LOG") -eq 1 || $(wc -l < "$ACTIVE_LOG") -eq 1 ]]; then 
    echo "There should be only a silent report log file!" >> $DEST_DIR/$RESULT_FILE 
    OK=0 
fi 
3

首先,以下語法將不起作用:

$ [[ 1 -eq 1 -o 2 -eq 2 ]] 
bash: syntax error in conditional expression 
bash: syntax error near `-o' 

在bash,你有兩個選擇:

$ [[ 1 -eq 1 || 2 -eq 2 ]] 
$ [ 1 -eq 1 -o 2 -eq 2 ] 

出於兼容性用普通的POSIX shell,以上都不應該使用,前者是因爲普通的POSIX不支持[[和後者,因爲普通的POSIX shell不能可靠地解析這樣長的測試。而是使用:

$ [ 1 -eq 1 ] || [ 2 -eq 2 ] 

對於第二個問題,讓我們創建一個變量三行:

$ silent_log='one 
> two 
> three' 

現在觀察:

$ wc -l <<<$silent_log 
1 
$ wc -l <<<"$silent_log" 
3 

如果你想行計算正確,你需要來重複你的變量。