Выберите IP в сценарии оболочки - PullRequest
0 голосов
/ 08 мая 2020

Я пишу сценарий оболочки для развертывания моего главного узла. Чтобы настроить узел, я хотел бы получить выбор доступных IP-адресов, которые мастер должен позже прослушивать:

PS3='Please select a network the master should listen onto: '
ips=($(hostname -I))
select ip in "${ips[@]}"
do
    case $ip in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Quit")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

Но я столкнулся с «недопустимой опцией». Как правильно выбрать IP-адрес из моего списка и использовать его в дальнейшем как переменную в моем скрипте?

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Необходимо сопоставить цифры. что-то вроде

#!/usr/bin/env bash

PS3='Please select a network the master should listen onto: '
ips=($(hostname -I))
ips=("${ips[@]}" 'Quit')
select ip in "${ips[@]}"; do
  case $ip in
    *[0-9]*)
      echo "you chose choice $REPLY with the value of $ip"
      break
      ;;
    Quit) echo quit
      break;;
    *) echo Invalid option >&2;;
  esac
done
1 голос
/ 08 мая 2020

Как мне правильно выбрать IP-адрес из моего списка и использовать его в дальнейшем как переменную в моем скрипте?

Это общее c решение : будет работать независимо от содержимого массива.

select ip in "${ips[@]}" "Quit"; do
  if [[ $ip = "Quit" ]]; then
    echo "Exiting ..."
    exit
  elif (( REPLY > ${#ips[@]} + 1 )); then
    echo "invalid option $REPLY"
  else
    break
  fi
done

echo "IP: $ip OPTION: $REPLY"

Объяснение

Выбранная опция не должна быть больше, чем количество элементов в массиве IP-адресов плюс добавленный выход option.

ПРИМЕЧАНИЕ : Мы добавляем Quit для выбора параметров, но не в массив, поэтому я буду clean для дальнейшего использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...