Shell腳本-for循環應用案例

在Shell腳本編程中,for循環是一種強大的工具,用于處理重復性任務。無論是批量處理文件、遍歷目錄內容還是簡單的計數任務,for循環都能提供簡潔而有效的解決方案。本文將通過幾個實際的應用案例來展示如何使用for循環解決具體的編程問題。

案例一:批量壓縮圖片

假設你有一組圖片文件需要壓縮,并希望為每個文件創建一個對應的壓縮版本。

腳本示例:

#!/bin/bash# 創建存放壓縮后圖片的目錄
mkdir -p compressed_images# 遍歷當前目錄下的所有jpg和png文件
for image in *.jpg *.png; doif [ -f "$image" ]; then # 確保是普通文件# 使用ImageMagick工具進行壓縮convert "$image" -resize 50% "compressed_images/${image}"echo "Compressed '$image' to 'compressed_images/${image}'"fi
done

說明:

  • 使用convert命令(來自ImageMagick工具集)調整圖片大小。
  • mkdir -p compressed_images確保目標目錄存在,如果不存在則創建。
  • if [ -f "$image" ]確保只處理普通文件。

案例二:批量重命名文件

假設你有一系列文件需要按照特定規則進行重命名,例如添加前綴或修改擴展名。

腳本示例:

#!/bin/bash# 定義新前綴
prefix="backup_"# 遍歷當前目錄下的所有txt文件
for file in *.txt; doif [ -f "$file" ]; then # 確保是普通文件new_name="${prefix}${file}"mv "$file" "$new_name"echo "Renamed '$file' to '$new_name'"fi
done

說明:

  • 使用mv命令進行重命名操作。
  • if [ -f "$file" ]確保只處理普通文件。

案例三:定時備份數據庫

編寫一個腳本來定期備份MySQL數據庫,并按日期組織備份文件。

腳本示例:

#!/bin/bash# 設置數據庫連接信息
DB_USER="your_db_user"
DB_PASSWORD="your_db_password"
DB_NAME="your_db_name"# 獲取當前日期作為備份文件名的一部分
DATE=$(date +"%Y%m%d")# 創建備份目錄
mkdir -p backups# 執行備份操作
for db in $DB_NAME; doBACKUP_FILE="backups/${db}_${DATE}.sql"mysqldump -u $DB_USER -p$DB_PASSWORD $db > $BACKUP_FILEecho "Backed up database '$db' to '$BACKUP_FILE'"
done

說明:

  • 使用mysqldump命令導出數據庫。
  • $(date +"%Y%m%d")獲取當前日期,用于生成備份文件名。
  • mkdir -p backups確保備份目錄存在。

案例四:檢查并報告系統狀態

編寫一個腳本來檢查系統的磁盤使用情況,并對超過80%使用的分區發出警告。

腳本示例:

#!/bin/bash# 定義閾值
threshold=80# 獲取磁盤使用情況
df_output=$(df -h)# 解析輸出并檢查每個分區
echo "$df_output" | while read -r line; douse_percent=$(echo "$line" | awk '{print $5}' | sed 's/%//')mount_point=$(echo "$line" | awk '{print $6}')if [[ $use_percent -gt $threshold ]]; thenecho "Warning: $mount_point usage is at $use_percent%"fi
done

說明:

  • 使用df -h獲取磁盤使用情況。
  • 使用awksed解析輸出中的百分比和掛載點。
  • 如果使用率超過設定的閾值,則打印警告信息。

案例五:自動更新軟件包

編寫一個腳本來自動更新Linux系統上的軟件包。

腳本示例:

#!/bin/bash# 更新包列表
sudo apt-get update# 升級已安裝的軟件包
packages=$(dpkg --get-selections | grep install)
for package in $packages; dosudo apt-get install --only-upgrade $packageecho "Upgraded package: $package"
done

說明:

  • 使用apt-get update更新包列表。
  • dpkg --get-selections | grep install列出所有已安裝的軟件包。
  • 對每個軟件包執行apt-get install --only-upgrade進行升級。

結語

感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!

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

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

相關文章

Chrmo手動同步數據

地址欄輸入 chrome://sync-internals分別點擊這2個按鈕即可觸發手動同步

為什么圓形在GeoJSON中被表示為多邊形(Polygon)而不是圓形類型

GeoJSON規范中沒有"圓形"類型 GeoJSON是一種用于表示地理空間數據的標準格式,它的規范中只定義了以下幾種基本幾何類型: Point (點) LineString (線) Polygon (多邊形) MultiPoint (多點) MultiLineString (多線) MultiPolygon (多多邊形) GeometryCollection (幾…

大數據組件學習之--Kafka 安裝搭建

一、前置環境 在搭建kafka之前,請確認自己的hadoop、zookeeper是否搭建完成且可正常運行 二、下載并上傳安裝包(鏈接為百度網盤) kafka安裝包 tar -zxvf /opt/software/kafka_2.12-2.4.1.tgz -C /opt/module/ 進入解壓后的目錄更改文件名…

PyQt6基礎_pyqtgraph_折線圖with縮放調節

目錄 字符型橫坐標代碼 折線圖代碼 運行 創建新類,繼承pg.PlotWidget,在新類中實現業務內容,重寫pg.PlotWidget中的wheelEvent方法并使用業務數據實現比較理想的縮放狀態。 字符型橫坐標代碼 class StrAxisItem(pg.AxisItem):def __init…

聯邦元學習實現個性化物聯網的框架

隨著數據安全和隱私保護相關法律法規的出臺,需要直接在中央服務器上收集和處理數據的集中式解決方案,對于個性化物聯網而言,訓練各種特定領域場景的人工智能模型已變得不切實際。基于此,中山大學,南洋理工大學&#xf…

audio 核心服務AudioPolicyService 和AudioFlinger啟動流程

目錄 1、audioserver啟動 2、AudioPolicyService啟動 3、AudioFlinger啟動 audio的核心服務有兩個,AudioPolicyService 和AudioFlinger他們到在audioserver一個進程中 1、audioserver啟動 設備開機,系統啟動時將執行 /system/etc/init/audioserver.rc…

反爬蟲機制中的驗證碼識別:類型、技術難點與應對策略

在互聯網數據抓取領域,驗證碼識別是爬蟲過程中的關鍵環節之一。下面對常見驗證碼類型、技術難點及應對策略進行詳細解析,并提供多種場景下的代碼實現示例。 一、驗證碼類型與技術難點 (一)圖形驗證碼 1. 字符驗證碼 特征&#…

vue element使用el-table時,切換tab,table表格列項發生錯位問題

展示問題 問題描述:使用el-table的fixed"right"屬性后,如果切換tab時,回出現最后一列錯誤的問題 官網提供解決方法:doLayout 需要注意的事項:我這里是通過組件使用的table組件,涉及多層組件封裝…

示例:Spring JDBC 聲明式事務(xml配置形式)

聲明式事務是指在不修改源代碼的情況下通過配置applicationContext.xml自動實現事務控制,其本質是AOP環繞通知。它的觸發時機為:1、當目標方法執行成功時自動提交事務,2、當目標方法拋出運行時異常時,自動事務回滾 核心步驟示例&a…

在vmware中ubuntu系統因為安裝了docker查不到ip地址

問題截圖: 根據提供的截圖信息,可以明確看到ens33網卡處于**物理連接斷開(NO-CARRIER)且接口關閉(DOWN)**的狀態,這是導致無法獲取IP地址的直接原因。以下是針對VMware虛擬機的具體解決方案&am…

51c大模型~合集121

我自己的原文哦~ https://blog.51cto.com/whaosoft/13869815 #大模型何以擅長小樣本學習? 這項研究給出詳細分析 近年來,大語言模型(LLM)在人工智能領域取得了突破性進展,成為推動自然語言處理技術發展與通用人…

Babylon.js 材質統一轉換指南:將 AssetContainer 中的所有材質轉換為 PBRMetallicRoughnessMaterial

在現代 3D 開發中,基于物理的渲染(PBR)已成為行業標準。本文將詳細介紹如何在 Babylon.js 中將 AssetContainer 加載的各種材質統一轉換為 PBRMetallicRoughnessMaterial,實現項目材質的標準化。 為什么需要材質轉換? PBRMetallicRoughness…

Go slice切片使用教程,一次通關!

簡介 Go 中的 切片(slice) 是 Go 最強大、最常用的數據結構之一。它是對數組的輕量封裝,比數組更靈活,幾乎所有的集合處理都用切片來完成。 什么是切片(slice) 切片是一個擁有 長度(len&…

nodejs的包管理工具介紹,npm的介紹和安裝,npm的初始化包 ,搜索包,下載安裝包

nodejs的包管理工具介紹,npm的介紹和安裝,npm的初始化包 ,搜索包,下載安裝包 🧰 一、Node.js 的包管理工具有哪些? 工具簡介是否默認特點npmNode.js 官方的包管理工具(Node Package Manager&am…

FPGA設計 時空變換

1、時空變換基本概念 1.1、時空概念簡介 時鐘速度決定完成任務需要的時間,規模的大小決定完成任務所需要的空間(資源),因此速度和規模就是FPGA中時間和空間的體現。 如果要提高FPGA的時鐘,每個clk內組合邏輯所能做的事…

增加首屏圖片

增加首屏圖片&#xff08;bg.jpg&#xff09; web-mobile類型打包 //index.html腳本 <div id"myDiv_1111"style"background: url(./bg.jpg) 50% 50%/ 100% auto no-repeat ; width:100%;height:100%;position:absolute;"></div> //游戲內腳本…

貪心算法~~

目錄 一、理論基礎 二、題目練習 &#xff08;1&#xff09;455. 分發餅干 &#xff08;2&#xff09;53. 最大子數組和 - 力扣 &#xff08;3&#xff09;122. 買賣股票的最佳時機 II - 力扣&#xff08;LeetCode&#xff09; &#xff08;4&#xff09;860. 檸檬水找零…

形象解釋 HTTP 的四種常見請求方式及其中的區別聯系

HTTP 的常見請求方式常見的有四種&#xff1a;GET、POST、PUT、DELETE&#xff0c;它們各自的功能不一樣。 &#x1f35c; 場景比喻&#xff1a;HTTP 請求像“去餐廳點菜” 請求方式行為餐廳比喻說明GET獲取數據看菜單/問服務員&#xff1a;你們有什么菜&#xff1f;不帶食材、…

string的基本使用

string的模擬實現 string的基本用法string的遍歷&#xff08;三種方式&#xff09;&#xff1a;關于auto&#xff08;自動推導&#xff09;:范圍for: 迭代器普通迭代器(可讀可改&#xff09;const迭代器&#xff08;可讀不可改&#xff09; string細小知識點string的常見接口引…

kubernetes》》k8s》》證書有效期

cd /etc/kubernetes/pki openssl x509 -in apiserver.crt -text -noount通常&#xff0c;Kubernetes的證書是由kubeadm生成的&#xff0c;所以可能需要修改kubeadm的源碼或者配置 登錄Master節點 》》》默認延續1年 # 查看證書 檢查證書有效期 # 該命令顯示 /etc/kubernetes…