我需要你在下面確定我的問題的幫助,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作爲變量。在這個例子中看不到動態變量的需要。 –
更換動態變量的建議?我還沒有嘗試過數組,但我現在正在閱讀有關它,儘管 –