我正在制作一个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