3

我正在尝试编写我的第一个 Bash 脚本。我正在尝试创建一个脚本来启动我的主要流浪虚拟机,以便我可以从任何目录启动它。这是我到目前为止所拥有的:

#!/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 似乎正在运行,但之后的命令then似乎在 vagrant 之后被破坏了。我假设我做错了一些简单的事情。我最终希望将参数作为变量,然后将变量传递给 vagrant,但现在这似乎更复杂。

4

2 回答 2

7

您需要空格来分隔它们[[之间]]的代码。例如:

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
于 2013-05-20T18:06:12.967 回答
3

你的尾随;没有用。我也不明白你为什么把thens 放在那里,你可以把它们和条件放在同一行。此外,你为什么把括号加倍?我还被告知您需要括号内的空格。您的代码如下所示:

#!/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 回答