Bash读取N个字符,如果按Enter键退出,则退出

问题描述 投票:0回答:1

我具有以下功能,我想在按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
}
sh exit
1个回答
0
投票

首先,让我回答您的问题:

按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

© www.soinside.com 2019 - 2024. All rights reserved.