다양한 서버에 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