2013-07-23 61 views
0

我被困在一個肯定簡單的問題中(絕對確定當解決方案出現時,我會感覺虛擬)。我需要在bash腳本中讀取一個字符串,然後根據字符串值繼續。這一段代碼它不工作現在awk輸出到字符串或case命令錯誤

k=`awk '{ print $1 }' flag.txt` 

echo "FLAG = "$k 

case "$k" in 
    "S") echo " Yes it worked - Flag = " $k ;; 
    "N") echo " NOOOOOOOOOOOO - Flag = " $k ;; 
    *) echo "Not getting the right string??" ;; 
esac 

字符串值是正確的回波命令顯示的正確值,flag.txt只包含「S」或「N」(N在這種情況下)。絕對卡在這裏,無法弄清楚什麼是錯的,awk或case。在Ubuntu 12.04

腳本輸出工作:在您的幫助

[email protected]:~/temp$ cat flag.txt 
S 
[email protected]:~/temp$ ./prova2 
FLAG = S 
Not getting the right string?? 

感謝和抱歉,如果這是一個愚蠢的問題。

+0

它正在給我...你有沒有試着用簡單的'$的情況下ķin',而不是'「$ K」'? – fedorqui

+0

我想我已經嘗試過任何可能的組合......也許是腳本中的其他任何東西,如果這件作品適合你 – pacomet

+0

「flag.txt」的內容是什麼? –

回答

2

看來,該文件flag.txt具有CRLF行結束。執行以下,你會是肯定的:

$ awk '{ print $1 }' flag.txt | od 

這將在所有的可能性回報:

0000000 006523 000012 
0000003 

,而它應該返回:

0000000 005123 
0000002 

得到了擺脫\r輸入文件和腳本將按預期工作。

+0

這就是你所說的。我如何擺脫\ r? flag.txt由'echo N> flag.txt'生成,然後通過'wput -u flag.txt'發送到服務器,並在運行該腳本的另一臺機器中使用wget進行檢索。 – pacomet

+0

@pacomet有多種方式;看到http://stackoverflow.com/questions/800030/remove-carriage-return-in-unix – devnull

+0

謝謝@devnull現在工作正常,不是第一次遇到這種類型的問題,應該記住下次。 – pacomet