shell腳本--2

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, ...)表示失敗或錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904593.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904593.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

性能比拼: HTTP/2 vs. HTTP/3

本內容是對知名性能評測博主 Anton Putra HTTP/2 vs. HTTP/3 performance benchmark 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 在本內容中,我們將比較 HTTP/2 和 HTTP/3 協議。 我們將使用 Terraform 和 Ansible 在 Google Cloud Platform (GCP) …

【Vue】組件自定義事件 TodoList 自定義事件數據傳輸

目錄 一、綁定 二、解綁 組件自定義事件總結 TodoList案例對數據傳輸事件的修改 總結不易~ 本章節對我有很大收獲, 希望對你也是!!! 本章節素材已上傳Gitee:yihaohhh/我愛Vue - Gitee.com 前面我們學習的clikc、…

Windows遠程連接MySQL報錯,本地navicat能連接MySQL

一、報錯 telnet 119.87.111.79 3306??“無法打開到主機的連接。在端口 3306: 連接失敗”?? 表明無法通過 TCP 協議連接到目標服務器的 3306 端口。 二、目的 (1)??Telnet 測試的目的?? Telnet 僅用于測試 ??TCP 端口是否開放??&#xff…

電池管理系統BMS三級架構——BMU、BCU和BAU詳解

儲能電站的電池管理系統(BMS)通常采用三級架構:從控(BMU)、主控(BCU)、總控(BAU)。這種分層設計實現了電池模組、簇、堆的分級管理和控制,確保系統運行的安全…

C++ 基礎復習

基礎復習 1.const引用為什么能引用臨時對象2.內聯函數的額外作用3. nullptr 1.const引用為什么能引用臨時對象 臨時對象(Temporary Object)是在表達式求值過程中隱式創建的對象,例如: 函數返回非引用類型的值 類型轉換&#xff0…

AI的出現,是否能替代IT從業者?

闡述觀點:AI 的出現不會完全替代 IT 從業者,但會深刻改變 IT 行業的工作方式和崗位結構。 AI 不會完全替代 IT 從業者的原因 AI 本身需要人來開發與維護 AI 模型、系統架構、數據管道等都需要 IT 專業人員來構建和優化。 例如:AI 工程師、M…

【服務器通信-socket】——int socket(int domain, int type, int protocol);

#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); domain: AF_INET 這是大多數用來產生socket的協議&#xff0c;使用TCP或UDP來傳輸&#xff0c;用IPv4的地址 AF_INET6 與上面類似&#xff0c;不過是來用IPv6的地…

Python基本環境搭配

Python3 環境搭建 | 菜鳥教程 里面有直接跳轉 Fitten Code 按下 Tab 鍵接受所有補全建議&#xff1a; 按下 Ctrl→ 鍵(mac系統為Command→)接收單個詞補全建議&#xff1a; 用戶可通過點擊左上角工具欄中的Fitten Code – 開始對話或者使用快捷鍵CtrlAltC(mac系統為Contr…

C++負載均衡遠程調用學習之HOOK注冊機制

目錄 1.larV0.7-hook流程的說明 2.larV0.7-TCP_server集成鏈接HOOK函數 3.larV0.7-TCP_client集成鏈接HOOK注冊功能 1.larV0.7-hook流程的說明 ### 7.1 數據庫表相關查詢方法實現 ? 我們先實現一些基本的數據表達查詢方法&#xff1a; > lars_dns/src/dns_rout…

Rust 與 Golang 深度對決:從語法到應用場景的全方位解析

一、引言 在軟件開發的快速發展浪潮中&#xff0c;Rust 和 Golang&#xff08;Go 語言&#xff09;脫穎而出&#xff0c;成為開發者熱議的編程語言。Rust 憑借強大的內存安全性與卓越的性能備受贊譽&#xff0c;Golang 則以簡潔的語法和出色的并發處理能力贏得開發者青睞。本文…

C++負載均衡遠程調用學習之訂閱功能與發布功能

目錄 1.lars-DnsV0.1回顧 2.Lars-DnsV0.2-訂閱功能的訂閱模塊分析 3.Lars-DnsV0.2-訂閱模塊的類的單例創建及方法屬性初始化 4.Lars-DnsV0.2-發布功能的實現 5.Lars-DnsV0.2-發布功能的總結 6.Lars-DnsV0.2-訂閱流程復習 7.Lars-DnsV0.2-訂閱模塊的集成 8.Lars-DnsV0.2訂…

SurfSense開源程序是NotebookLM / Perplexity / Glean的開源替代品,連接到外部來源,如搜索引擎

?一、軟件介紹 文末提供程序和源碼下載 雖然 NotebookLM 和 Perplexity 等工具令人印象深刻&#xff0c;并且對于對任何主題/查詢進行研究都非常有效&#xff0c;但 SurfSense 通過與你的個人知識庫集成來提升這種能力。它是一個高度可定制的 AI 研究代理&#xff0c;連接到外…

基于OpenTelemetry的分布式鏈路追蹤Trace?實現(PHP篇)

目錄 引言一、OpenTelemetry是一套可觀測性標準協議二、分布式追蹤&#xff08;?Trace?&#xff09;是OpenTelemetry的核心功能之一三、OpenTelemetry的架構原理四、OpenTelemetry的分布式追蹤&#xff08;?Trace?&#xff09;實踐1、準備PHP環境2、下載SDK3、編寫實例代碼…

探索智能體的記憶:類型、策略和應用

AI Agent 中的記憶&#xff1a;類型、策略和應用 記憶實現是使智能體能夠保持上下文、從過去的交互中學習并做出明智決策的關鍵組成部分。與人類記憶非常相似&#xff0c;智能體記憶允許 AI 系統隨時間存儲、檢索和利用信息&#xff0c;從而為用戶創造更連貫和個性化的體驗。 …

leetcode 2395. Find Subarrays With Equal Sum

題目描述 代碼&#xff1a; class Solution { public:bool findSubarrays(vector<int>& nums) {int len nums.size();if(len <2)return false;unordered_set<int> table;int sum 0;for(int i 1;i < len;i){sum nums[i-1]nums[i];if(table.contains(…

Kubernetes(k8s)學習筆記(七)--KubeSphere 最小化安裝

前情提要 可視化操作面板對于開發、運維絕對是提升工作效率的一大利器&#xff0c;因此很有必要搭建一套可視化操作來管理Kubernetes。 可視化面板有多種&#xff1a; 1.Kubernetes官方提供的默認面板&#xff1a;dashboard&#xff0c;用處不大&#xff0c;放棄&#xff1b…

MCP連接Agent:AI時代的TCP/IP

介紹 2023年&#xff0c;生成式AI爆發。2024年&#xff0c;智能體&#xff08;Agent&#xff09;接棒成為AI新焦點。2025年&#xff0c;智能體似乎已經要開始爆發了。目前的智能體更像一個“單機App”&#xff1a;彼此不了解、無法通信&#xff0c;更不能協作。類似互聯網早期…

交換機工作原理(MAC地址表、VLAN)

目錄 一、交換機的基本工作原理 數據幀的轉發 MAC地址表的作用 交換機的轉發方式 二、VLAN&#xff08;虛擬局域網&#xff09; VLAN的定義 VLAN的作用 VLAN的實現方式 VLAN的幀標記 VLAN的通信 三、交換機與VLAN的結合 四、交換機與VLAN的實際應用場景 交換機是局…

eFish-SBC-RK3576工控板外部RTC測試操作指南

備注&#xff1a; 1&#xff09;測試時一定要接電池&#xff0c;否則外部RTC斷電后無法工作導致測試失敗&#xff1b; 2&#xff09;如果連接了網絡&#xff0c;系統會自動同步NTP時鐘&#xff0c;所以需要關閉自動同步時鐘。 關閉自動同步NTP時鐘方法&#xff1a; 先查看是…

淘寶按圖搜索商品(拍立淘)Java 爬蟲實戰指南

在電商領域&#xff0c;按圖搜索商品功能為用戶提供了更直觀、便捷的購物體驗。淘寶的拍立淘功能更是憑借其強大的圖像識別技術&#xff0c;成為許多開發者和商家關注的焦點。本文將詳細介紹如何利用 Java 爬蟲技術實現淘寶按圖搜索商品功能&#xff0c;包括注冊賬號、上傳圖片…