取得設備運行時間

#!/bin/bash
#取得設備運行時間
Time=$(cat /pro/uptime | cut -d '.' -f 1)
RunDay=$(($Time/86400))
RunHour=$(($Time%86400/3600))
RunMinute=$(($Time%3600/60))
RunSecond=$(($Time%60))
RunTime=$(printf "%02d:%02d:%02d:%02d" $RunDay $RunHour $RunMinute $RunSecond)
echo $RunTime

涉及到的知識點:

/proc/uptime詳解

在Linux中,我們常常會使用到uptime命令去看看系統的運行時間,它與一個文件有關,就是/proc/uptime,下面對其進行詳細介紹。 

1
2
3
4
master@jay-intel:~$ cat /proc/uptime
6447032.12 48185264.69
master@jay-intel:~$ cat /proc/cpuinfo  | grep processor | wc -l
8

第一列輸出的是,系統啓動到現在的時間(以秒爲單位),這裏簡記爲num1;
第二列輸出的是,系統空閒的時間(以秒爲單位),這裏簡記爲num2。

注意,很多很多人都知道第二個是系統空閒的時間,但是可能你不知道是,在SMP系統裏,系統空閒的時間有時會是系統運行時間的幾倍,這是怎麼回事呢?
因爲系統空閒時間的計算,是把SMP算進去的,就是所你有幾個邏輯的CPU(包括超線程)。

系統的空閒率(%) = num2/(num1*N) 其中N是SMP系統中的CPU個數。

從上面我的一臺機器上的數據可知,
本機啓動到現在的時間長度爲:6447032.12 seconds = 74.6 days
空閒率爲:48185264.69/(6447032.12*8)=93.4%

系統空閒率越大,說明系統比較閒,可以加重一些負載;而系統空閒率很小,則可能考慮升級本機器硬件或者遷移部分負載到其他機器上。

Some docs from Redhat:
The first number is the total number of seconds the system has been up. The second number is how much of that time the machine has spent idle, in seconds. (Jay’s comments: Please pay attention to SMP system.)

Linux變量數字運算符

Abstract : 

1)  Linux shell 中使用 let , [ ] ,(( )) 三種運算符操作 shell 變量進行簡單的基本運算;
2)Linux shell 中使用 expr 與 bc 兩個程序實現高級運算;


1, Linux shell 變量的基本運算


數值作爲常規變量直接賦值給變量,並且以字符串形式保存。

1.1 let 命令可以用於直接執行基本操作:
        
當我使用 let 的時候,我們不使用 $ 符號引用變量。

no1=7;
no2=8; 
echo "------------ let command -------------"
let no1++;
let no2--;
let no1+=3;
let no2-=5;
let result=no1+no2;
printf "let result=%d\n" $result; 

1.2 " [ ] "運算符跟 let 命令很相似:
"[ ]" 運算符裏面可以使用 $ 符號引用變量,同時支持變量名與運算符之間不帶空格。

echo "----------------- [] operator ----------------"
 
printf "no1:%d no2:%d \n" $no1 $no2;

result1=$[ no1 + no2 ];

printf "result1 = %d \n" $result1;

result2=$[no1+no2 + 7];

printf "result2 = %d \n" $result2;

result3=$[ $no1+$no2+5 ];

printf "result3 = %d \n" $result3;

no2=$[ no2 + 1 ];

printf "no1 = %d no2 = %d \n" $no1 $no2; 

1.3 " (( )) " 運算符跟 " [ ] " 運算符一樣:
同樣支持使用 $ 符號引用變量進行基本運算,同時支持變量名與運算符之間不帶空格

echo "----------------- (( )) operator --------------"
 
printf "no1: %d no2: %d \n" $no1 $no2;

result1=$(( no1 + no2 ));

printf "result1 = %d \n" $result1;

result2=$((no1+no2+3));

printf "result2 = %d \n" $result2;

result3=$(( $no1+$no2 + 5))

printf "result3 = %d \n" $result3; 

1.4 "expr" 命令同樣可以用於變量的基本運算:
"expr" 命令同樣支持 $ 符號引用變量進行基本運算,但是變量與運算符之間必須使用空格作爲分隔符;
在使用 "expr" 命令對變量進行運算後,整個表達式必須使用 " ·expression · " 的模式賦值給變量,即包含在 " ` " 符裏面,
並且等效於 " $( expression )" 模式。

上面所述的四種shell中執行變量運算的方式中不支持浮點運算!


2, Linux shell 中使用 bc 命令實現高級數學運算:
bc 命令使用 標準輸入 stdin 作爲輸入;
bc 是一個支持精確的浮點運算的高級計算器;
bc 擁有相當多的輸入選項,並且支持數學函數調用;
執行 bc --help 自行查看 bc 所支持的輸入選項;

2.1 bc 命令使用標準輸入 stdin 作爲輸入,並且支持浮點運算:

2.2 bc 命令支持運算精度設置:

通過附加參數可以給 bc 指定運算精度;
附加參數使用分號 " ; " 作爲分隔符;

實驗結果所示,使用分號 " ; " 加入附加參數 scale ,指定精度爲 9 位小數; 

2.3 使用 bc 進行數值的記數進制間轉換:
通過 ibase=value 作爲附加參數,指定輸入變量的記數進制;
通過 obase=value 作爲附加參數,指定輸出變量的記數進制;


2.4 使用 bc 調用數學公式進行高級數學運算:
" sqrt(value) " 執行 value 的開方運算;
" value^index " 執行 value 的冪運算;

參考文檔:

http://www.cnblogs.com/frydsh/p/3887357.html
http://blog.chinaunix.net/uid-20671208-id-3552751.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章