2014-01-30 105 views
0
for ((c=0; c<$i; c++)); do 
if [[ "$aTitle" == "${bookTitle[$c]}" ]]; then 
if [[ "$aAuthor" == "${author[$c]}" ]]; then  
found=true 
fi 
fi 
done 

echo $found 

嗨,即時通訊相當新的shell編程,任何人都可以告訴我爲什麼我得到這個錯誤,當我運行這段代碼?非常感謝。 BOOKTITLE &作者是一個字符串數組 aTitle & aAuthor是輸入用戶Bash if else聲明錯誤

function add_new_book 
{ 
echo "1) add_new_book" 

found=false 

echo -n "Title: " 
read aTitle 
echo -n "Author: " 
read aAuthor 

for ((c=0; c<$i; c++)); do 
    if [[ "$aTitle" == "${bookTitle[$c]}" ]]; then 

     if [[ "$aAuthor" == "${author[$c]}" ]]; then  

      found=true 

     fi 

    fi 
done 

echo $found 
} 

#author[$i]=$aAut} 

./menu.sh: line 43: syntax error near unexpected token `done' 
./menu.sh: line 43: ` done' 
+0

該錯誤可能在其他地方。 – devnull

+0

執行爲bash -x ./menu.sh併發布輸出 – BrenoZan

+0

我不明白問題,我的示例通過了ok –

回答

0

for loop是錯誤的標準POSIX外殼! 這不是C/C++,它的外殼和這裏的通常的方式做到這一點:

for c in $(seq 0 $i); do 
    ... 
done 

和下面的結構:

typeset -i i END 
for ((i=0;i<END;++i)); do echo $i; done 

是bash的具體和下面給出任何錯誤:

#!/bin/bash 

function add_new_book() { 
    echo "1) add_new_book" 

    found=false 

    echo -n "Title: " 
    read aTitle 
    echo -n "Author: " 
    read aAuthor 

    # declare c and END as integers 
    typeset -i c END 
    let END=5 # use END instead of $i if $i is not defined! 
    for ((c=0;c<i;++c)); do 

     if [[ "$aTitle" == "${bookTitle[$c]}" ]]; then 

      if [[ "$aAuthor" == "${author[$c]}" ]]; then  

       found=true 

      fi 

     fi 
    done 

    echo $found 
} 

add_new_book 

所以我想你可能一直試圖用/bin/sh而不是/bin/bash來運行這個例子,它可能是另一個shell,如dashbsh。在for循環條件下,您也不能使用$i,但在中不應使用i

N.B .:在我給出的腳本中,仍然存在錯誤:$i未在腳本的上下文中定義!

+0

哦..謝謝..但它不應該工作呢? – user3188291

+0

鑑於他成功使用'function'關鍵字來定義函數,我懷疑他是否使用嚴格符合POSIX標準的shell。 – chepner

0

此示例腳本可能會對您有所幫助。

bookTitle="linux,c,c++,java" 
author="dony,jhone,stuart,mohan" 

function add_new_book() 
{ 
    IFS=', ' 
    read -a bookTitle <<< "$bookTitle" 
    read -a author <<< "$author" 

    echo "1) add_new_book" 

    found=false 

    echo -n "Title: " 
    read aTitle 
    echo -n "Author: " 
    read aAuthor 


    for index in "${!bookTitle[@]}" 
    do 
     if [[ "$aTitle" == "${bookTitle[index]}" ]] 
     then  

      if [[ "$aAuthor" == "${author[index]}" ]] 
      then  
        found=true 
      fi 
     fi 
    done 

    echo $found 
}