部署bash脚本。如果,否则和ssh

时间:2014-10-25 16:18:31

标签: bash shell ssh

我制作部署Bash脚本,但我遇到了问题。我不明白如何使用if / else选择服务器并在服务器上运行命令。我想用params运行脚本:

sh deploy.sh beta

sh deploy.sh production

我的剧本:

#!/bin/bash

production='user@production_server'
beta='user@beta_server'
demon_path='demon'
params=$1

if [[ params == "production" ]]
  then ssh -A $production
else
  ssh -A $beta
fi

"
cd $demon_path

git checkout master
git pull --rebase

touch restart.txt

exit
"

3 个答案:

答案 0 :(得分:2)

非常简单,

#!/bin/bash

if [[ "$1" == "production" ]]; then
    server='user@production_server'
else
    server='user@beta_server'
fi

ssh -A "$server" "cd demon
    git checkout master
    git pull --rebase
    touch restart.txt"

答案 1 :(得分:0)

here documen t可以帮助您

您可以使用自定义分隔符将一组命令作为

在服务器上执行
ssh user@hostname << EOF
#some commands to be excecuted.
EOF

您程序中的if构造可以修改为

if [[ "$params" == "production" ]]
  then 
    ssh -A $production << EOF
       cd $demon_path

       git checkout master
       git pull --rebase

       touch restart.txt
    EOF
else
    ssh -A $beta << EOF
       cd $demon_path

       git checkout master
       git pull --rebase

       touch restart.txt
    EOF
fi

这样可以在EOF

中使production_server之前的命令有效

答案 2 :(得分:0)

您可以使用一些特定于bash的功能,例如关联数组:

#!/bin/bash

declare -A dest=(
    [production]='user@production_server'
    [beta]='user@beta_server'
)
demon_path='demon'

if [[ -z ${dest[$1]} ]]; then
    echo "error: choose one of ${!dest[*]}"
    exit 1
fi

ssh -a "${dest[$1]}" <<END
cd $demon_path && {
    # only execute the git commands if cd succeeded
    git checkout master
    git pull --rebase
    touch restart.txt
}
END