shell學習筆記二則 統計空間

2021-06-21 23:39:22 字數 2115 閱讀 3820

最近測試sd卡,順便學習了一些shell命令,這裡順便記一下。

第一則,為了防止sd卡空間被佔滿,需要對空間進行判斷並清理檔案,下面的指令碼顯示2種方式,乙個是通過百分比,乙個是通過檔案數,個人認為通過百分比比較好一些。關於指令碼的掛載目錄、百分比、刪除檔案個數等引數,根據實際情況修改即可。

#!/bin/sh

#前提:已掛載目錄

mount_dir=/mnt/sd

percent_in=70

file_del=1000

count_del=1000

percent=`df -h | grep $mount_dir | awk '' | tr -d '%'`

dev_file=`df -h | grep $mount_dir | awk ''`

file_count=`ls -l $mount_dir | wc -l`

# 當空間占用百分比大於某個指定值時,刪除目錄前指定的數量

if [ $percent -ge $percent_in ];then

echo "need to remove file! occupy" $percent"%" "of" $dev_file

cd $mount_dir

file=`ls | sort | head -$file_del`

rm $file

cd -

else

echo "no need to remove file"

fi# 當檔案個數達到一定數量時刪除前x個檔案

if [ $file_count -ge $count_del ];then

echo "need to remove file! occupy total" $count_del "files of" $dev_file

cd $mount_dir

file=`ls | sort | head -$file_del`

rm $file

cd -

else

echo "no need to remove file"

fi#file=`ls | sort | head -$file_del`

#echo $file

echo "comand complete at"

date

echo "***********************************==="

第二則,統計命令執行時間(這個功能使用在測試sd卡效能上)。主要涉及到time命令的輸出格式以及popen的使用。

time命令預設輸出是十分友好的,分別顯示了分和秒,但在程式計算時不太「友好」,因而使用-p選項,它直接輸出以秒為單位的時間。popen是公司公認的重型**,一般情況不敢隨意使用。測試**就無所謂了,它主要讀取grep得到的時間。另外也涉及到sscanf對浮點數的格式化問題。

指令碼實現:

echo "time測試"

time -p sleep 2 2>&1 | tee /tmp/time_log

time=`grep real /tmp/time_log | awk ''`

c語言實現:

void ******_test()

; float time_f = 0.0;

float speed = 0.0;

system("time -p sleep 2 2>&1 | tee /tmp/time_log");

file* fp = null;

fp = popen("grep real /tmp/time_log | awk ''", "r");

fread(time_str, sizeof(time_str), 1, fp);

pclose(fp);

time_str[strlen(time_str) - 1] = '\0';

sscanf(time_str, "%f", &time_f);

speed = 10.0 / time_f;

printf("time_str: %s time_f: %.2f speed: %.2f\n", time_str, time_f, speed);

}

李遲記於2023年5月9日

shell學習筆記(二)

alias 別名 別名的設定格式alias variable 命令 取消別名使用unalias variable。source 通過source bashrc或.bashrc將環境變數配置檔案寫入到shell環境中。萬用字元符號作用 代表0至無限個任意字元 代表至少有乙個任意字元 代表至少有乙個 裡...

shell學習筆記(二)

字串表示 字串可以由單引號 包圍,也可以由雙引號 包圍,也可以不用引號。str1 c.biancheng.net str2 shell script str3 c語言中文網 單引號和雙引號前面已經解釋過了。不用引號的話字串之間不能有空格。字串拼接 直接將兩個字串放在一起就好了,簡單粗暴。bin ba...

學習shell程式設計筆記 二

變數 含義 0 當前指令碼的檔名 n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是 1,第二個引數是 2。傳遞給指令碼或函式的引數個數。傳遞給指令碼或函式的所有引數。傳遞給指令碼或函式的所有引數。被雙引號 包含時,與 稍有不同,下面將會講到。上個命令的退出狀態,或函式的...