Ein Shellscript-Menü mit Hostadressen aus einer Datei generieren und die Optionen mit einem „Ping-Status“ unter jeder Option anzeigen?

Ein Shellscript-Menü mit Hostadressen aus einer Datei generieren und die Optionen mit einem „Ping-Status“ unter jeder Option anzeigen?

Frage: Ein Shellscript-Menü mit Hostadressen aus einer Datei erstellen und die Optionen mit einem „Ping-Status“ unter jeder Option anzeigen? Haben Sie eine Idee, die helfen könnte?

Dateiname: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

Dateiname:servers_list.txt

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

Antwort1

Erstens können Sie readarrayIhr Array füllen, indem Sie die Datei einmal lesen. So oder so können Sie das Array, sobald es gefüllt ist, einfach wiederverwenden und es bei der Verwendung analysieren, um aus jedem Eintrag das benötigte Bit zu extrahieren:

$ 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

verwandte Informationen