[英]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.