ソースを使用して別のスクリプトを呼び出し、ifステートメントを使用して呼び出し条件を設定する

ソースを使用して別のスクリプトを呼び出し、ifステートメントを使用して呼び出し条件を設定する

さまざまなサーバーにrsyncスクリプトがあります。各仮想マシンの詳細に合わせて書き換えるのではなく、詳細に対して別のスクリプトを作成しますsourcesourceif

# 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

関連情報