Linux——Shell編程之循環語句(筆記)

For循環語句

1、for語句的結構與邏輯:

? ? 使用for循環語句時,我們需要指定一個變量以及取值列表,針對每個不同的取值重復執行相同的命令序列,直到變量使用完退出循環。結構如下:

for 變量 in 取值列表do命令序列done

? ? 對于for語句的操作對象——用戶指定名稱的變量,并通過in關鍵字為該變量預先設置了一個取值列表,多個取值之間以空格進行分隔。然后位于do...done之間的命令序列稱為循環體,其中的執行語句需引用變量以完成相應的任務。邏輯圖如下:

?2、應用示例:

(1)根據姓名列表批量添加用戶
 [root@localhost ~]#vim /root/users.txt    //用于測試的列表文件
zhangsan
lisi
wangwu[root@localhost ~]#vim uadd.sh    //批量添加用戶的腳本
#!/bin/bash
ULIST=$(cat /root/users.txt)for UNAME in $ULIST
douseradd $UNAMEecho    "aptech" | passwd --stdin $UNAME &>/dev/null
done[root@localhost ~]#chmod +x uaddfor.sh[root@localhost ~]#./uaddfor.sh    //測試并確認執行結果[root@localhost ~]#tail -3 /etc/passwd
zhangsan:x:... ...    //省略內容[root@localhost ~]#vim udelfor.sh    //測試并確認結果[root@localhost ~]#id zhangsan
id: zhangsan: no such user    //無此用戶
(2)根據IP地址列表檢查主機狀態
 [root@localhost ~]#vim /root/ipadds.txt    //測試的列表文件
176.16.16.1
192.168.137.1
192.168.137.254[root@localhost ~]#vim chkhosts.sh    //循環檢查各主機的腳本
#!/bin/bash
HLIST=$(cat /root/ipadd.txt)for IP in $ HLIST
doping -c 3 -i 0.2 -W 3 $IP    &> /dev/null//-c 發送包的數量;-i 發送ping包間隔;-W 超時時間
if [ $? -eq 0 ]
thenecho "Host $IP is up."
elseecho "Host $IP is down."
fi
done[root@localhost ~]#chmod +x chkhosts.sh[root@localhost ~]#./chkhost.sh    //測試并確認執行結果
Host 172.16.16.1 is down.
Host 192.168.137.1 is down.
Host 192.168.137.254 is up.

While循環語句

1、while語句的結構與邏輯:

? ? 根據特定的條件反復執行一個命令序列,直到該條件不再滿足時為止。注意避免出現死循環的情況的情況,否則之后的命令操作將無法進行。結構如下:

while 條件語句操作
do 命令序列
done

? ? 使用while循環語句時,有兩個特殊的條件測試操作,即true(真)和false(假)。使用true作為條件,條件永遠成立,命令序列將無限執行;使用false作為條件,則循環體將不會被執行。這兩個特殊條件也可以用在if語句的條件測試中。邏輯圖如下:

?2、應用示例:

(1)批量添加規律編號的用戶
[root@localhost ~]#vim uadd.sh    //批量添加用戶的腳本
#!/bin/bash
PREFIX="lemon"
i=1
while [ $1 -le 20 ]
douseradd ${PREFIX}$iecho "123456" | passwd --stadin ${PREFIX}$i &> /dev/nulllet i++
done
[root@localhost ~]#chmod +x uadd.sh
[root@localhost ~]#./uadd.sh
[root@localhost ~]#grep "lemon" /etc/passwd | tail -3
lemon11:x:...    ...    //省略部分信息
[root@localhost ~]#vim /udel.sh    //批量刪除用戶的腳本
#!/bin/bash
PREFIX="lemon"
i=1
while [ $i -le 20 ]
douserdel -r ${PREFIX}$ilet i++
done
[root@localhost ~]#chmod +x udel.sh
[root@localhost ~]#./udel.sh    //測試并確認結果
[root@localhost ~]#id lemon20
id:lemon20:無此用戶

Until 循環語句

(1)until語句的結構:

? ? until與while完全相反,while循環在條件為“真”是繼續執行循環,而until則是在條件為假時執行循環。結構如下:

until 條件測試操作
do命令序列
done

? ? until語句首先判斷until后的條件測試結果,如果條件不成立,則執行do...done循環體中的命令序列;返回until后再次判斷條件測試結果,如果條件仍然不成立,則繼續執行循環體;再次返回到until后,判斷條件測試結果...直到測試結果成立為止,跳到done語句,表示結束循環。邏輯如下:

(2)應用示例

為指定用戶發送在線消息

[root@localhost ~]#vim until-user_online_to_write.sh
#!/bin/bash
#檢查參數數量是否足夠
if [ $# -lt 2 ];thenecho "Usage: $0 <username1> <username2> ... <message>"exit 1
fi#提取消息,消息為最后一個參數
message="${!#}"#遍歷除最后一個參數外的所有用戶名
for username in "${@:1:$#-1}"; do#檢查用戶是否為系統內用戶
if ! grep -q "^$username:" /etc/passwd; thenecho "$username is not a valid user on this system."continue
fi#持續檢查用戶是否登錄
while ! who | grep -q "$username"; doecho "$username is not logged on. Waiting for the user to log in ..."sleep 60
done#用戶已登錄,發送消息echo "Sending message to $username..."write "$username" <<EOF
$message
EOFif [ $? -ne 0 ] ; thenecho "Failed to send message to $username."fi
done
[root@localhost ~]#chmod +x until-user_online_to_write.sh
[root@localhost ~]#./until-user_online_to_write.sh root
//發個root自己,消息為空
Message from root@localhost on pts/0 at 16:23 ... Are you ready ? root
EOF

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

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

相關文章

【權限】v-hasPermi=“[‘monitor:job:add‘]“ 這個屬性是怎么控制能不能看到這個按鈕

背景&#xff1a;對于前臺中通過指令對于操作按鈕的控制是怎么實現的&#xff1a; <el-col :span"1.5"><el-buttontype"primary"plainicon"Plus"click"handleAdd"v-hasPermi"[system:role:add]">新增</el-bu…

ISIS路由引入

?基本概念與作用? ISIS&#xff08;Intermediate System to Intermediate System&#xff09;協議的路由引入&#xff08;Route Import&#xff09;功能用于將其他路由協議&#xff08;如OSPF、BGP&#xff09;或靜態/直連路由引入ISIS域&#xff0c;實現跨協議的路由信息共…

CentOS7更換國內YUM源和Docker簡單應用

配置國內阿里云鏡像源 ## 更新鏡像源 # 1.備份 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak# 2.替換鏡像源文件 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 3.生成緩存 yum clean all yum m…

常見的 14 個 HTTP 狀態碼詳解

文章目錄 一、2xx 成功1、200 OK2、204 No Content3、206 Partial Content 二、3xx 重定向1、301 Moved Permanently2、302 Found3、303 See Other注意4、Not Modified5、307 Temporary Redirect 三、4xx 客戶端錯誤1、400 Bad Request2、401 Unauthorized3、403 Forbidden4、4…

RAG(檢索增強生成)學習路徑全解析:從入門到精通

引言 檢索增強生成&#xff08;Retrieval Augmented Generation&#xff0c;簡稱RAG&#xff09;是一種結合了信息檢索技術與語言生成模型的人工智能技術。它通過從外部知識庫中檢索相關信息&#xff0c;然后將其作為上下文輸入到大語言模型&#xff08;LLM&#xff09;中&…

OpenAI為搶跑AI,安全底線成犧牲品?

幾年前&#xff0c;如果你問任何一個AI從業者&#xff0c;安全測試需要多長時間&#xff0c;他們可能會淡定地告訴你&#xff1a;“至少幾個月吧&#xff0c;畢竟這玩意兒可能改變世界&#xff0c;也可能毀了它。”而現在&#xff0c;OpenAI用實際行動給出了一個新答案——幾天…

解決在linux下運行rust/tauri項目出現窗口有內容,但是渲染出來成純黑問題

起因 最近折騰了一下rust/tauri程序開發&#xff0c;據說這玩意性能非常牛皮就玩了一下&#xff0c;但是我運行打包一直出現一個奇怪問題&#xff0c;窗口能正常打開&#xff0c;但是是純黑的什么內容都沒有&#xff0c;鼠標移上去又發現指針會變換&#xff08;看起來是內容又…

高并發內存池(定長內存池基礎)

定長內存池的設計 定長內存池定長內存池的原理講解代碼實現定義對象New對象的主要邏輯delete對象的主要邏輯完整代碼 定長內存池 為什么我們要設計這個定長內存池呢&#xff1f;首先malloc是c標準庫中向堆申請空間的接口&#xff0c;變相的說malloc是普遍性&#xff0c;而我們…

【VUE3】練習項目——大事件后臺管理

目錄 0 前言 1 準備工作 1.1 安裝pnpm 1.2 創建vue項目 1.3 Eslint & Prettier的配置 1.4 husky 提交代碼檢查 1.5 目錄調整 1.6 VueRouter4 1.6.1 基礎配置 1.6.2 路由跳轉 1.7 引入 Element Plus 組件庫 1.8 Pinia 1.8.1 優化 1.9 封裝請求工具 1.9.1 安…

WebSocket與MQTT

在物聯網&#xff08;IoT&#xff09;領域&#xff0c;?WebSocket和MQTT確實都可以實現實時通信&#xff0c;但它們的核心設計目標、適用場景和角色存在顯著差異。以下是兩者的對比分析&#xff1a; ?1. 協議設計初衷? ?WebSocket? ?目標?&#xff1a;提供瀏覽器與服務器…

Mysql為什么有時候會選錯索引

案例 正常情況 有一個表t ( id, a , b )&#xff0c;id是主鍵索引&#xff0c;a是Normal索引。 正常情況下&#xff0c;針對a進行查詢&#xff0c;可以走索引a 并且查詢的數量和預估掃描行數是差不多的&#xff0c;都是10001行 奇怪的現象 隨著時間的變化&#xff0c;后…

[250414] ArcoLinux 項目宣布逐步結束

目錄 ArcoLinux 項目宣布逐步結束 ArcoLinux 項目宣布逐步結束 備受歡迎的 Arch Linux 發行版 ArcoLinux 近日宣布&#xff0c;其項目將逐步結束。ArcoLinux 以其作為 Linux 教育平臺和提供多種安裝選項&#xff08;從完整桌面環境到最小化基礎安裝&#xff09;而聞名。 核心…

opencv人臉性別年齡檢測

一、引言 在計算機視覺領域&#xff0c;人臉分析是一個熱門且應用廣泛的研究方向。其中&#xff0c;人臉性別年齡檢測能夠自動識別圖像或視頻流中人臉的性別和年齡信息&#xff0c;具有諸多實際應用場景&#xff0c;如市場調研、安防監控、用戶個性化體驗等。OpenCV 作為一個強…

【NLP】 22. NLP 現代教程:Transformer的訓練與應用全景解讀

&#x1f9e0; NLP 現代教程&#xff1a;Transformer的訓練與應用全景解讀 一、Transformer的使用方式&#xff08;Training and Use&#xff09; 如何使用Transformer模型&#xff1f; Transformer 模型最初的使用方式有兩種主要方向&#xff1a; 類似 RNN 編碼-解碼器的架…

Spring Boot 集成 RocketMQ 全流程指南:從依賴引入到消息收發

前言 在分布式系統中&#xff0c;消息中間件是解耦服務、實現異步通信的核心組件。RocketMQ 作為阿里巴巴開源的高性能分布式消息中間件&#xff0c;憑借其高吞吐、低延遲、高可靠等特性&#xff0c;成為企業級應用的首選。而 Spring Boot 通過其“約定優于配置”的設計理念&a…

HTTPS實現安全的關鍵方法及技術細節

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;通過多種技術手段實現數據傳輸的安全性&#xff0c;其核心機制基于SSL/TLS協議&#xff0c;并結合數字證書、加密算法等技術。 SSL&#xff1a;Secure Sockets Layer&#xff0c;安全套接字層 TLS&#xff1a;…

Java【多線程】(8)CAS與JUC組件

目錄 1.前言 2.正文 2.1CAS概念 2.2CAS兩種用途 2.2.1實現原子類 2.2.2實現自旋鎖 2.3缺陷&#xff1a;ABA問題 2.4JUC組件 2.4.1Callable接口 2.4.2ReentrantLock&#xff08;與synchronized對比&#xff09; 2.4.3Semaphore信號量 2.4.4CountDownLatch 3.小結 1…

【Docker】離線安裝Docker

背景 離線安裝Docker的必要性&#xff0c;第一&#xff0c;在目前數據安全升級的情況下&#xff0c;很多外網已經基本不好訪問了。第二&#xff0c;如果公司有對外部署的需求&#xff0c;那么難免會存在對方只有內網的情況&#xff0c;那么我們就要做到學會離線安裝。 下載安…

MecAgent Copilot:機械設計師的AI助手,開啟“氛圍建模”新時代

MecAgent Copilot作為機械設計師的AI助手,正通過多項核心技術推動機械設計進入“氛圍建模”新時代。以下從功能特性、技術支撐和應用場景三方面解析其創新價值: 一、核心功能特性 ??智能草圖生成與參數化建模?? 支持自然語言輸入生成設計草圖和3D模型,如輸入“剖面透視…

MCU屏和RGB屏

一、MCU屏 MCU屏?&#xff1a;全稱為單片機控制屏&#xff08;Microcontroller Unit Screen&#xff09;&#xff0c;在顯示屏背后集成了單片機控制器&#xff0c;因此&#xff0c;MCU屏里面有專用的驅動芯片。驅動芯片如&#xff1a;ILI9488、ILI9341、SSD1963等。驅動芯片里…