2014-02-10 139 views
0
#!/bin/bash 

while echo -n "Player's name?" 
    read name 
    [ $name != 'ZZZ' ] 

do 
searchresult=$(grep [$name] playername) 
if [ $searchresult=0 ] 

then 

    echo -n "if See target (T/t) or team name (M/m)?" 

    read team 
    read target 

    while [ [ $target!=T ] || [ $team!=M ] ] 

     do 

     echo "Please enter only T or M." 
     done 

     if $target=T 
     then 
      grep [ $name ] targetselected 

     else 

      grep [ $name ] teamselected 

     fi 

else 

echo 'no such player' 

fi 

done 
echo You are now exited search 

錯誤消息 - 第10行:[:太多的參數,這是什麼意思?

+0

你應該把'read'放在'while'裏面,否則''while'永遠不會返回false,因爲它每次都做同樣的事情? – heltonbiker

+0

如果您指出第10行的位置,那麼它會很有幫助,上面的第10行是空行。 –

+0

謝謝,第10行是if [$ searchresult = 0] – user2864813

回答

0

不知道它在發佈代碼行10你指着但我發現你貼的代碼一些問題如

while [ [ $target!=T ] || [ $team!=M ] ]應該

while [ $target!="T" ] || [ $team!="M" ] 

此外,if $target=T應該相應地if $target="T"

0

這兩行:

searchresult=$(grep [$name] playername) 
if [ $searchresult=0 ] 

是非常錯誤的。如果你正試圖確定grep成功,這是最好的事情:

if grep -q "$name" playername; then ... 

把grep的在$()和分配到SearchResult中有你比較grep的輸出,而不是檢查其退出狀態。而在第二行=附近缺少的空間是非常錯誤的。假設searchresult是一個不包含空格和只包含字母數字字符的字符串,因此字符串「$ searchresult = 0」始終爲非空,因此行if [ $searchresult=0 ]將始終計算爲true。 (如果searchresult是空字符串,那麼$searchresult=0是非空的字符串=0,因此測試成功。)您打算測試該字符串是否爲空是非常不可能的。您所看到的確切錯誤表明grep正在爲包含空格的searchresult賦值。在這種情況下,[ $searchresult=0 ](不包括雙引號$searchresult)正由[作爲多個參數進行分析(在$searchresult的空白處分割),並且錯誤告訴您參數太多。