我有一个比萨饼制造商代码。它让用户选择一个比萨饼的大小和一个列表的浇头从一个副文件。我试图验证用户的输入,以便它可以输入一个数字之间的 * 1 * 和 * 金额的浇头 * 从副文件。
我从文件中获取行数,并使用wc numtop=$( cat Toppings | wc -l );
将其设置为变量
之后,我读取用户输入并使用if运行检查
read topp
if [[ "$topp" < 1 || "$topp" > "$numtop" ]]; then
echo "Enter from 1 to " $numtop
else
echo "Good choice"
fi
但它只允许我输入1或$numtop变量中的数字。我不明白为什么这行不通。
1条答案
按热度按时间6yoyoihd1#
你需要使用
(( ))
for arithmetic表达式,类似于:编辑:按照
@jhnc
,给定输入是这样的:a[$(date>/dev/tty)],1
(第一个答案严重中断)首先检查输入的值是否是严格的数字。[[ ... ]]
中使用的<
和>
不适用于bash中的arithmetic expression,参见help test
。它用于测试字符串lexicographical[[ expression ]]
,其中指出:When used with [[, the ‘<’ and ‘>’ operators sort lexicographically using the current locale.
numtop=$( cat Toppings | wc -l );
是UUOC的一种形式