bash检查值是整数且在范围内

时间:2013-02-26 01:25:52

标签: variables integer busybox

我读了这个stackoverflow问题......

Bash: check user input is correct

执行我想要的大部分内容,而不是检查它只是一个整数我需要检查它是一个可变范围内的整数....

脚本在目录中查找文件,然后为它们分配一个数字......

  1. 档案1
  2. 文件2
  3. 文件3 等....
  4. 用户选择数字,然后脚本对该文件执行命令.....变量$ FILELIST是文件总数。

    以前一次stackoverflow为例我尝试了.....

    FILENUM=""
    while [[ ! ($FILENUM =~ ^[0-$FILELIST]+$) ]]; do
        echo " "
        echo "Please enter the file number: "
        read -p "1 - $FILELIST" FILENUM < /dev/tty
    done
    
    echo "$FILENUM"
    

    然而,这会引发一个语法错误:在while行中出现意外的“(”(期待“do”)并且我不确定为什么,我怀疑$ FILELIST必须以某种方式加入方括号但是为什么以上解释为什么工作会帮助我理解这个问题。

    由于

1 个答案:

答案 0 :(得分:1)

特定于bash的答案:

您无需重新发明轮子:使用select内置:

cd /path/to/directory
PS3="Select a file: "
select file in *; do
    if [[ $file ]]; then break; fi
done
echo "You selected '$file'"
echo "You selected file number $REPLY"

要检查某个数字是否在一定范围内,我会写:

if (( 0 <= $number && $number <= $max )); then echo "in range"; fi

由于你使用的是灰烬,你可以将它作为参考:http://manpages.debian.net/cgi-bin/man.cgi?query=dash

while true; do
    FILENUM=""
    echo 
    echo "Please enter the file number: "
    read -p "1 - $FILELIST" FILENUM < /dev/tty
    if expr "$FILENUM" : '[0-9]\+$' &&
       [ $FILENUM -gt 0 ] && 
       [ $FILENUM -le $FILELIST ]
    then
        break
    fi
done
echo "$FILENUM"