forループと「配列」を含むシェルスクリプト

forループと「配列」を含むシェルスクリプト

forループと「配列」でこのshスクリプトをどのように使用できますか?を使用したい
。例:for loopif

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

それでは、ifの下にこれを追加するとprintfどうなりますか?たとえば、withがあるときに電話を受けたいと思いますwlstopprintfwls 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 ...フィールドは配列割り当てです。ここでループのイテレータを割り当てます。あらかじめ設定された配列を使用するか、ここで行ったように1つを作成できます。ループ配列を割り当てるための唯一の目的で、いくつかのシェル変数を割り当てるのに苦労することは実際には意味がありません。for作業量が2倍で、追跡するのは簡単ではありません。もちろん、これは私の意見だけです。

ループがデフォルトで使用するプリセット配列(シェルの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

関連情報