带有 for 循环和“数组”的 shell 脚本

带有 for 循环和“数组”的 shell 脚本

我如何将这个 sh 脚本与 for 循环和“数组”一起使用。
我想for loopif.例子:

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

那么,如果您在 if 下添加该内容,那么printf应该是什么样子?例如,当 the带有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 ...字段是一个数组赋值。您在那里分配循环的迭代器。您可以使用预设数组,也可以像我在这里一样构建一个数组。为了分配循环数组的唯一目的而麻烦地分配一些 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

相关内容