さまざまなサーバーにrsyncスクリプトがあります。各仮想マシンの詳細に合わせて書き換えるのではなく、詳細に対して別のスクリプトを作成しますsource
。source
if
# Check for Atlassian Apps
if [[ "$SERVER_NAME=crowd.server.com" ]]; then
# call crowd-bkup.sh
echo -e "\e[1mCrowd backup running ...\e[0m"
SCRIPTDIR=$(dirname "$0")
# shellcheck source=src/crowd-bkup.sh
# shellcheck disable=SC1091
source "${SCRIPTDIR}/crowd-bkup.sh"
私の質問は、Confluence、Jiraサーバーなどにさらにコンテンツを追加する方法です。 load moreステートメントを追加せずに追加できますかif
?
答え1
[[ "$SERVER_NAME=crowd.server.com" ]]
$SERVER_NAME=crowd.server.com
常に真です(空でない文字列への拡張をテストします)。はい、意味は[[ "$SERVER_NAME" = "crowd.server.com" ]]
。
異なるサーバー名に対して異なる処理を実行するには、次のものを使用できますcase
。
case "$SERVER_NAME" in
crowd.server.com)
echo -e "\e[1mCrowd backup running ...\e[0m"
…
;;
jira.server.com)
echo -e "\e[1mJira backup running ...\e[0m"
…
;;
…
esac
複数の名前に対して同じコマンドを実行したい場合は、区切り記号付きの複数のパターンを使用できます|
。パターンにシェルワイルドカードを使用できます。
case "$SERVER_NAME" in
crowd.server.com|jira.server.com)
echo -e "\e[1mBackup running in ${SERVER_NAME%.*}...\e[0m"
…
;;
*.mysubdomain.server.com)
echo -e "\e[1mBackup running in mysubdomain...\e[0m"
…
;;
…
esac
答え2
配列を使用してforループ内にifをラップすることでこれを行うことができます。
#!/bin/bash
names=( crowd horde host army pack )
for n in "${names[2]}"; do
# Check for Atlassian Apps
if [[ "$SERVER_NAME=crowd.server.com" ]]; then
# call "${n}-bkup.sh"
echo -e "\e[1m$n backup running ...\e[0m"
SCRIPTDIR=$(dirname "$0")
# shellcheck source="src/$n-bkup.sh"
# shellcheck disable=SC1091
source "${SCRIPTDIR}/$n-bkup.sh"
done
または、位置パラメータを使用してください。
set -- crowd horde host army pack
for $n; do
.....
done