Как перебрать набор переменных, а затем развернуть переменные в Bash - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь настроить сценарий «Проверьте, подключены ли машины» к Bash, но сталкивается с вопросом, когда и где определять переменные, чтобы они правильно раскрывались.Что-то вроде:

#!/bin/bash
rm01="c01 c02 c03"
rm02="d01 d02 d03"
rm10="e11 e22 e33"
for room in rm01 rm02 rm03; do
    echo $room
    for computer in $room; do
        #run various nslookup/ping tests and report
    done
done
exit 0

У меня проблемы, потому что я не могу найти способ расширить $room для соответствующего набора компьютеров (в $rm01, $rm02, $rm10) указан в начале.

Что я делаю не так?

1 Ответ

0 голосов
/ 21 ноября 2018

Быстрое решение состоит в том, чтобы использовать переменную косвенность :

for computer in ${!room}; do

Полагаться на разбиение слов редко - лучшая идея.Вместо этого вы можете использовать массивы и namerefs (требуется Bash 4.3 или новее):

#!/usr/bin/env bash

# Declare arrays
rm01=(c01 c02 c03)
rm02=(d01 d02 d03)
rm03=(e11 e22 e33)

# Declare room as nameref
declare -n room

# Using nameref as control variable sets room as reference to each variable in turn
for room in rm{01..03}; do
    # Properly quoted array expansion
    for computer in "${room[@]}"; do
        echo "$computer"   # or whatever needs to be done
    done
done
exit 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...