我需要你的帮助来确定我的问题,
我的目的是循环输入值,同时检查输入值是否为[0-9]然后将其保存到文件中,然后对其输出进行排序。
我的问题是,每当我运行脚本时,值保留为1 2 3 4 5而不是我输入的值,你能帮助我吗?我认为在条件语句中我的变量声明存在问题,但我不知道它的任何解决方法。
next_action_date = models.DateField(blank=True, null=True)
每当我运行脚本时,这是扩展版本。
#!/bin/bash -x
echo > save.txt
validnum='0-9'
for ((i=1;i<=5;i++))
do
read -p "Please enter number $i: " num_$i
if [[ ! $num_$i =~ [^$validnum$] ]] && [[ $num_$i == "" ]]
then
echo "Input numbers have been validated.."
echo $num_$i >> save.txt
else
echo "INVALID CHARACTERS IDENTIFIED.."
echo "Please review your Input Values"
exit 0
fi
done
echo "Sorting values.."
echo "Below are the sorted values"
echo `cat save.txt | sort -n`
答案 0 :(得分:2)
我认为你只需要以下内容,
validnum='[0-9]'
read -p "Please enter number $i: " num
if [[ $num =~ ^$validnum{1}$ ]]; then
# rest of the code
匹配来自0-9
的单个数字。请记住,我已将变量validnum
中的括号表达式移动到原始版本的可读。将此代码段插入代码中可以解决您的问题。
正如评论中所讨论的那样,您不需要使用动态变量来满足您的这一要求。
OP已经要求解释正则表达式,从上述正则表达式页面引用,解释正则表达式^[0-9]{1}$
^
在字符串
匹配[0-9]{1}
{1}
量词 - 恰好匹配一次(无意义的量词)
0-9
0 (ASCII 48)
和9 (ASCII 57)
之间的单个字符(区分大小写)
$
在字符串末尾断言位置,或者在字符串末尾的行终止符之前断言