读取 N 个字符或按回车退出
Read N chars or press enter to exit
我有以下功能,当我按一次回车到 运行 第一种情况然后退出时,我想要。现在我必须按回车键 4 次才能退出。另外,希望当我只按一个或两个数字然后输入时立即显示消息 "Number out of Range" 而不是在每个案例两次或三次之后。
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
}
首先,让我回答你的问题:
press the enter 4 times to exit.
这是因为您使用的是 read -N4
,这意味着您从输入中读取了四个字符。所以你需要四个回车。我的建议是更改为 -a
,从输入读取直到 Enter
解决此问题。
I press only one or two numbers and then enter to show the message "Number out
of Range" immediately and not after two or three times per case.
我认为您不应该在 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; }
# check input len
if [ ${#vn} -ge 5 ] || [ ${#vn} -le 3 ]; then echo '\n need exactly four number'; continue; fi
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
我有以下功能,当我按一次回车到 运行 第一种情况然后退出时,我想要。现在我必须按回车键 4 次才能退出。另外,希望当我只按一个或两个数字然后输入时立即显示消息 "Number out of Range" 而不是在每个案例两次或三次之后。
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
}
首先,让我回答你的问题:
press the enter 4 times to exit.
这是因为您使用的是 read -N4
,这意味着您从输入中读取了四个字符。所以你需要四个回车。我的建议是更改为 -a
,从输入读取直到 Enter
解决此问题。
I press only one or two numbers and then enter to show the message "Number out of Range" immediately and not after two or three times per case.
我认为您不应该在 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; }
# check input len
if [ ${#vn} -ge 5 ] || [ ${#vn} -le 3 ]; then echo '\n need exactly four number'; continue; fi
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