![for 루프와 "배열"이 포함된 쉘 스크립트](https://linux55.com/image/76139/for%20%EB%A3%A8%ED%94%84%EC%99%80%20%22%EB%B0%B0%EC%97%B4%22%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
for 루프 및 "배열"과 함께 이 sh 스크립트를 어떻게 사용할 수 있습니까? 을 사용하고
싶습니다 . 예:for loop
if
for domain in $DOMAINS
do
printf '%s\n' "$domain"
done
그렇다면 if 아래에 이를 추가하면 printf
어떤 모습이 될까요? 예를 들어, with 가 있을 때 전화를 받고 싶습니다 wlstop
.printf
wls wlstop $domain
#!/usr/bin/sh
ENV=$1
DOMAINS="1 2 3"
wls (){
echo "$0 : $1 -v -d $2"
$1 -v -d $2
}
remove (){
echo "$0 : Removing /domains/$1/servers/*"
set -x
rm -rf /domains/$1/servers/*
set +x
}
echo "$0 : Running wlsfullclean for $ENV"
if [ "$ENV" = "Utv" ]; then
#Stop domain
wls wlsstop 1
wls wlsstop 2
wls wlsstop 3
#Remove content in servers folder
remove 1
remove 2
remove 3
#wlsclean
wls wlsclean 1
wls wlsclean 2
wls wlsclean 3
#wlscfi
wls wlscfi 1
wls wlscfi 2
wls wlscfi 3
#Start server
wls wlsstart 1
wls wlsstart 2
wls wlsstart 3
elif [ "$ENVI" = "Prod" ]; then
echo "Prod"
fi
답변1
if [ Utv = "$ENV" ]
then for domain in 1 2 3
do for wls in stop clean cfi start
do wls wls"$wls" "$domain"
[ stop != "$wls" ] ||
remove "$domain"
done
done
fi
이 in ...
필드는 배열 할당입니다. 여기서 루프의 반복자를 할당합니다. 미리 설정된 배열을 사용하거나 여기에서 한 것처럼 하나를 만들 수 있습니다. 루프 배열을 할당하기 위한 유일한 목적으로 일부 쉘 변수를 할당하는 수고를 겪는 것은 실제로 의미가 없습니다. for
작업량이 두 배이고 추적하기가 쉽지 않습니다. 물론 이것은 단지 내 의견일 뿐이다.
루프가 기본적으로 사용할 사전 설정된 배열(셸의 arg 배열)이 있기 때문에 이 in ...
필드는 실제로 선택 사항입니다 . for
이런 종류의 일이 쉘 함수에서 더 의미가 있다고 생각하는 것은 바로 이러한 이유 때문입니다.
wls_lp(){
for wls in stop clean cfi start
do for domain
do set -x -- "-${-:--}" ${-:+"--"} "$@"
wls "wls$wls" "$domain"
[ stop != "$wls" ] ||
remove "$domain"
{ set +x "$@"; } 2>/dev/null
done;done
}
해당 함수를 스크립트에 넣으면 도메인 목록에 대해 전체 루프를 실행할 수 있습니다. 예를 들면 다음과 같습니다.
if [ Utv = "$ENV" ]
then wls_lp domain1 domain2 domain3
fi