소스를 사용하여 다른 스크립트를 호출하고 if 문을 사용하여 호출 조건 설정

소스를 사용하여 다른 스크립트를 호출하고 if 문을 사용하여 호출 조건 설정

다양한 서버에 rsync 스크립트가 있습니다. 각 가상 머신의 세부 사항 에 맞게 다시 작성하는 대신 세부 사항에 대해 다른 스크립트를 작성 하고 source.sourceif

# 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

관련 정보