![如何告诉 bash 重复执行脚本直到满意,然后输出成品](https://linux22.com/image/1479275/%E5%A6%82%E4%BD%95%E5%91%8A%E8%AF%89%20bash%20%E9%87%8D%E5%A4%8D%E6%89%A7%E8%A1%8C%E8%84%9A%E6%9C%AC%E7%9B%B4%E5%88%B0%E6%BB%A1%E6%84%8F%EF%BC%8C%E7%84%B6%E5%90%8E%E8%BE%93%E5%87%BA%E6%88%90%E5%93%81.png)
我希望重复此代码,直到我停止它,方法是设置重复的时间、按 ^c 或设置迭代次数,然后输出重复的结果。代码应该输入自身,这样第一次输入变量 5 和 2 将导致以 5 和 2.25 作为变量重新启动脚本。该脚本有助于通过一次猜测确定数字的平方根。
#!/bin/bash
echo -n "Please enter the number you need to find the square root for and press [ENTER]: "
read fin
echo -n "Please enter guess and press [ENTER]: "
read gues
var=$(echo "$fin/$gues" | bc -l )
var1=$(echo "$var+$gues" | bc -l )
var2=$(echo "$var1/2" | bc -l )
echo $var2
答案1
您需要将该代码放入无限循环中,例如:
while 1; do
# Rest of code
...
done
为了在按下Ctrl+时停止C,您实际上要做的是捕获信号(具体来说SIGINT
)。您需要定义一个trap
,以便在按下该组合键时触发它。
有关陷阱的更多信息,你可以看看这里,其中包括一个SIGINT
示例以及如何在捕获任何内容后打印它。
trap [命令] [信号]
这将指示 trap 命令捕获列出的 SIGNALS,这些 SIGNALS 可能是带有或不带有 SIG 前缀的信号名称,也可能是信号编号。如果信号为 0 或 EXIT,则在 shell 退出时执行 COMMANDS。如果其中一个信号为 DEBUG,则在每个简单命令之后执行 COMMANDS 列表。信号也可以指定为 ERR;在这种情况下,每次简单命令以非零状态退出时都会执行 COMMANDS。请注意,当非零退出状态来自 if 语句的一部分或 while 或 Until 循环时,将不会执行这些命令。如果逻辑 AND (&&) 或 OR (||) 导致非零退出代码,或者使用 ! 运算符反转命令的返回状态,则也不会执行这些命令。