2013-08-26 36 views
1

所以我有這樣的bash腳本的bash while循環不退出,而不是附和

function exec_do(){ 
while [[ 1 ]]; do 
    read _INPUT 
    if [$_INPUT -eq "exit"] 
    then 
    break 
    else 
    echo $_INPUT 
    fi 
done 
} 

的目的是基於這樣如果我在exec_do類型,然後它讀取while循環輸入和做的東西輸入。

如果輸入退出,然後退出while循環

如果輸入沒有再退出呼應它

然而,當我運行exec_do 然後鍵入input 相反,它返回input: command not found 此外,輸入「退出」不會打破循環,也沒有找到返回命令

我做錯了什麼,我該如何解決這個問題?

回答

3

您的比較_$INPUT是一個字符串,那麼您需要==。如果比較整數,則需要-eq。如果字符串可能包含空格或元字符,則還要雙引號$_INPUT變量。

#!/bin/bash 

function exec_do(){ 
    while [[ 1 ]]; do 
    read _INPUT 
    if[ "$_INPUT" == "exit" ]; then 
     break 
    else 
     echo $_INPUT 
    fi 
    done 
    } 

exec_do 
+0

很好的修復,特別是如果bash永遠是運行腳本的shell。如果需要簡單/舊shell的可移植性(例如ash或ksh),則可能需要較舊的語法:'[]'而不是'[[]]',否''''關鍵字,'='而不是'=' ='。 – sjnarv

+1

由於OP有'bash'作爲他的問題的標記,我假定他只使用那個shell。 – iamauser