【Linux】Shell腳本之流程控制語句 if判斷、for循環、while循環、case循環判斷 + 實戰詳解[?建議收藏!!?]

在這里插入圖片描述

👨?🎓博主簡介

??🏅云計算領域優質創作者
??🏅華為云開發者社區專家博主
??🏅阿里云開發者社區專家博主
💊交流社區:運維交流社區 歡迎大家的加入!
🐋 希望大家多多支持,我們一起進步!😄
🎉如果文章對你有幫助的話,歡迎 點贊 👍🏻 評論 💬 收藏 ?? 加關注+💗


文章目錄

  • 🍁 if 判斷
    • 🍁 if 判斷格式:
    • 🍁 if 判斷實例:
      • 🍃 單條件判斷實例:判斷是否為整數
      • 🍃 多條件判斷實例:成績及格否
  • 🍁 for 循環
    • 🍁 for 循環格式:
    • 🍁 for 循環實例:
      • 🍃 需求1:打印10以內的偶數-->能被2整除,除2余數為0
      • 🍃 需求2:循環創建文件cs{1..100}
      • 🍃 需求3:從變量中取遍歷的值
      • 🍃 需求4:從命令中取值
      • 🍃 需求5:for循環自增自減
      • 🍃 需求6:批量創建用戶,密碼默認為123456
  • 🍁 while 循環
    • 🍁 while 循環格式:
    • 🍁 while 循環實例:
      • 🍃 需求1:計算1到100正整數的和
      • 🍃 需求2:批量創建用戶,密碼默認為123456
      • 🍃 需求3:提示用戶輸入字符,如果是小寫就把字母全部變為大寫,如果是quit則退出腳本
      • 🍃 需求4:無限循環執行zabbix_get調用命令
  • 🍁 case 循環判斷
    • 🍁 case 循環判斷格式:
    • 🍁 case 循環判斷實例:
      • 🍃 nginx服務啟停腳本:函數 + case
  • 相關文章:

🍁 if 判斷

🍁 if 判斷格式:

#單條件判斷
if 條件測試;then執行代碼
fiif 條件測試;then執行代碼
eles執行代碼
fi#多條件判斷
if 條件測試;then執行代碼
elif 條件測試;then執行代碼
eles執行代碼
fi

🍁 if 判斷實例:

🍃 單條件判斷實例:判斷是否為整數

#!/bin/bashread -p "please input a number:" numexpr 10 + $num &>/dev/null
if [ $? -eq 0 ];thenecho "${num}是整數"
elseecho "${num}不是整數"                                  
fi

在這里插入圖片描述

🍃 多條件判斷實例:成績及格否

對輸入成績做判斷:
如果成績小于60;那么打印不及格
如果60>=成績<80;那么打印及格
如果80>=成績<90;那么打印良好
如果90>=成績<=100;那么打印優秀
否則請輸入0-100的整數
結尾
#!/bin/bashread -p "please input is results:" results
expr 10 + $results &>/dev/null
if [ $? -ne 0 ];thenecho "${results}不是合法整數"exit 1
fi
if [ ${results} -lt 60 ];thenecho "不及格"
elif [ ${results} -ge 60 ] && [ ${results} -lt 80 ];thenecho "及格"
elif [ ${results} -ge 80 ] && [ ${results} -lt 90 ];thenecho "良好"
elif [ ${results} -ge 90 ] && [ ${results} -le 100 ];thenecho "優秀"
elseecho "請輸入0-100之間合法的整數,您輸入的是:${results}"
fi

在這里插入圖片描述

🍁 for 循環

🍁 for 循環格式:

for 變量 in 取值列表;do執行代碼
donefor 變量 in 取值列表
do執行代碼
donefor (( i=1;i<20;i++ ));do執行代碼;(表示循環20次執行代碼)
done

取值列表中的值都將被歷遍

🍁 for 循環實例:

🍃 需求1:打印10以內的偶數–>能被2整除,除2余數為0

#!/bin/bash#{起始數字..終止數字..步長} 默認步長為1
for i in {2..10..2};doecho $i
done

continue 跳過當前循環
break 終止當前循環
exit 退出腳本,同時可以指定退出時的狀態碼

seq [起始位置(不指定默認是1)] 終止位置
-s 指定分隔符
-w 補齊相同寬度

🍃 需求2:循環創建文件cs{1…100}

#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )text=$DIR/for[ ! -d $text ] && mkdir $textfor I in {1..100};dotouch ${text}/cs$I
done#其實直接用touch也可以創建,這里只為了演示
#touch cs{1..100}
#會在當前目錄創建cs{1..100}文件

在這里插入圖片描述

🍃 需求3:從變量中取遍歷的值

#!/bin/bashList="file1 file2 file3"
for I in $List;doecho "當前文件為 ${I}"
done

在這里插入圖片描述

🍃 需求4:從命令中取值

#!/bin/bashfor I in $(cat /etc/passwd)
doecho "$I"
done

在這里插入圖片描述

🍃 需求5:for循環自增自減

🍃 需求5.1:批量創建cs1-cs10用戶

#!/bin/bashfor (( i=1;i<=10;i++ ));douseradd cs_$i
done

在這里插入圖片描述

如果需要刪除這些用戶,可在腳本中把useradd改為userdel -r即可;

🍃 需求5.2:輸出數字 a 自增、 a自增、 a自增、b自減

#!/bin/bashfor (( a=1,b=9;a<=10;a++,b-- ));doecho "num is $a $b"
done

a的初始值為1;b的初始值為9;
a在前,所以寫a最大不能>10;
a每次加1,直至加到10;b每次-1,直至a停止。

在這里插入圖片描述

🍃 需求5.3:循環20次zabbix調用

#!/bin/bashfor (( i=1;i<=20;i++ ));docs=$(zabbix_get -s 172.16.10.1 -k cs)echo "調用$i次!調用結果為:$cs"echo "------------------------------------------------------------------------"
done

🍃 需求6:批量創建用戶,密碼默認為123456

#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )#創建一個用戶組
groupadd mailgroup 2>/dev/nullfor i in $(cat $DIR/a.txt);douseradd -g mailgroup -s /sbin/nologin $i 2>/dev/nullecho 123456 | passwd --stdin $i
done

a.txt 中名字可以隨便起;

在這里插入圖片描述

🍁 while 循環

🍁 while 循環格式:

while [條件測試];do執行代碼
donewhile [條件測試]
do執行代碼
donewhile true;do執行代碼(無限循環此命令,每次循環停留兩秒)sleep 2
done

條件測試比如:$i -le 5
當條件成立時,執行循環,不成立,結束循環。
如果while中的條件永遠成立,會一直循環,成為死循環。

🍁 while 循環實例:

🍃 需求1:計算1到100正整數的和

#!/bin/bashdeclare -i I=1declare -i SUM=0while [ $I -le 100 ]; dolet SUM+=$Ilet I++
doneecho "$SUM"

在執行腳本時加個 -x 可查看執行過程

在這里插入圖片描述

🍃 需求2:批量創建用戶,密碼默認為123456

#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )#創建一個用戶組
groupadd mailgroup 2>/dev/nullwhile read username; douseradd -g mailgroup -s /sbin/nologin $username 2>/dev/nullecho 123456 | passwd --stdin $username
done < $DIR/username.txt

username.txt

lcy
cs
abc
abb
abd
abe
abf

在這里插入圖片描述
在這里插入圖片描述

批量刪除用戶

#!/bin/bash#獲取腳本執行的路徑
DIR=$(cd $(dirname $0) && pwd )#創建一個用戶組
groupadd mailgroup 2>/dev/nullcat $DIR/username.txt | while read username; douserdel -r $username
done

在這里插入圖片描述

🍃 需求3:提示用戶輸入字符,如果是小寫就把字母全部變為大寫,如果是quit則退出腳本

#!/bin/bash#如果輸入的不是quit則把小寫字母全部換成大寫字母,如果輸入的是quit則退出循環,否則會一直循環;
read -p "Please enter content:" SCRIPTwhile [ $SCRIPT != "quit" ]; doecho "$SCRIPT" | tr 'a-z' 'A-Z'read -p "Please enter content:" SCRIPT
done

字母寫的小寫,全部會替換為大寫,數字和其他字符不會被替換;

在這里插入圖片描述

🍃 需求4:無限循環執行zabbix_get調用命令

#!/bin/bashwhile true;docs=$(zabbix_get -s 172.16.10.1 -k cs)echo "結果為$cs"echo "----------------------------------------"sleep 2
done

🍁 case 循環判斷

🍁 case 循環判斷格式:

case 變量 in條件或值1)執行代碼
;;條件或值2)執行代碼
;;條件或值3)執行代碼
;;*)執行代碼
esac

🍁 case 循環判斷實例:

🍃 nginx服務啟停腳本:函數 + case

#!/bin/bashngstart (){/usr/local/nginx/sbin/nginx
}ngstop (){/usr/local/nginx/sbin/nginx -s stop
}ngrestart (){/usr/local/nginx/sbin/nginx -s reload
}ngstatus (){/usr/local/nginx/sbin/nginx -s status
}#nginx服務器起停的腳本case $1 instart)echo "啟動nginx服務"ngstart
;;stop)echo "關閉nginx服務"ngstop
;;restart)echo "重啟nginx服務"
#        $0 stop
#        $0 startngrestart
;;status)echo "查看nginx服務狀態"ngstatus
;;*)  echo "USage: /etc/init.d/nginx {start|stop|restart}"
esac

在這里插入圖片描述

推薦一個使用case寫的啟動腳本,包含啟動,停止及重啟監測狀態:linux啟動、關閉、重啟jar包shell腳本

相關文章:

文章名文章地址
【Linux】 shell腳本的創建及使用 《入門到實踐》詳解[?建議收藏!!?]https://liucy.blog.csdn.net/article/details/130111812
【Linux】Shell腳本之函數的操作+實戰詳解[?建議收藏!!?]https://liucy.blog.csdn.net/article/details/130387377
【Linux】Shell腳本之流程控制語句 if判斷、for循環、while循環、case循環判斷 + 實戰詳解[?建議收藏!!?]https://liucy.blog.csdn.net/article/details/130387523

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

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

相關文章

.bit域名調研

.bit域名研究 問題&#xff1a; .bit域名和ENS域名的相同點&#xff1f;不同點&#xff1f;有什么關系&#xff1f; .bit的定義 .bit 是基于區塊鏈的&#xff0c;開源的&#xff0c;跨鏈去中心化賬戶系統.bit 提供了以 .bit 為后綴的全局唯一的命名體系&#xff0c;可用于加密…

安全第二次

一&#xff0c;iframe <iframe>標簽用于在網頁里面嵌入其他網頁。 1&#xff0c;sandbox屬性 如果嵌入的網頁是其他網站的頁面&#xff0c;因不了解對方會執行什么操作&#xff0c;因此就存在安全風險。為了限制<iframe>的風險&#xff0c;HTML 提供了sandb…

分布式應用:Zabbix監控MariaDB

目錄 一、理論 1.Zabbix監控MariaDB 二、實驗 1.Zabbix監控MariaDB 一、理論 1.Zabbix監控MariaDB &#xff08;1&#xff09;環境 zabbix服務端&#xff1a;192.168.204.214 zabbix客戶端&#xff1a;192.168.204.215 &#xff08;2&#xff09;MareaDB安裝 安裝 za…

做海外游戲推廣有哪些條件?

做海外游戲推廣需要充分準備和一系列條件的支持。以下是一些關鍵條件&#xff1a; 市場調研和策略制定&#xff1a;了解目標市場的文化、玩家偏好、競爭格局等是必要的。根據調研結果制定適合的推廣策略。 本地化&#xff1a;將游戲內容、界面、語言、貨幣等進行本地化&#…

使用ip2region獲取客戶端地區

目錄 從gitee拉取ip2region.xdb資源文件 寫測試類 注意要寫對資源路徑 本地測試結果 ?編輯 遠端測試結果 從gitee拉取ip2region.xdb資源文件 git clone https://gitee.com/lionsoul/ip2region.git 將xdb放入resources資源文件夾 引入依賴 <dependency><groupId&…

由淺入深C系列五:使用libcurl進行基于http get/post模式的C語言交互應用開發

使用libcurl進行基于http get/post模式的C語言交互應用開發 簡介環境準備在線資源示例代碼測試調用運行結果 簡介 大多數在linux下的開發者&#xff0c;都會用到curl這個命令行工具。對于進行restful api的測試等&#xff0c;非常方便。其實&#xff0c;這個工具還提供了一個C…

Python中單引號、雙引號和三引號的區別

① 單引號和雙引號主要用來表示字符串 # 單引號 astr = Python print(type(astr)) # <class str># 雙引號"" bstr = "Python" print(type(bstr)) # <class str> str1 = I\m a big fan of Python. print(str1) # Im a big fan of Python.s…

[HDLBits] Exams/m2014 q4d

Implement the following circuit: module top_module (input clk,input in, output out);always(posedge clk) beginout<out^in;end endmodule直接寫out^in就行

Vue 使用 vite 創建項目

vite 是新一代前端構建工具&#xff0c;和 webpack 類似。 vite 的啟動速度更快。在開發環境中&#xff0c;不需要打包就可以直接運行。 vite 的更新速度更快。當修改內容后&#xff0c;不需要刷新瀏覽器&#xff0c;頁面就會實時更新。 vite 完全是按需編譯。它只會編譯需要…

【考研數學】高等數學第三模塊——積分學 | Part II 定積分(反常積分及定積分應用)

文章目錄 前言三、廣義積分3.1 斂散性概念&#xff08;一&#xff09;積分區間為無限的廣義積分&#xff08;二&#xff09;積分區間有限但存在無窮間斷點 3.2 斂散性判別法 四、定積分應用寫在最后 前言 承接前文&#xff0c;梳理完定積分的定義及性質后&#xff0c;我們進入…

企業網盤 vs 傳統存儲設備:為何云存儲成為首選?

企業網盤的出現為企業提供了新的存儲方式&#xff0c;相較于傳統的存儲設備&#xff0c;為何越來越多的企業選擇了云存儲呢&#xff1f; 一、存儲成本 在企業數據存儲方面&#xff0c;成本是企業重要的考量因素。企業網盤是基于云存儲技術的存儲工具&#xff0c;因此它比傳統的…

基于DBN的偽測量配電網狀態估計,DBN的詳細原理

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) DBN的偽測量配電網狀態估計 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類算法,本文將DBN算法偽測量配電網…

Netty:ByteBuf的資源釋放方法

說明 io.netty.buffer.ByteBuf實現了io.netty.util.ReferenceCounted接口&#xff0c;需要顯式釋放。當ByteBuf被實例化后&#xff0c;它的引用計數是1。 調用ByteBuf對象的release方法釋放&#xff1a; ByteBuf的release()方法使引用計數減少1。只有當執行以后引用計數減少…

OpenZFS 2.2 發布 RC3,支持 Linux 6.4

導讀之前的 OpenZFS 2.2 候選版本已致力于實現與 Linux 6.4 內核的兼容性&#xff0c;而在 2.2-rc3 中&#xff0c;Linux 6.4 支持的元跟蹤器已標記為已完成。 OpenZFS 2.2 發布了第 3 個 RC 版本。 之前的 OpenZFS 2.2 候選版本已致力于實現與 Linux 6.4 內核的兼容性&#x…

Vue3 引用第三方Swiper內容觸摸滑動簡單應用

去官網查看更多教程→&#xff1a;Swiper官網 → 點擊教程在vue中使用Swiper→ 在Vue中使用Swiper cd 到項目 安裝Swiper&#xff1a; cnpm install --save swiper 安裝指定版本 cnpm install --save swiper8.1.6 9.4.1 10.1.0…

SpringBoot-Hello World

SpringBootWeb快速入門 創建Springboot工程&#xff0c;并勾選web開發相關依賴定義HelloController類&#xff0c;添加方法hello&#xff0c;并添加相關注釋運行測試 創建新的SpringBoot項目 幾個注意的點&#xff1a; Name&#xff1a;基本上不用管&#xff0c;會根據下面的Ar…

關于elementui的input的autocomplete的使用

項目中需要實現搜索框搜索時能自動提示可選項的功能&#xff0c;elementui的input組件有已經封裝好的el-autocomplete可以使用&#xff0c;但是在使用中發現一些問題&#xff0c;記錄一下 基礎使用 // html部分 <el-autocompletev-model"name":fetch-suggestion…

大數據課程I3——Kafka的消息流與索引機制

文章作者郵箱:yugongshiye@sina.cn 地址:廣東惠州 ▲ 本章節目的 ? 掌握Kafka的消息流處理; ? 掌握Kafka的索引機制; ? 掌握Kafka的消息系統語義; 一、Kafka消息流處理 1. Producer 寫入消息 流程說明: 1. producer 要向Kafka生產消息,需要先通過…

EditPlus連接Linux系統遠程操作文件

EditPlus是一套功能強大的文本編輯器&#xff01; 1.File ->FTP->FTP Settings&#xff1b; 2.Add->Description->FTP server->Username->Password->Subdirectory->Advanced Options 注意&#xff1a;這里的Subdirectory設置的是以后上傳文件的默認…

20230814讓惠普(HP)銳14 新AMD銳龍電腦不聯網進WIN11進系統

20230814讓惠普(HP)銳14 新AMD銳龍電腦不聯網進WIN11進系統 2023/8/14 17:19 win11系統無法跳過聯網 https://www.xpwin7.com/jiaocheng/28499.html Win11開機聯網跳過不了怎么辦&#xff1f;Win11開機聯網跳過不了解決方法 Win11開機聯網跳過不了怎么辦&#xff1f;Win11開機…