2017-05-04 43 views
0

我越來越平均負載在bash shell腳本,像這樣在bash shell腳本轉換字符串浮點數不BC

load=`echo $(cat /proc/loadavg | awk '{print $1}')` 

我知道管道公元前

load=`echo $(cat /proc/loadavg | awk '{print $1}') \> 3 | bc -l` 

在使用幾乎所有的例子都是如何將$ load作爲一個int轉換的,但是這個框沒有安裝bc,我不允許添加它。

我試圖

int=`perl -E "say $load - 0"` 

我試圖

int=${load%.*} 

我試圖

int=`printf -v int %.0f "$load"` 

我希望能夠做的是

if [ "$int" -gt 3.5 ]; then 

我如何獲得該評估的預期?

+0

awk打印浮點?你的意思是你想要它作爲一個整數? – 123

+1

如果你只是想測試它是否大於3.5,你只需要awk。 '如果awk'$ 1 <3.5 {exit 1}'/ proc/loadavg;然後做東西; fi' – 123

回答

3

您可以使用awk來產生取決於條件的成功/失敗:

# exit 0 (success) when load average greater than 3.5, so take the branch 
if awk '{ exit !($1 > 3.5) }' /proc/loadavg; then 
    # load average was greater than 3.5 
fi 

不幸的是,因爲「成功」的外殼是0,你要反轉,使AWK條件的邏輯以所需的狀態退出。顯然,您可以通過多種方式來完成此操作,例如將>更改爲<=

3

你不需要任何外部工具(如awk)來閱讀這些東西。從/proc/loadavg負載平均值始終格式化有兩位小數,所以你可以這樣做:

read load _ < /proc/loadavg 

if [ ${load/./} -gt 350 ]; then 
    # do something 
fi 
+0

爲什麼使用'_'? – ULick

+1

@ULick - 'read'命令使用分詞將事物分解爲變量,如果變量少於單詞,則將該行的其餘部分放入最後一個變量中。 'read load _'讀取第一個單詞,並將該行的其餘部分放入throw-away變量'$ _'中。 – ghoti

+1

@ 123 - 我們是否在尋找平均3.50或35.00的平均負荷?我帶着問題中的數字去了。 – ghoti