Linux bash iterating и Break

У меня две группы серверов SERVERS_CA AND SERVERS_NY.

У меня будет массив, похожий на SERVERGROUP = (CA NY)

  • Как мне показать только базовый каталог в моем терминале Ubuntu?
  • On quit, «less» НЕ очищает свое содержимое при запуске сеанса «screen»
  • Bash на Ubuntu на Windows Network Network Share
  • Команда перед каждой командой bash
  • Как добавить кучу WAV-файлов при сохранении (без нулевого заполнения) числового порядка?
  • Установите заголовок окна терминала в текущий каталог
  • CA и NY будут иметь множество серверов в таких массивах, как

    CA = (ca126 ca546 ca 642)

    NY = (ny112 ny113 ny114)

    Что мой сценарий должен сделать, так это проверить, будет ли HOSTNAME сервера, с которого мы запускаем скрипт, будет соответствовать той группе.

    Предположим, что HOSTNAME сервера находится в массиве CA, тогда он должен сказать что-то вроде SERVERGROUP IS CALIFORNIA

    Для этого скрипта цикл должен иметь оператор break и должен выйти из цикла после того, как будет найдена требуемая группа серверов, чтобы не перехватывать весь цикл.

    Если кто-то может помочь мне написать этот скрипт, это будет полезно. благодаря

  • Переход на ubuntu 13.04 с 12.04 с помощью iso image
  • «Панический пароль» в Linux
  • Возможно ли, что подстановочный знак Ubuntu * с tar каким-то образом не восстанавливает некоторые файлы?
  • Почему Dropbox использует так много памяти в Linux?
  • PubkeyAcceptedKeyTypes и тип ключа ssh-dsa
  • Когда я перезагружаюсь из Linux в Windows, клавиатура и мышь USB не работают
  • One Solution collect form web for “Linux bash iterating и Break”

    Массивы массивов действительно очень болезненны в bash

    host=ny113 for grp in "${SERVERGROUP[@]}"; do ref="${grp}[@]" for srv in "${!ref}"; do if [[ $host == $srv ]]; then echo $host is in $grp break 2 fi done done 
     ny113 is in NY 

    Использование ассоциативных массивов (bash version 4) – это другой подход:

     declare -A grps grps[CA]="ca126 ca546 ca 642" grps[NY]="ny112 ny113 ny114" for grp in "${!grps[@]}"; do # all quotes and spaces are very deliberate in next command if [[ " ${grps[$grp]} " == *" $host "* ]]; then echo $host is in $grp break fi done 

    Или вы могли бы построить «обратную карту»,

     declare -A host2group for grp in "${SERVERGROUP[@]}"; do ref="${grp}[@]" for srv in "${!ref}"; do host2group[$srv]=$grp done done echo $host is in ${host2group[$host]} 
     ny113 is in NY 
    Давайте будем гением компьютера.