[英]Select IP in shell script
我正在编写 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
但是我遇到了“无效选项”。 我怎样才能从我的列表中正确地 select 和 IP 并在我的脚本中进一步使用它作为变量?
您需要匹配数字。 就像是
#!/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
我怎样才能从我的列表中正确地 select 和 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添加到 select 选项中,但未添加到阵列中,因此我将清理以供进一步使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.