Сгенерировать меню shellscript с адресами хостов из файла и отобразить опции с «статусом ping» под каждой опцией?

Сгенерировать меню shellscript с адресами хостов из файла и отобразить опции с «статусом ping» под каждой опцией?

Вопрос: Сгенерировать меню shellscript с адресами хостов из файла и отобразить опции с "статусом ping" под каждой опцией? Есть ли у вас какие-нибудь идеи, как помочь?

Имя файла:bssh.sh

#!/bin/bash
# Display Servers
echo "Servers List"
echo ""
SERVERS="servers_list.txt"
while IFS= read -r SERVERS_LINE || [[ -n "$SERVERS_LINE" ]]; do
    serveraddress=$(echo $SERVERS_LINE | cut -d"@" -f 2)
    servername=$(echo $SERVERS_LINE | cut -d"@" -f 1)
    if ping -c 1 -W 1 $serveraddress >/dev/null 2>&1; then
        echo -e "$servername [\033[0;32mOnline\033[0m]"
        echo ""
    else
        echo -e "$servername [\033[0;31mOffline\033[0m]"
        echo ""
    fi
done <"$SERVERS"
readarray -t Servers < servers_list.txt
PS3=$'\n'"Enter your choice or 0 to exit: "
select selection in "${Servers[@]}"; do
    if [[ $REPLY == "0" ]]; then
        echo -e "\033[0;90mPeace Out!\033[0m" >&2
        exit
    else
        # Modify the way the program is called
        if [[ -e /usr/bin/ssh ]]; then
            echo ""
            ssh "$selection"
            #echo ""
        else
            echo ""
            ssh "$selection"
            #echo ""
        fi
        break
    fi
done

Имя файла:servers_list.txt

[email protected]  
[email protected]  
[email protected]
   

решение1

Во-первых, вы можете использовать readarrayдля заполнения вашего массива, прочитав файл один раз. В любом случае, как только вы заполнили массив, вы можете просто повторно использовать этот массив и анализировать его по мере использования, чтобы извлечь нужный вам бит из каждой записи:

$ cat se.sh
#!/bin/bash
readarray ssh_users < input
printf "SSH connections list:\n"
for connection in ${ssh_users[@]}; do
   printf "%s\n" "${connection}"
done
printf "Users list:\n"
for user in ${ssh_users[@]}; do
   printf "%s\n" "${user%%@*}"
done
printf "Servers list:\n"
for server in ${ssh_users[@]}; do
   printf "%s\n" "${server##*@}"
done
$ ./se.sh
SSH connections list:
[email protected]
[email protected]
[email protected]
Users list:
root
validusername
ufo
Servers list:
127.0.0.1
127.0.0.1

Связанный контент