读取N个字符或按回车键退出

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

我有以下功能,我希望当我按一次回车键时,运行第一个案例,然后退出。现在我必须按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
}
bash shell exit
1个回答
1
投票

首先,让我来回答你的问题。

按4次回车键退出。

这是因为你使用的是 read -N4这意味着你从输入中读取四个字符。所以你需要四个回车键。我的建议是改成 -a从输入端读取,直到 Enter 解决这个问题。

我只按一两个数字,然后回车,就会立即显示 "数字超出范围 "的信息,而不是每例按两三次之后。

我认为你不应该在函数里面调用 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

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