簡體   English   中英

協助簡單的Bash腳本

[英]Assistance With Simple Bash Script

我正在嘗試編寫我的第一個Bash腳本。 我正在嘗試創建一個腳本來啟動我的主要流浪漢VM,以便我可以從任何目錄啟動它。 這是我到目前為止:

#!/bin/bash
if [[ -n "$1" ]]; 
    then 
    if [["$1" == "up"]];
        then cd /home/user/DevEnv && vagrant up;
    elif [["$1" == "halt"]];
        then cd /home/user/DevEnv && vagrant halt;
    fi
else 
    echo "Must pass up or halt to script";
fi

當我運行這個時,我得到以下輸出

user@Debian ~ $ dev
Must pass up or halt to script
user@Debian ~ $ dev up
/home/user/bin/dev: line 5: [[up: command not found
/home/user/bin/dev: line 7: [[up: command not found
user@Debian ~ $ dev halt
/home/user/bin/dev: line 5: [[halt: command not found
/home/user/bin/dev: line 7: [[halt: command not found

最后其他人似乎能正常運行,但之后的命令then似乎顛沛流離之后被打破。 我假設我做的事情很簡單。 我最終希望將參數作為變量,然后將變量傳遞給vagrant,但現在看起來更復雜了。

你需要空格來將[[]]與它們之間的代碼分開。 例如:

elif [[ "$1" == "halt" ]];
    then cd /home/user/DevEnv && vagrant halt;
fi

這也是case語句的一個很好的用途:

case "$1" in 
   up)
       cd /home/user/DevEnv && vagrant up
       ;;
   halt)
       cd /home/user/DevEnv && vagrant halt
       ;;
   *)
       echo "Must pass up or halt to script"
       ;;
esac

你的尾隨; 沒用。 我也無法理解為什么你把then在那兒,你可以把它們放在同一行的條件。 此外,為什么你的括號加倍? 我還被告知你需要括號內的空格。 您的代碼如下所示:

#!/bin/sh

if [ -n "$1" ]; then 
    if [ "$1" = "up" ]; then
        cd /home/user/DevEnv && vagrant up
    elif [ "$1" = "halt" ]; then
        cd /home/user/DevEnv && vagrant halt
    fi
else 
    echo "Must pass up or halt to script"
fi

這就是我寫我的bash腳本的方式,但你可以保持then S於單獨的行。 如果這樣做,您可以刪除分號。

我不使用vagrant ,所以我無法檢查你的腳本,但是我給你的版本應該正常運行。

暫無
暫無

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

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