我具有以下功能,我想在按Enter一次以运行第一种情况然后退出。现在,我必须按回车4次才能退出。另外,当我仅按一个或两个数字然后输入以立即显示消息“数字超出范围”时,而不是在每种情况下两次或三次之后,都可以。
function MakeSomething () {
while true; do
echo -en "Input : "
read -N4 vn
echo
case $vn in
"") if [ -z "$vn" ] ; then vn=3000 ; echo ${vn} ; exit ; fi ; break ;;
*) [[ $vn =~ ^[0-9]+$ ]] || { echo -e '\nSorry input a number between 0011 and 2559\n' ; continue; }
if ((vn >= 0011 && vn <= 2559)); then echo ${vn} ; else echo -e '\nNumber out of Range, input a number between 0011 and 2559\n' ; fi ; MakeSomething ;break
esac
done
}
首先,让我回答您的问题:
按Enter键4次以退出。
这是因为您正在使用read -N4
,这意味着您从输入中读取了四个字符。因此,您需要四个Enter键。我的建议是更改为-a
,从输入中读取,直到Enter
修复此问题为止。
我只按一个或两个数字,然后输入以显示消息“数字输出范围”,而不是每次2到3次之后。
我认为您不应该在case
子句中调用该函数,因为您已经在使用while循环。应该让它继续。
这是我的代码://可以运行
#!/bin/sh
function MakeSomething () {
while true; do
echo -en "Input : "
read -a vn
echo
case $vn in
"") if [ -z "$vn" ] ; then vn=3000 ; echo ${vn} ; exit ; fi ; break ;;
*) [[ $vn =~ ^[0-9]+$ ]] || { echo -e '\nSorry input a number between 0011 and 2559\n' ; continue; }
if ((vn >= 0011 && vn <= 2559)); then echo ${vn} ; else echo -e '\nNumber out of Range, input a number between 0011 and 2559\n' ; fi
esac
done
}
MakeSomething