2011-05-21 16 views
0

我已經嘗試了if-elif-else和case easc。我不知道爲什麼它不接受條件應該是真的。shell編程變量不會進入if或case語句

cat temp | (while read line 
do 
heading=${line%% *} 
echo "'$heading'" 

case $heading in 
'Cell') 
echo 'hit cell' 
echo $line | awk "{printf '%-20s %15s', $5, `./get.sh $5`}";; 
'Frequency') 
echo 'hit frequency' 
echo $line | awk "{gsub('\)', '', $5);printf '%6s', $5 }";; 
'blah') 
echo 'hit blah' 
echo $line | awk "{gsub('\"', '', $0);printf '%40s', $1 }";; 
*) echo 'fail';; 
esac 

done) 

我不明白爲什麼它不通過案例測試(或if-elif版本)。從回聲標題行我得到正是我期望: 「細胞」 「頻率」 「嗒嗒」

這些發生在一個週期,沒有空格可能導致測試失敗。

但它仍然打印失敗失敗失敗失敗。

有沒有人有任何想法可能會導致這種奇怪的行爲?我已經檢查了數值,找不到任何理由。幫助將不勝感激。

+0

是否所有的調用'awk'無關的問題?你的輸入文件是什麼樣的? – sarnold 2011-05-21 23:02:50

+0

他們應該是我已經單獨測試它們。它不會跳入案件陳述。輸入文件是一個mac-vendor分隔列表。 – aitee 2011-05-21 23:06:05

+1

也許我的第一個問題應該包含一個提示:如果我們可以運行一個腳本並輸入重現問題的文件,那麼解決問題就容易得多。 :) – sarnold 2011-05-21 23:08:30

回答

2

語法錯誤:你不需要單引號:

cat temp | (while read line 
do 
heading=${line%% *} 
echo "'$heading'" 

case $heading in 
Cell) 
echo 'hit cell' 
echo $line | awk "{printf '%-20s %15s', $5, `./get.sh $5`}";; 
Frequency) 
echo 'hit frequency' 
echo $line | awk "{gsub('\)', '', $5);printf '%6s', $5 }";; 
blah) 
echo 'hit blah' 
echo $line | awk "{gsub('\"', '', $0);printf '%40s', $1 }";; 
*) echo 'fail';; 
esac 

done) 
+0

roight,case與字符串相匹配。輸入必須是單引號匹配 – Keith 2011-05-22 00:04:35

+0

雙引號怎麼樣?(我看過其他地方有雙引號在線的例子) 它實際上和他們(單引號)一起工作,我確信它是egrep加入的顏色代碼。對於引用的東西,它必須依賴於shell解釋器嗎?) – aitee 2011-05-22 00:19:15

+0

我同意@aitee;至少在我的bash中,這是不正確的。試試這個測試:'echo test | while read line; do case $ {line }'test')echo match test1 ;;測試)echo match test2 ;; esac; done'。我得到了這個輸出:'match test1'。在評估案例目標之前,單引號被剝離。 – shellter 2011-05-22 19:21:23