現在有一個需求,輸入一串數,輸入的數個數還不固定,需要得到最小的那個數和對應的下标
如果說傳入的數的個數固定,直接用for循環來得到最值 其實也不難。使用程式設計語言java,c等都可以實作。
使用動态變量可以很友善的初始化多個變量,對傳入的數進行統計和比較。
動态變量的初始化有如下幾種形式:
param_no=$#
#初始化環境變量,如果傳入5個數,則會初始化5個變量。
for i in {1..$param_no}
do
export par${i}_=`eval echo \\${${i}}`
done
min_sum=$par1_
min_par=par1_
for i in {2..$param_no};
j=`expr $i - 1`
tmp_cur_par=par${i}_
#得到動态的環境變量,對動态變量的值和其他變量進行比對。
tmp_cur_sum=`eval echo \\${${tmp_cur_par}}`
if [ $min_sum -le $tmp_cur_sum ]
then
min_sum=$min_sum
min_par=$min_par
else
min_sum=$tmp_cur_sum
min_par=$tmp_cur_par
fi
echo $min_par
簡單測試如下:
>$ ksh min.sh 8 9 2 4 5
2 par3_sum
小數也是可以支援的
>$ ksh min.sh 88 99.5 1.1 10 55
1.1 par3_sum
9個數進行比較
$ ksh min.sh 4 5 6 3 2 9 2 1 2
1 par8_sum
2個數進行比較
$ ksh min.sh 2 5
2 par1_sum