3

初めての Bash スクリプトを作成しようとしています。任意のディレクトリから起動できるように、メインの vagrant 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

最後のelseは機能しているようですが、後のコマンドはvagrantの後thenに壊れているようです。私は単純な間違ったことをしていると思います。最終的には引数を変数として取り、その変数を vagrant に渡したいのですが、今はもっと複雑に思えます。

4

2 に答える 2

3

あなたの末尾;は役に立ちません。then条件と同じ行に sを入れる理由も理解できません。さらに、なぜ括弧を二重にしたのですか?また、括弧内にスペースが必要だと言われています。コードは次のようになります。

#!/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 スクリプトの書き方ですが、thens を別の行に置くことができます。その場合、セミコロンを削除できます。

を使用していないためvagrant、スクリプトを確認できませんでしたが、提供したバージョンは正しく動作するはずです。

于 2013-05-20T18:19:15.830 に答える