Shell脚本不会更改为作为参数传递的目录

时间:2013-10-02 16:59:02

标签: shell unix

我正在制作一种部署脚本。它是一个非常简单的基于git pull的部署。 我需要它接受两个参数:要部署的应用程序和服务器的类型(登台,测试,生产)。所以我用每个应用程序的函数编写了脚本

./deploy.sh <appname> <server>

-

#deploy.sh
app1(){
        echo $2 #Empty
        cd /srv/www/app1/$2 #


        git pull origin master

}
case $1 in
        "app1") app1;;
esac

现在,当我使用以下命令./deploy.sh app1 staging运行脚本时。 该脚本仅导航到/srv/www/app1目录,而不是/srv/www/app1/staging 当我回显$ 2时,没有显示任何内容。 我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题是当你在$2中使用app1时它试图解释传递给app1的参数是空的,所以你需要将它作为参数传递给{{1} }}。试试这个:

app1

答案 1 :(得分:0)

研究范围。 shell脚本的每个函数都可以传递参数。 app()函数正在寻找$ 2作为自身的参数。没有args通过,所以$ 2相当于&#34;&#34;。如果你使用下面的脚本,你应该没问题,在案件中将$ 2传递给app1。

#deploy.sh
app1(){
        echo $1 #Empty
        cd /srv/www/app1/$1 #


        git pull origin master

}
case $1 in
    "app1") app1 $2 ;;
esac