read primeranota
if test $primeranota ={1..10} \
-o $primeranota!={A..Z} \
-o $primeranota !={a..z} ; then
echo "Nota introducida con exito."
pausa
else
until "$primeranota" -ge 0 -a "$primeranota" -le 10; do
echo -n "Escribe una nota del [0-10]: "
read primeranota
done
我还想将输入限制为只是数字,但我不知道如何限制它。
我已经坚持了好几天......提前谢谢。
答案 0 :(得分:1)
您可以使用模式:
#!/bin/bash
unset input
shopt -s extglob # For bash < 4.1.
until [[ $input == @(0|[1-9]*([0-9])) && $input -le 10 ]]; do
read -r input
done
@
表示必须存在其中一个替代方案,即0或正数[1-9]
开头,后跟任意数字(或无)*([0-9])
。答案 1 :(得分:1)
POSIX shell,(没有 bash isms)。如果数字的 size 无关紧要(即数字小于19位左右),请使用“ -eq ”测试运算符,如果字符串不是整数。这是一个“ readbetween ”脚本,可以使用:
#!/bin/sh
# Usage: readbetween n1 n2
# inputs one line from standard input between (and including) n1 and n2
unset s n
IsNumber() # usage: IsNumber string
{ # returns: flag
[ $1 -eq $1 ] 2> /dev/null
}
read -p "Number between $1 and $2? " n
if IsNumber "$n" ; then
if [ $n -gt $2 ] ; then
s=big
elif [ $n -lt $1 ] ; then
s=small
else
echo $n
exit 0
fi
else
s=stringy
fi
echo "too $s: $n" > /dev/stderr
exit 1
测试运行,调用:
直到x = ./readbetween 0 10
;做:;完成echo $ x
...并假设用户犯了错误:
0到10之间的数字? 33个
太大了:33
0到10之间的数字? ABC
太古怪了:abc
0到10之间的数字? 5.5
过于拉丝:5.5
0到10之间的数字? -1
太小了:-1
0到10之间的数字? 4
4
答案 2 :(得分:0)
您可以在bash中使用[[ ... ]]
:
read -r input
if [[ "$input" =~ ^[a-zA-Z0-9]+$ ]]; then
echo '$input contains 0-9, a-z and A-Z only'
fi
这样可以使0-9
,a-z
和A-Z
多出一次。
答案 3 :(得分:0)
仅允许$primeranota
的数字:
read primeranota
[[ $mavar =~ [0-9]*[0-9] ]] && echo numbers
允许1到10范围内的数字:
shopt -s extglob # you may have to set extglob to 'on'
until [[ $primeranota == @(0|[1-9]|10) ]]; do
echo -n "Escribe una nota del [0-10]:"
read primeranota
done