我正在编写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='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"
break
;;
Quit) echo quit
break;;
*) echo Invalid option >&2;;
esac
done
我如何从列表中正确选择IP并将其进一步用作我的脚本变量?
尝试一下:
select ip in "${ips[@]}"; do
if (( REPLY > ${#ips[@]} )); then
echo "invalid option $REPLY"
else
break
fi
done
echo "IP: $ip OPTION: $REPLY"
说明
所选选项不得大于IP数组中的元素数。