簡體   English   中英

Bash不允許在case語句中使用if語句

[英]Bash does not allow if statement inside case statement

有人可以幫我找出我在這個bash腳本上做錯了什么。 我正在嘗試使用if語句內部case語句和bash抱怨語法錯誤。

findinfo() {
OPT1=$1
case  "$OPT1" in
   linux)
        echo "Setting environment"
        ESC="hello_linux" if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]]
        ;;
   Windows)
        echo "Setting environment"
        ESC="hello_windows" if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]]
        ;;
   Android)
        echo "Setting environment"
        ESC="hello_android" if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]]
        ;;
esac

}

謝謝

在bash中, if必須在then部分之前:

if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]] ; then ESC=hello_linux ; fi

if可能在Perl中使用“postfix”(也可能在其他地方),但不能在bash中使用。

以下語法是替代方案:

[[ $PROJN = ONE || $PROJN = TWO ]] && ESC=hello_linux

......以下內容仍然較短,並且符合較舊的外殼:

case $PROJN in ONE|TWO) ESC=hello_linux ;; esac

在case語句中使用if是沒有問題的。 這是你的if語句有點不正確。

你的if語句與$ESC賦值在同一行。 不在case之外工作不起作用。 此外,您還需要使用-o在您if語句,您至少需要一條線來執行,如果你的if聲明是真實的。 (我只是把一個echo作為占位符)。

可能是這個特殊的if語句應該在你的case之外。 我注意到它們都是一樣的。 在這種情況下無需重復代碼,只需將你的if放在esac

順便說一下:你可以用以下兩種方式之一做一個or一個if:

if [[ "$PROJN" == "ONE" -o  "$PROJN" == "two" ]]

要么

if [[ "$PROJN" == "ONE" ]] || [[  "$PROJN" == "two" ]]

現在回到你的定期計划......

findinfo() {
    OPT1=$1
    case  "$OPT1" in
       linux)
            echo "Setting environment"
            ESC="hello_linux" 
            if [[ "$PROJN" == "ONE" -o  "$PROJN" == "two" ]]
            then
                 echo "Here be dragons..."
            fi
            ;;
       Windows)
            echo "Setting environment"
            ESC="hello_windows" 
            if [[ "$PROJN" == "ONE" -o  "$PROJN" == "two" ]]
            then
                 echo "Here be dragons..."
            fi
            ;;
       Android)
            echo "Setting environment"
            ESC="hello_android" 
            if [[ "$PROJN" == "ONE" -o "$PROJN" == "two" ]]
            then
                 echo "Here be dragons..."
            fi
            ;;
    esac
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM