我制作部署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
"
答案 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