我有以下功能,我希望当我按一次回车键时,运行第一个案例,然后退出。现在我必须按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
}
首先,让我来回答你的问题。
按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