例如,我想解析端口45:68
。我定义了测试变量。
echo "ports"
read in
我将端口拆分为数组:
IFS=":" read -ra port <<< "$in"
端口必须小于 65535,仅包含数字并且必须填写。所以我根据提到的条件设置了 while 循环。
while [ -z "${port[@]}" ] || [[ "${port[0]}" =~ ^-?[0-9]+$ ]] || [[ "${port[1]}" =~ ^-?[0-9]+$ ]] ||[ "${port[@]}" -gt 65535 ]
do
port=$(whiptail --title "No!" --inputbox --nocancel "Error MSG." 12 50 3>&1 1>&2 2>&3)
done
执行脚本后,我陷入了循环。
有没有更好的方法来成功解析端口?
答案1
按照@roamia的建议使用for
循环并使用以下命令验证每个元素if
for current_port in "${port[@]}"; do
if ! [[ -n $current_port && $current_port =~ ^-?[0-9]+$ && $current_port -le 65535 ]]; then
port=$(whiptail --title "No!" --inputbox --nocancel "Error MSG." 12 50 3>&1 1>&2 2>&3)
fi
done
PS 为什么你要-
在端口号中寻找破折号?