Сценарий оболочки с циклом for и "array"

Как я могу использовать этот sh-скрипт для цикла и массива.
Я хотел бы назвать домены с for loop внутри if . Пример:

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

Итак, если вы добавите это под, то тогда printf должен быть как? Например, 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 

One Solution collect form web for “Сценарий оболочки с циклом for и "array"”

 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 loop – это в два раза больше работы, и не так легко отслеживать. Это, конечно, мое мнение.

В любом случае, поле 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 
  • Устранение неполадок команды grep
  • Какие оболочки имеют функции, где «local» не изменяет экспортированные переменные для дочерних процессов?
  • Удалите все повторяющиеся слова из строки, используя сценарий оболочки
  • $ 2 (ссылка на поле) в awk BEGIN не работает
  • как выбрать одну звуковую дорожку, если в медиафайле есть несколько звуковых дорожек с использованием mpv?
  • Как получить последние N файлов в каталоге?
  • Условно убивая процесс, основанный на его выходе
  • / dev / tcp прослушать вместо nc listen
  • Предоставлять строки, хранящиеся в файле, в виде списка аргументов для команды?
  • Как перезапустить скрипт Python автоматически, если он убит или умирает
  • Нужна команда для отображения эха «успех»
  • Linux и Unix - лучшая ОС в мире.