我的bash脚本如何重复一个提示,直到获得有效的值



我正在制作一个bash程序,该程序让用户可以在1到10之间编写一个数字,然后继续创建用户键入的相同数量的目录。如果用户没有在1或10之间写一个数字而不是让它接近,我是否可以让我的程序不断提出问题?另外,有什么方法可以验证输入,以便如果用户写信而不是数字,则程序不会崩溃?任何帮助或技巧将不胜感激。

#!/bin/bash
read -p "How many directories would you like?" num_folder
if test $num_folder -lt 10
then
    for ((i=0; i<num_folder; i++)); do
      mkdir folder$i        
    done

    read -rsp "Press enter to continue"
    clear
else
    echo "Please write a number between 1 and 10"      
fi

您可以将read指令包装在循环中:

is_integer() {
    [[ "$1" =~ ^[[:digit:]]+$ ]]
}
while ! is_integer "$num_folder";do
    read -p "How many directories would you like?" num_folder
done
...

函数is_integer检查传递的值是否是有效的整数。

只是为了在 @Nautical的答案上展开一点 - 此版本确保输入的数字在1到10之间,并且将采用命令行参数。
如果参数是可以接受的(数字,从一到十)不提示。

#!/bin/bash
is_integer() {
    [[ "$1" =~ ^[[:digit:]]+$ && $1 -gt 0 && $1 -le 10 ]]
}
num_folder=${1}
while ! is_integer "$num_folder";do
    read -p 'How many directories would you like [1-10]? ' num_folder
done
echo "num_folder is $num_folder"
# continue with your actual code to make the directories

相关内容

最新更新