Unix循环变量

时间:2017-05-03 11:45:03

标签: bash shell unix scripting

我需要你的帮助来确定我的问题,

我的目的是循环输入值,同时检查输入值是否为[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`

1 个答案:

答案 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已经要求解释正则表达式,

RegEx demo

从上述正则表达式页面引用,解释正则表达式^[0-9]{1}$

^在字符串

的开头断言位置

匹配[0-9]{1}

下方列表中的单个字符

{1}量词 - 恰好匹配一次(无意义的量词)

0-9  0 (ASCII 48)9 (ASCII 57)之间的单个字符(区分大小写)

$在字符串末尾断言位置,或者在字符串末尾的行终止符之前断言