shell腳本條件語句和循環語句

文章目錄

  • 一、條件語句
    • 測試
    • 比較整數數值
    • 字符串比較
    • 邏輯運算
    • 雙中括號
    • ( ){ }
    • if語句結構
    • case語句
  • 二、循環語句
    • 基礎知識
    • for循環
    • while
    • until
    • 雙重循環及跳出循環


一、條件語句

測試

條件測試:判斷某需求是否滿足,需要由測試機制來實現,專用的測試表達式需要由測試命令輔助完成。測試過程,實現評估布爾聲明,以便用在條件性環境下進行執行。

若真,則狀態碼變量 $? 返回0
若假,則狀態碼變量 $? 返回1

格式:
1.test 條件表達式
2.[ 條件表達式 ](注意大括號前后需要空格)
測試使用echo$? 的返回值來判斷是否成功。

操作符:

  • -d:測試是否為目錄(Directory)
  • -e:測試目錄或文件是否存在(Exist)
  • -a:測試目錄或文件是否存在(Exist)
  • -f:測試是否為文件(File)
  • -r:測試當前用戶是否有權限讀取(Read)
  • -w:測試當前用戶是否有權限寫入(Write)
  • -x:測試當前用戶是否有權限執行(eXcute)
  • -L: 測試是否為軟連接文件

屬性測試補充:
-s FILE #是否存在且非空
-t fd #fd 文件描述符是否在某終端已經打開
-N FILE #文件自從上一次被讀取之后是否被修改過
-O FILE #當前有效用戶是否為文件屬主
-G FILE #當前有效用戶是否為文件屬組

在這里插入圖片描述

比較整數數值

[ 整數1 -操作符 整數2 ]

  • -eq:第一個數等于(Equal)第二個數
  • -ne:第一個數不等于(Not Equal)第二個數
  • -gt:第一個數大于(Greater Than)第二個數
  • -lt:第一個數小于(Lesser Than)第二個數
  • -le:第一個數小于或等于(Lesser or Equal)第二個數
  • -ge:第一個數大于或等于(Greater or Equal)第二個數
    在這里插入圖片描述

字符串比較

常用的測試操作符

  • =:字符串內容相同
  • !=:字符串內容不同,! 號表示相反的意思
  • -z:字符串內容為空
  • -n: 字符是否存在

格式
[ 字符串1 = 字符串2 ] 是否相同

[ 字符串1 != 字符串2 ] 是否不相同

[ -z 字符串 ] 是否為空

[ -n 字符串 ] 字符是否存在
在這里插入圖片描述

邏輯運算

  • -a或&&:邏輯與,“而且”的意思全真才為真
  • -o或||:邏輯或,“或者”的意思一真即為真
  • !:邏輯否

cmd1 操作符 cmd2

組合用法
( cmd1 && cmd2) || cmd3
cmd1 成功 會執行cmd2 不執行cmd3
cmd1 不成功 會執行cmd3

雙中括號

[[ ]]
== 左側字符串是否和右側的字符串相同
注意:此表達式用于[[ ]]中,字符串為通配符
=~ 左側字符串是否能夠被右側的正則表達式的字符串所匹配
在這里插入圖片描述
重點注意正則表達式和通配符的區別

( ){ }

(CMD1;CMD2;…)和 { CMD1;CMD2;…; } 都可以將多個命令組合在一起,批量執行。
兩者最大的不同點: 用( )執行多條程序時,會開啟字shell,即在新的bash環境下,而{ }則是在當前bash環境下。

if語句結構

分支結構
1.單分支

if 判斷條件;
then 條件為真的分支代碼
fi
注意: if······fi 主體結構,注意分號是英文格式
在這里插入圖片描述

2.雙分支
if 判斷條件; then
條件為真的分支代碼
else
條件為假的分支代碼
fi
在這里插入圖片描述

3.多分支
if 判斷條件1
then
條件1為真的分支代碼

elif 判斷條件2
then
條件2為真的分支代碼

elif 判斷條件3;then
條件3為真的分支代碼


else
以上條件都為假的分支代碼 托底
fi
在這里插入圖片描述

case語句

基本格式

read -p          i #從屏幕輸入條件case $i in
PAT1)             #滿足分支1條件則執行分支1的程序分支1;;
PAT2)分支2;;
...
*)默認分支;;

在這里插入圖片描述

二、循環語句

基礎知識

echo
echo -n 表示不換行輸出
echo -e 表示輸出轉義符

選項作用
\r光標移至行首,并且不換行
\s當前shell的名稱,如bash
\t插入Tab鍵,制表符
\n輸出換行
\f換行,但光標仍停留在原處
\表示插入"\"本身轉義
\b表示退格 不顯示前一個字符
\c抑制更多的輸出或不換行

在這里插入圖片描述
退格刪除前面的字符
注意:退格鍵和末尾的字符相關,超過末尾的字符數量會出現bug

date
date查看當前系統時間

-d 你描述的日期,顯示指定字符串所描述的時間,而非當前時間

%F 完整日期格式,等價于 %Y-%m-%d

% T 時間(24小時制)(hh:mm:ss)

在這里插入圖片描述

for循環

循環含義:將某段代碼重復運行多次,通常有進入循環的條件和退出循環的條件 。
常見的循環的命令:for;while;until
for用于已知循環次數;until、while用于循環次數未知。

列表循環
語法:
for 變量名 in {list}
do
命令
done

花括號{ }和seq在for循環中的應用

for i in {1..50..2} 1-50的奇數
for i in {2..50..2} 1-50的偶數
for i in {10..1}  1-10倒序排列for i in $(seq 10)  1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇數,中間為步長

在這里插入圖片描述
不帶列表循環
for 變量名
do
命令
done
腳本中沒有變量參數,需要在執行的時候手動傳參。

在這里插入圖片描述

類似于c語言風格的for循環

for (( 表達式1; 表達式2; 表達式3 )); do 命令; done

for ((expr1;expr2;expr3))
do
命令
done

expr1:定義變量并賦初值
expr2:決定是否循環
expr3:決定循環變量如何改變,決定循環什么時候退出
在這里插入圖片描述

while

相對于for,需要知道循環次數,但有些時候并不能知道循環次數。我們只知道停止條件,不知道次數,就需要用到while循環。直到達到條件。
while循環
1.語法結構
2.死循環
while循環一般用于有條件判斷的循環,若判斷條件為真,則進入循環,當然條件為假就跳出循環。
語法:
while 條件
do
命令
done

死循環
while 后面跟的條件為一定正確的,一般為true或者[ 1 -eq 1];這樣命令會一直執行。

在這里插入圖片描述

until

until循環和while循環類似,但區別在于while循環在條件為真時繼續執行循環,而until則是在條件為假時執行循環。

在這里插入圖片描述

雙重循環及跳出循環

  • break跳出單個循環 break n 數字數字是幾代表跳出n層循環
  • continue終止某次循環中的命令,但是不會完全終止命令
  • exit 直接退出腳本

continue終止某次循環的命令;終止i=5。
在這里插入圖片描述
break跳出一層循環;
在這里插入圖片描述
break跳出兩層循環;
在這里插入圖片描述
exit直接退出腳本;
在這里插入圖片描述

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

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

相關文章

視頻分類——C3D使用

整體比較分散,可能很多源碼都需要修改,需要有耐心。 一、數據準備 PS 調研后,上手容易代碼比較簡潔的是:https://github.com/Niki173/C3D/tree/main 因為源碼很多參數都寫死到了源碼中,沒有解耦,并且默…

CCF-CSP認證 2024年3月 4.化學方程式配平

題解&#xff1a;首先完成數據的讀入&#xff0c;然后高斯消元求秩按題意解即可 #pragma GCC optimize(2, 3, "Ofast", "inline") #include <bits/stdc.h> using namespace std; const int maxn 100;using matrix double[maxn][maxn]; using vect…

5.20Git

版本控制工具Git&#xff0c;其他的工具還有SVN 共享代碼&#xff0c;追溯記錄&#xff0c;存儲.c文件 Git實現的功能&#xff1a;回溯&#xff08;以前某個時間節點的數據情況&#xff09;共享&#xff08;大家共享修改&#xff09; Git&#xff1a;80% SVN&#xff…

QT tableWidget詳細分析

一.定義 QTableWidget是一個用于顯示表格數據的Qt控件&#xff0c;它是一個基于Qt Model/View框架的視圖組件。QTableWidget提供了一種簡單的方式來展示和編輯表格數據&#xff0c;用戶可以通過添加行、列和單元格來構建一個完整的數據表格。 下面是一些QTableWidget的主要特點…

The Missing Semester of Your CS Education(計算機教育中缺失的一課)

Shell 工具和腳本(Shell Tools and Scripting) 一、shell腳本 1.1、變量賦值 在bash中為變量賦值的語法是foobar&#xff0c;訪問變量中存儲的數值&#xff0c;其語法為 $foo。 需要注意的是&#xff0c;foo bar &#xff08;使用空格隔開&#xff09;是不能正確工作的&…

網工內推 | 香港移動,10年以上數通經驗,CCIE,5W-6W

01 香港移動招聘 &#x1f537;招聘崗位&#xff1a;網絡工程師 &#x1f537;崗位要求&#xff1a; 需要有10年及以上數通經驗&#xff0c;有CCIE 證書&#xff0c;懂技術管理&#xff0c;溝通暢通 &#x1f537;語言要求&#xff1a; 粵語英語 &#x1f537;薪資&#xff1…

基于灰狼優化算法優化RBF(GWO-RBF)的數據回歸預測(多輸入多輸出)

代碼原理及流程 基于灰狼優化算法優化多輸入多輸出&#xff08;MIMO&#xff09;的RBF神經網絡的數據回歸預測&#xff0c;可以采取以下步驟&#xff1a; 1. 數據準備&#xff1a;準備包含多個輸入特征和多個輸出目標的數據集&#xff0c;確保數據已經經過預處理和歸一化。 …

TCP - 半連接隊列和全連接隊列

目錄 一、半連接隊列和全連接隊列的概念 二、全連接隊列溢出 三、半連接隊列溢出 一、半連接隊列和全連接隊列的概念 1. 半連接隊列&#xff1a;服務端收到客戶端發送的 SYN 包時&#xff0c;內核會將該連接加入半連接 SYN 隊列&#xff0c;并向客戶端返回響應 2. 全連接隊…

CSS基礎(第二天)

Emmet語法 快速生成HTML結構語法 1. 生成標簽 直接輸入標簽名 按tab鍵即可 比如 div 然后tab 鍵&#xff0c; 就可以生成 <div></div> 2. 如果想要生成多個相同標簽 加上 * 就可以了 比如 div*3 就可以快速生成3個div 3. 如果有父子級關系的標簽&#xff0c;可以…

算法刷題筆記 數的范圍(C++實現)(二分法重要例題)

文章目錄 題目描述題目思路題目代碼&#xff08;C&#xff09;題目感想 題目描述 給定一個按照升序排列的長度為n的整數數組&#xff0c;以及q個查詢。對于每個查詢&#xff0c;返回一個元素k的起始位置和終止位置&#xff08;位置從0開始計數&#xff09;。如果數組中不存在該…

Docker【2】iptables 錯誤解決

iptables 錯誤解決 問題說明問題分析解決步驟1. 確保 iptables 模塊已加載2. 檢查和重啟 docker 服務3. 檢查 firewalld 狀態4. 重置 iptables 規則5. 查看和更新 Docker 配置 總結 問題說明 執行的 docker 命令如下&#xff0c;啟動 nginx 并設置宿主機端口 (8080) 與容器端口…

學習Uni-app開發小程序Day25

這一章學習了觸底加載更多阻止無效的網絡請求、分類列表存入Storage在預覽頁面讀取緩存展示、通過swiper的事件實現真正的壁紙預覽及切換 觸底加載更多阻止無效的網絡請求、load-more樣式的展現 前面已經學習了當列表觸底后&#xff0c;會繼續加載&#xff0c;當到最后一層后…

自動化測試--利用pytest實現整條業務鏈路測試

? 概述 前面一章講解了單個接口的測試&#xff0c;但是實際項目中&#xff0c;因為權限和登錄狀態的限制&#xff0c;大部分接口沒辦法直接訪問到&#xff0c;這時候我們想訪問到一個系統的接口&#xff0c;就需要模擬用戶登錄拿到用戶的token和所擁有的權限之后再將這些信息…

vivado2020.2創建hls仿真工程實現led閃爍

下載vivado2020.2后會有這個出現在桌面 點擊進入創建工程&#xff0c;這里注意不要有前面的\我再復制的時候復制錯了導致創建失敗 按f光標就會跳轉到下一個f開頭的函數處&#xff0c;要查找其他函數也同理 生成了一個synthesis summary文件 找到目錄下生成的.v文件 an 點…

Pod進階——資源限制以及探針檢查

目錄 一、資源限制 1、資源限制定義&#xff1a; 2、資源限制request和limit資源約束 3、Pod和容器的資源請求和限制 4、官方文檔示例 5、CPU資源單位 6、內存資源單位 7、資源限制實例 ①編寫yaml資源配置清單 ②釋放內存&#xff08;node節點&#xff0c;以node01為…

【知識蒸餾】多任務模型 logit-based 知識蒸餾實戰

一、什么是邏輯&#xff08;logit&#xff09;知識蒸餾 Feature-based蒸餾原理是知識蒸餾中的一種重要方法&#xff0c;其關鍵在于利用教師模型的隱藏層特征來指導學生模型的學習過程。這種蒸餾方式旨在使學生模型能夠學習到教師模型在特征提取和表示方面的能力&#xff0c;從…

有些錯誤,常犯常新、常新常犯:記錄一個使用element-plus的tooltip組件的錯誤

使用element-plus的tooltip組件&#xff0c;最開始的寫法是這樣的&#xff1a; <el-tooltipclass"box-item"effect"dark"content"tooltip content" ><el-button v-if"isDisabled" :underline"false" type"pr…

持續總結中!2024年面試必問 20 道 Redis面試題(五)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 20 道 Redis面試題&#xff08;四&#xff09;-CSDN博客 九、Redis的同步機制了解么&#xff1f; Redis 的同步機制是其復制策略的核心部分&#xff0c;確保數據在主節點&#xff08;master&#xff09;和從節點…

【C語言】程序員自我修養之文件操作

【C語言】程序員自我修養之文件操作 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;C語言學習之路 文章目錄 【C語言】程序員自我修養之文件操作前言一.文件介紹1.1為什么使用文件1.2文件分類1.3二進制文件和文本文件 二.文件的打開和關閉2.…

桌面藏線大法

1有線改無線&#xff1a; 藍牙鼠標 藍牙鍵盤 藍牙耳機 2將排插貼到桌子底下 購物軟件上搜 3斷舍離 不要的電子產品統統扔掉 4 洞洞板和掛鉤 這個不用介紹了