gpt4 book ai didi

variables - bash 检查值为整数且在范围内

转载 作者:行者123 更新时间:2023-12-02 03:49:10 24 4
gpt4 key购买 nike

我读了这个 stackoverflow 问题...

Bash: check user input is correct

它完成了我想要的大部分工作,但是与其检查它是否只是一个整数,我需要检查它是否是一个可变范围内的整数....

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

  1. 文件 1
  2. 文件 2
  3. 文件 3等等……

用户选择数量,然后脚本对该文件执行命令......变量 $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"

然而,这会抛出一个语法错误:unexpected "("(expecting "do") in the while line 我不确定为什么,我怀疑 $FILELIST 必须以某种方式括起来,但解释为什么上面works 会帮助我理解这个问题。

谢谢

最佳答案

特定于 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

由于您使用的是 ash,您可以将其用作引用: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"

关于variables - bash 检查值为整数且在范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com