在shell腳本,我們如何能夠比較(整數和浮點),(flaoting和浮點),(浮點和整數),(整數和整數)只有一個如果條件。比較浮點數shell腳本
我有一個像
set X=3.1
set Y=4.1
if [ $X < $Y ] then
echo "wassup"
endif
但是從運行的cron作業犯規上面的幾個例子,似乎工作。
在shell腳本,我們如何能夠比較(整數和浮點),(flaoting和浮點),(浮點和整數),(整數和整數)只有一個如果條件。比較浮點數shell腳本
我有一個像
set X=3.1
set Y=4.1
if [ $X < $Y ] then
echo "wassup"
endif
但是從運行的cron作業犯規上面的幾個例子,似乎工作。
進行浮點運算在bash的方式是使用bc,您可在幾乎所有的Linux發行版。
# bc will return 0 for false and 1 for true
if [ $(echo "23.3 > 7.3" | bc) -ne 0 ]
then
echo "wassup"
fi
有一個good article在linux雜誌上提供關於在bash中使用bc的浮點數學。
編輯。根據該意見,這個答案(感謝用戶未知和格倫·傑克曼),似乎使用bc
爲真/假測試時,所需要的bash
測試很簡單:
(($(echo "$X < $Y" |bc)))
...見下文wheras測試結果和腳本,需要對舊風格的bash [ ]
測試比較-ne 0
。
bash
本身不處理浮點數,但你可以稱這種工具爲bc
從man bc
- 一個任意精度的計算語言
X=3.1
Y=4.1
# This test has two superfluous components.
# See EDIT (above) and TESTS below
if (($(echo "scale=9; $X < $Y" |bc)!=0)) ;then
echo "wassup"
fi
TEST結果:
if [ "1" ] true
[ "1" ] true
if [ "0" ] true
[ "0" ] true
if [ 1 ] true
[ 1 ] true
if [ 0 ] true
[ 0 ] true
if (("1")) true
(("1")) true
if (("0")) false
(("0")) false
if (( 1 )) true
(( 1 )) true
if (( 0 )) false
(( 0 )) false
echo "1<1"|bc true
echo "1<0"|bc true
測試腳本:
printf 'if [ "1" ] '; if [ "1" ]; then echo true; else echo false; fi
printf ' [ "1" ] '; [ "1" ] && echo true || echo false
printf 'if [ "0" ] '; if [ "0" ]; then echo true; else echo false; fi
printf ' [ "0" ] '; [ "0" ] && echo true || echo false
echo
printf 'if [ 1 ] '; if [ 1 ]; then echo true; else echo false; fi
printf ' [ 1 ] '; [ 1 ] && echo true || echo false
printf 'if [ 0 ] '; if [ 0 ]; then echo true; else echo false; fi
printf ' [ 0 ] '; [ 0 ] && echo true || echo false
echo
printf 'if (("1")) '; if (("1")); then echo true; else echo false; fi
printf ' (("1")) '; (("1")) && echo true || echo false
printf 'if (("0")) '; if (("0")); then echo true; else echo false; fi
printf ' (("0")) '; (("0")) && echo true || echo false
echo
printf 'if (( 1 )) '; if ((1)); then echo true; else echo false; fi
printf ' (( 1 )) '; ((1)) && echo true || echo false
printf 'if (( 0 )) '; if ((0)); then echo true; else echo false; fi
printf ' (( 0 )) '; ((0)) && echo true || echo false
echo
printf 'echo "1<1"|bc '; echo "1<1"|bc >/dev/null && echo true || echo false
printf 'echo "1<0"|bc '; echo "1<0"|bc >/dev/null && echo true || echo false
'scale'是多餘的,如果你只是想測試true和false。 '!= 0'也是多餘的 - 這就是已經完成的事情。 – 2012-03-30 09:09:22
@用戶未知:謝謝.. – 2012-03-30 09:48:07
'!= 0'是* not *多餘的:bc *打印* 0或1表示錯誤或真實。在這兩種情況下,*退出狀態*都爲零。所以,你必須將命令輸出與某些東西進行比較。 – 2012-03-30 10:26:31
呸本身只處理整數。使用bc:
echo "$X>$Y" | bc
0
echo "$X<$Y" | bc
1
您不需要擔心比例。它僅僅是爲輸出格式的preocision:
X=3.000001
Y=3.0001
echo "$X>$Y" | bc
0
echo "$X<$Y" | bc
1
echo "scale=1;$X<$Y" | bc
1
[擊:整數表達預期]的可能的複製(HTTP://計算器。com/questions/17958855/bash-integer-expression-expected) – tripleee 2016-01-20 13:27:18