我需要你在下面确定我的问题的帮助,Unix的循环变量
我的目的是循环值的输入,而在同一时间检查输入值,如果其[0-9],然后将其保存到一个文件然后对它的输出进行排序。
我的问题是,每当我运行脚本,值保留为1 2 3 4 5不是我输入的那个,你能帮助我吗?我认为在条件语句中的变量声明中存在问题,但我不知道任何解决方法。
#!/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`
这里是每当我运行脚本时的扩展版本。
+ echo
+ validnum=0-9
+ ((i=1))
+ ((i<=5))
+ read -p 'Please enter number 1: ' num_1
Please enter number 1:
+ [[ ! 1 =~ [^0-9$] ]]
+ [[ ! 1 == '' ]]
+ echo 'Input numbers have been validated..'
Input numbers have been validated..
+ echo 1
+ ((i++))
+ ((i<=5))
+ read -p 'Please enter number 2: ' num_2
Please enter number 2:
+ [[ ! 2 =~ [^0-9$] ]]
+ [[ ! 2 == '' ]]
+ echo 'Input numbers have been validated..'
Input numbers have been validated..
+ echo 2
+ ((i++))
+ ((i<=5))
+ read -p 'Please enter number 3: ' num_3
Please enter number 3:
+ [[ ! 3 =~ [^0-9$] ]]
+ [[ ! 3 == '' ]]
+ echo 'Input numbers have been validated..'
Input numbers have been validated..
+ echo 3
+ ((i++))
+ ((i<=5))
+ read -p 'Please enter number 4: ' num_4
Please enter number 4:
+ [[ ! 4 =~ [^0-9$] ]]
+ [[ ! 4 == '' ]]
+ echo 'Input numbers have been validated..'
Input numbers have been validated..
+ echo 4
+ ((i++))
+ ((i<=5))
+ read -p 'Please enter number 5: ' num_5
Please enter number 5:
+ [[ ! 5 =~ [^0-9$] ]]
+ [[ ! 5 == '' ]]
+ echo 'Input numbers have been validated..'
Input numbers have been validated..
+ echo 5
+ ((i++))
+ ((i<=5))
+ echo 'Sorting values..'
Sorting values..
+ echo 'Below are the sorted values'
Below are the sorted values
++ cat save.txt
++ sort -n
+ echo 1 2 3 4 5
1 2 3 4 5
您无法像使用'num_ $ i'那样定义动态变量。可能最好使用数组 – fedorqui
或者根本不使用动态变量。只需使用num作为变量。在这个例子中看不到动态变量的需要。 –
更换动态变量的建议?我还没有尝试过数组,但我现在正在阅读有关它,尽管 –