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 ...
フィールドは配列割り当てです。ここでループのイテレータを割り当てます。あらかじめ設定された配列を使用するか、ここで行ったように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