我如何将这个 sh 脚本与 for 循环和“数组”一起使用。
我想for loop
用if
.例子:
for domain in $DOMAINS
do
printf '%s\n' "$domain"
done
那么,如果您在 if 下添加该内容,那么printf
应该是什么样子?例如,当 the带有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 ...
字段是一个数组赋值。您在那里分配循环的迭代器。您可以使用预设数组,也可以像我在这里一样构建一个数组。为了分配循环数组的唯一目的而麻烦地分配一些 shell 变量确实没有意义for
- 它的工作量是两倍,而且不那么容易跟踪。当然,这只是我的意见。
无论如何,该in ...
字段实际上是可选的,因为有一个预设数组,for
循环将默认使用该数组 - shell 的 arg 数组。正是由于这个原因,我相信这种东西在 shell 函数中更有意义。
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