Linux bash iterating и Break

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

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

  • Gnu screen: найдите, какое окно экрана имеет заданный процесс или переменную?
  • Как сделать вызов псевдонимов bash условным на PWD?
  • Как присоединиться / объединить много mp3-файлов?
  • При клонировании с помощью git bash в Windows происходит получение Fatal: UriFormatException
  • Как удалить файл в Linux, чье имя похоже, что оно ТОЛЬКО дефис, как в "-"
  • Страница Bash Man: kill <pid> vs kill -9 <pid>
  • CA и NY будут иметь множество серверов в таких массивах, как

    CA = (ca126 ca546 ca 642)

    NY = (ny112 ny113 ny114)

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

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

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

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

  • Как мне зашифровать всю файловую систему Linux с помощью Veracrypt?
  • Как получить поддержку Java в Google Chrome в Linux?
  • Perl не найден?
  • Уменьшение переключения режима видео во время загрузки Linux
  • Как написать скрипт для sudo последней команды
  • Предоставляет ли поддельный RAID преимущество перед программным RAID?
  • 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 
    Давайте будем гением компьютера.