我想在一个 while 循环中检查输入变量的值是一个数字,并且该数字在 1 到 5 之间。
我正在尝试这个,但它不起作用:
#!/bin/bash
# Ejercicio 7
while [[ $( grep -vE "[1-5]" $OPTION ) || $OPTION -lt 1 || $OPTION -gt 5 ]]
do
echo "Escoche la operación:"
echo "1. Sumar"
echo "2. Restar"
echo "3. Multiplicar"
echo "4. Dividir"
echo "5. salir"
read OPTION
done
要验证变量是否为数字,您可以说:
要验证数字在 1 到 5 之间,您会说:
第一次在给它任何数据之前验证“$OPTION”的值。像do_while这样的东西会很好用,你可以这样表达,否定上面的表达式,以便在值无效时继续读取:
首先,据我了解,
bash
您没有“按类型划分的变量”之类的东西-一切都是字符串。我无法证明这一点,但据我所知。我这样说是因为检查变量是否为数字,将取决于某些字符的策略,而不是要求诸如“类型(int、str、varchar、class 等)”之类的东西。现在,我给你的一个选项是使用一种
while-do
(默认情况下它在 中不存在bash
,但可以实现)和一个简单的正则表达式来同时做所有事情(两者都检查它是否是一个数字和知道它是否在 1 和 5 之间),如果是 5 则退出。对正则表达式的澄清。
正则表达式
^[1-5]$
是一种了解字符串是否符合模式的简单方法:以(这表示它从行首开始^
:)列表中的单个元素 [12345](与 [1-5] 是一个范围包括在内),然后终止(这表明它在行尾终止:)$
。即:1 到 5 之间的单个数字。到目前为止,您可以复制并粘贴上面的内容。
有点复杂和不必要的版本,但非常说明性。
使用
select
.while
在这种情况下,我建议使用select
de而不是使用 abash
。