我正在测试以下代码,该代码旨在从用户那里获取输入,并在检查一些条件后将其存储到新变量中。但是,在 shell 终端中运行时,此代码没有给我任何输出或错误。我已通过 授予该文件执行权限sudo chmod +x test.sh
。
#!/bin/bash
counter="0"
iso_val="100"
while [ "$counter" == "3" ]
do
echo -n "Enter ISO [ 100-800 ]: "; read iso
if (( "$iso" < "100" )) || (( "$iso" > "800" )); then
echo "Error!"
elif [ "$iso" == "" ]; then
echo "Error!"
else
iso_val=$iso
break
fi
counter=$[$counter + 1]
done
答案1
您编写的脚本运行时没有错误,并且不会产生输出。
快速说明:您应该暂时添加到脚本set -x
的开头,bash
以便在调试时获得良好的开端。
问题在于这一行:
while [ "$counter" == "3" ]
该行后面的块仅在等于 时do
才会运行,但除非运行该块,否则不会递增。$counter
3
$counter
do
您需要在您希望执行的块之外执行一些操作来增加计数器。 IE
#!/bin/bash
counter="0"
iso_val="100"
while [ "$counter" -lt 3 ]
do
echo -n "Enter ISO [ 100-800 ]: "; read iso
if [ -z "$iso" ] || [ "$iso" -lt 100 ] || [ "$iso" -gt 800 ]; then
echo "Error!"
else
iso_val=$iso
break
fi
counter=$(($counter + 1))
done
我设置了运行次数的限制while
,否则脚本不会因错误而退出。我还尽可能将您的字符串比较更改为整数比较。
编辑:新脚本,其中包含注释中明确的要求,“错误时最多询问三次”