1、實時監控cpu、內存的shell腳本
#!/bin/bash# 獲取當前時間
DATE=$(date +"%Y-%m-%d %H:%M:%S")# 獲取CPU使用情況
CPU_USAGE=$(top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}')# 獲取內存使用情況
MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')# 輸出結果
echo "$DATE CPU使用率: $CPU_USAGE% 內存使用率: $MEMORY_USAGE%"
top命令用于實時顯示系統的任務管理器信息。它提供了關于系統中當前運行進程的動態視圖,并允許用戶監控系統的性能。
常用選項:-d 秒數 設置刷新間隔時間,例如 top -d 2 每兩秒刷新一次。-p PID 只顯示指定 PID 的進程,例如 top -p 1234 只顯示 PID 為 1234 的進程。-u 用戶名 只顯示指定用戶的進程,例如 top -u user 只顯示用戶 user 的進程。-b 批處理模式,通常與重定向結合使用,例如 top -b > top_output.txt。-n 次數 設置刷新次數后退出,例如 top -n 10 刷新 10 次后退出。free命令提供了關于物理內存(RAM)、交換空間(swap)以及緩沖區/緩存(buff/cache)的詳細信息。這
常用選項:-b 以字節為單位顯示內存使用情況。-k 以千字節(KB)為單位顯示內存使用情況(這是默認設置)。-m 以兆字節(MB)為單位顯示內存使用情況。-g 以吉字節(GB)為單位顯示內存使用情況。-h 以人類可讀的格式顯示內存使用情況,自動選擇合適的單位(KB、MB、GB)。-s 秒數 每隔指定的秒數重復顯示內存使用情況。-t 顯示總計行,即所有內存和交換空間的總和。-c 次數 重復顯示內存使用情況指定的次數后退出
2、進入腳本所在目錄
# shell腳本
#!/bin/bash# 當前目錄
cur_dir=`pwd`
echo "當前執行腳本的目錄:$cur_dir"# 腳本目錄
script_dir=`dirname $0`
echo "腳本父目錄:$script_dir"# 進入到腳本目錄
script_root_dir=$(cd `dirname $0`;pwd)
echo "腳本的絕對路徑:$script_root_dir"
結果:
[root@local_tmp]#
[root@local_tmp]# ../shell/s-5.sh
當前執行腳本的目錄:/home/test/linux
腳本父目錄:../shell
腳本的絕對路徑:/home/test/shell
[root@local_tmp]#
[root@local_tmp]#
3、操作目錄
#!/bin/bash# 創建目錄
# 指定要創建的文件夾名稱
echo "--------------------------------------------------------"
path="path/parent_folder"
# 使用mkdir命令創建文件夾
mkdir -p "$path/$folder_name"
echo "Folder '$folder_name' created at '$path'."# 刪除目錄
# 指定要刪除的文件夾路徑
echo "--------------------------------------------------------"
folder_path="path/folder_to_delete"
# 檢查文件夾是否存在
if [ -d "$folder_path" ]; then # 使用rm命令刪除文件夾及其內容 rm -rf "$folder_path" echo "Folder '$folder_path' deleted."
else echo "Folder '$folder_path' does not exist."
fi# 移動目錄
# 指定要移動的文件夾路徑和目標路徑
echo "--------------------------------------------------------"
source_folder="path/source_folder"
destination_folder="path/destination"
# 使用mv命令移動文件夾
mv "$source_folder" "$destination_folder"
echo "Folder moved from '$source_folder' to '$destination_folder'."# 復制文件夾
# 指定要復制的文件夾路徑和目標路徑
echo "--------------------------------------------------------"
source_folder="/path/source_folder"
destination_folder="/path/destination"
# 使用cp命令復制文件夾及其內容
cp -r "$source_folder" "$destination_folder"
echo "Folder copied from '$source_folder' to '$destination_folder'."# 遍歷目錄
echo "--------------------------------------------------------"
for file in *; do if [ -d "$file" ]; then echo "$file 是一個目錄" elif [ -f "$file" ]; then echo "$file 是一個文件" fi
done# 遍歷目錄
# 遍歷指定目錄及其子目錄中的所有文件
echo "--------------------------------------------------------"
find path/ -type f | while read -r file; do echo "$file 是一個文件"
done
# 遍歷指定目錄及其子目錄中的所有目錄
find path/ -type d | while read -r dir; do echo "$dir 是一個目錄"
done# 遍歷目錄
process_file() { local file="$1" echo "處理文件: $file" # 在這里添加處理文件的代碼
}
process_directory() { local dir="$1" echo "進入目錄: $dir" # 在這里可以添加處理目錄的代碼,比如遞歸調用本腳本處理子目錄 for item in "$dir"/*; do if [ -d "$item" ]; then process_directory "$item" # 遞歸處理子目錄 elif [ -f "$item" ]; then process_file "$item" # 處理文件 fi done echo "離開目錄: $dir"
}
# 從指定目錄開始遍歷
start_directory="path/"
process_directory "$start_directory"
4、循環操作--數組
#!/bin/bashrm -rf result.txt# 循環打印日志過濾結果
lst=(lst_1 lst_2 lst_3 lst__4)
for st in "${lst[@]}"
doecho $stpython3 process.py $st &> logcat log | grep "abcdefg-HIGKLMN" | awk '{print $31}' >> result.txtecho " " >> result.txt
done
shell中數組介紹:1、聲明數組可以使用圓括號 () 來聲明數組,元素之間用空格分隔:my_array=(element1 element2 element3)也可以單獨指定數組元素:my_array[0]=element1my_array[1]=element2my_array[2]=element32、訪問數組元素使用數組的索引來訪問元素,索引從0開始:# 訪問第一個元素echo ${my_array[0]}# 訪問第二個元素echo ${my_array[1]}使用 @ 或 * 來獲取數組的所有元素:# 獲取數組的所有元素echo ${my_array[@]}# 或者echo ${my_array[*]}使用 ${#array[@]} 或 ${#array[*]} 來獲取數組的長度:# 獲取數組的長度length=${#my_array[@]}echo "數組的長度是: $length"你可以使用 for 循環來遍歷數組的所有元素:# 使用 for 循環遍歷數組for element in "${my_array[@]}"; doecho "$element"done數組切片:# 獲取數組的前兩個元素slice=${my_array[@]:0:2}echo "切片: $slice"修改數組元素:# 修改第一個元素my_array[0]=new_element1# 輸出修改后的數組echo ${my_array[@]}刪除數組元素:# 刪除第二個元素unset my_array[1]# 輸出修改后的數組echo ${my_array[@]}
5、循環操作--讀取文件每行內容
#!/bin/bashcat file.lst | while read line; doecho ${line}
done
6、按指定列的內容過濾文件的行
#!/bin/bashcat all.lst | awk -F ":" '{if($5 == 1 || $5 == 2) print $1}'
7、shell讀取json文件
需要Linux上安裝jq模塊。
#!/bin/bashjson_str=$1# 提取字段值
aaa=$(echo "$json_str" | jq -r '.aaaaa')
if [ $? -ne 0 ]; thenexit 1
fibbb=$(echo "$json_str" | jq -r '.bbbbb')
if [ $? -ne 0 ]; thenexit 1
ficcc=$(echo "$json_str" | jq -r '.ccccc')
if [ $? -ne 0 ]; thenexit 1
fi#
# json文件
# {
# "aaaaa": "----aaaaa",
# "bbbbb": "----bbbbb",
# "ccccc": "----ccccc"
# }
#
8、$?變量
$?變量:這是一個特殊變量,表示上一個命令的退出狀態碼(Exit Status)。退出碼 0 表示成功。非零退出碼(如 1, 2, ...)表示失敗或錯誤。