在 bash 中循环用户输入

Loop for the user input in bash

我正在尝试为用户输入构建循环,直到获得特定输入,例如我想在输入 = 4 时停止循环并打印 siiiiii 但问题是程序卡在了循环中 如何为循环输入设置新值?

#!/bin/bash

value=4

echo Enter the number:
read $input
while [ $input !=  $value ]
do
    echo "The input must be between 1 and 4"
    read input2
    input = $input2
done

echo siiiiiiiiiiiiiiiiiii
#!/bin/bash

value=4

echo Enter the number:
while read input; do
    if [ "$input" = "$value" ]; then break; fi
    echo "The input must be between 1 and 4" >&2
done

echo siiiiiiiiiiiiiiiiiii

你也可以这样写:

while read input && [ "$input" != "$value" ]; do
    echo "The input must be between 1 and 4" >&2
done

您可能更喜欢使用 -eq-ne,因为您正在进行整数比较,因为这会给您额外的错误消息。这些错误消息是否有用是一个设计决策:

while read input && ! [ "$input" -eq "$value" ]; do
    echo "The input must be between 1 and 4" >&2
done

原始代码的 4 个主要问题是:引用变量失败、赋值尝试不正确 input = $input2= 周围不能有 space)、使用不正确read $input 命令中的 $,并且未能使用标准的 while read varname 习语。可能还有其他一些小问题,但这些都跳出来了。