Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在shell脚本中选择IP_Bash_Shell_Switch Statement - Fatal编程技术网

Bash 在shell脚本中选择IP

Bash 在shell脚本中选择IP,bash,shell,switch-statement,Bash,Shell,Switch Statement,我正在写一个shell脚本来部署我的主节点。 要设置节点,我想选择可用的 主机稍后应侦听的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" ;;

我正在写一个shell脚本来部署我的主节点。 要设置节点,我想选择可用的 主机稍后应侦听的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并在脚本中将其进一步用作变量?

您需要匹配数字。差不多

!/usr/bin/env bash PS3='请选择主机应监听的网络:' ips=$hostname-I ips=${ips[@]}“退出” 在${ips[@]}中选择ip;做 案件$ip in *[0-9]* echo您选择的选项$REPLY的值为$ip 打破 ;; 退出回声退出 打破 *回送无效选项>&2;; 以撒 完成
你需要匹配数字。差不多

!/usr/bin/env bash PS3='请选择主机应监听的网络:' ips=$hostname-I ips=${ips[@]}“退出” 在${ips[@]}中选择ip;做 案件$ip in *[0-9]* echo您选择的选项$REPLY的值为$ip 打破 ;; 退出回声退出 打破 *回送无效选项>&2;; 以撒 完成 如何从列表中正确选择IP并进一步使用 变量在我的脚本中

这是一个通用解决方案:将独立于数组内容工作

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"
解释

所选选项不得大于IPs阵列中的元素数加上添加的退出选项

注意:我们正在添加Quit以选择选项,但不将其添加到数组中,因此我将清除以供进一步使用

如何从列表中正确选择IP并进一步使用 变量在我的脚本中

这是一个通用解决方案:将独立于数组内容工作

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"
解释

所选选项不得大于IPs阵列中的元素数加上添加的退出选项

注意:我们正在添加Quit以选择选项,但不将其添加到数组中,因此我将清除以供进一步使用