我在执行以下直到循环时遇到问题bash
。只要输入的时间值超出有效范围,我就希望出现 Zenity 弹出框。弹出窗口打开得很好。但是,无论是否输入了有效数据,它都会不断弹出(我必须退出终端才能跳出循环)。
#!/bin/bash
startt=30:20
finisht=12:45
until [[ $startt =~ [0-2][0-9]:[0-5][0-9] ]] && [[ $finisht =~ [0-2][0-9]:[0-5][0-9] ]]; do
var2="$(zenity --forms --title="start_time and/or finish_time are incorrect" --text "Add a start_time and a finish_time" --separator="," \
--add-entry="WARNING! Something went wrong. Please enter a valid start_time: " \
--add-entry="WARNING! Something went wrong. Please enter a valid finish_time: ")"
done
如果有人可以帮助解决这个问题,我们将不胜感激。
我现在知道这里出了什么问题。首先,var2 和输入数据(开始和结束)之间没有联系。所以逻辑上是有问题的。Zenity 部分实际上输入了输入数据,然后将其保存到变量 var2 中。变量 var2 本质上包含两个用逗号分隔的变量 (30:20,12:45)。为了将它们分开,我通过 awk 创建了两个变量 b1 (30:20) 和 b2 (12:45),然后将它们传递给 until 条件。现在这表示 UNTIL b1 和 b2 在指定条件内继续打开 Zenity 输入框:
但是,这并不能回答以下问题。我真正想要的是打开 zenity 弹出框,因此如果 startf 或 finishf 不在有效范围内,我可以重新输入数据,直到将 b1 和 b2 的正确数据输入到 Zenity 框中。所以最终的代码应该是这样的:
变量 var2 现在可用于进一步的验证测试,并包含指定范围内的数据。