for 루프와 "배열"이 포함된 쉘 스크립트

for 루프와 "배열"이 포함된 쉘 스크립트

for 루프 및 "배열"과 함께 이 sh 스크립트를 어떻게 사용할 수 있습니까? 을 사용하고
싶습니다 . 예:for loopif

for domain in $DOMAINS
do
  printf '%s\n' "$domain"
done

그렇다면 if 아래에 이를 추가하면 printf어떤 모습이 될까요? 예를 들어, with 가 있을 때 전화를 받고 싶습니다 wlstop.printfwls 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

관련 정보