2016-01-13 91 views
1

我想比較存儲在shell腳本中的變量中的兩個數字。目的是要查找傳入值是否在指定範圍內:500-600700-800在bash中比較整數和小數

我當前的代碼看起來像:

inc=0 
srange[0]=500 
erange[0]=600 
srange[1]=700 
erange[1]=800 

for i in "${startrange[@]}"; do 
    if [[ " ${startrange[$inc]} " -lt " $actual " ]]; then 
     echo " in range " 
    fi 
    inc = $((inc+1)) 
done 

代碼工作與整數值,如530540但無法與像530.2540.3,導致在此行代碼的語法錯誤十進制值:

if ((" ${startrange[$inc]} " -lt " $actual ")); then 

我該如何解決這個問題來處理小數值?

+1

你在用什麼外殼? – Jubobs

+0

你的問題意味着你正在使用一個帶有數組和'(('''''我猜''bash'')的shell,請指出你正在使用哪個shell並更新這個問題的標籤 – kojiro

+1

使用bc或者awk,搜索功能 – 123

回答

1

shell只能做整數計算。如果要比較非整數值,則必須使用可以理解小數運算的工具。 bc就是這樣一個選項:

if bc <<< "${startrange[inc]} < $actual"; then … 
+0

不會接受小數點,就像OP的不會 – 123

+1

我認爲這是他們試圖停止語法錯誤,因爲如果在他們的實際代碼中會和你的答案一樣工作 – 123

+0

另外我不能檢查(())' – 123

1

好像你是說,你的代碼適用於整數而不是小數。

在這種情況下,您可以簡單地將所有數字轉換爲整數,然後再進行比較以避免該錯誤。

這是把小數到整數在bash一種方式:

DECIMAL=3.14 
INTEGER=${DECIMAL%.*} 

請注意,如果您使用此代碼試圖把一個整數轉換成整數,將返回相同的號碼,以便您可以應用此不管它是否是小數,都可以得到任何數字。