分支與迴圈結構

来源:https://www.cnblogs.com/yinshoucheng-golden/archive/2018/08/21/9514892.html
-Advertisement-
Play Games

分支與迴圈結構 if語句是實際生產工作中最重要且最常用的語句,所以,必須掌握牢固。 if條件句 if條件句語法 單分支結構 語法 if [ 條件 ] then 指令 fi 或 if [ 條件 ];then 指令 fi 條件表達式[ -f "$file1" ]&& echo 1,相當於下麵的if語句。... ...


分支與迴圈結構

if語句是實際生產工作中最重要且最常用的語句,所以,必須掌握牢固。

if條件句

if條件句語法

  • 單分支結構

語法

  1. if [ 條件 ]
  2.   then
  3.     指令
  4. fi
  5. if [ 條件 ];then
  6.     指令
  7. fi

條件表達式[ -f "$file1" ]&& echo 1,相當於下麵的if語句。

  1. if [ -f "$file1" ];then
  2.     echo 1
  3. fi
  • 雙分支結構
  1. if [ 條件 ]
  2.   then
  3.     指令集1
  4. else
  5.     指令集2
  6. fi

條件表達式[ -f "$file1" ]&& echo 1||echo 0,相當於雙分支if [ -f "$file1" ];then echo 1;else echo 0;fi。

  • 多分支結構
  1. if 條件
  2.   then
  3.     指令
  4. elif 條件
  5.   then
  6.     指令
  7. elif 條件
  8.   then
  9.     指令
  10.     ...
  11.   else
  12.     指令
  13. fi

單分支if條件句

開發shell腳本判斷系統剩餘記憶體的大小,如果低於100M就郵件報警給管理員,並加入系統定時任務每三分鐘執行一次檢查。

free -m|awk 'NR==2{print $4}'

  1. [root@lamp ~]# cat free_m.sh
  2. #!/bin/bash
  3.  
  4. FREE=`free -m|awk 'NR==3{print $4}'`
  5. if [ $FREE -lt 100 ]
  6.   then
  7.     echo "warning:The available memory $FREE."
  8.     exit 0
  9. fi
  10. echo "The available memory $FREE."

雙多分支if條件句

用if雙分支實現read讀入的方式比較兩個數的大小。

  1. [root@lamp ~]# cat c3.sh
  2. #!/bin/bash
  3. read -p "Pls input two nums: " num01 num02
  4. [ -z $num01 ]&&{
  5.   echo "the num01 you input must be int."
  6.   exit 2
  7. }
  8. [ -z $num02 ]&&{
  9.   echo "the num02 you input must be int."
  10.   exit 2
  11. }
  12. expr $num01 + $num02 + 1 &>/dev/null
  13. [ $? -ne 0 ]&&{
  14.   echo "the num you input must be int."
  15.   exit 2
  16. }
  17. if [ $num01 -lt $num02 ]
  18.   then
  19.     echo "$num01 < $num02."
  20. elif [ $num01 -gt $num02 ]
  21.   then
  22.     echo "$num01 > $num02."
  23.   else
  24.     echo "$num01 = $num02."
  25. fi

用if雙分支實現對nginx或mysql服務是否正常進行判斷,使用進程數、埠、url的方式判斷,如果進程沒起,把進程啟動。

web服務和資料庫(mysql)的監控方法。

1、埠監控

本地監控:netstat、ss、lsof

遠程監控:telnet、nmap、nc

telnet監控埠

  1. [root@lamp ~]# echo -e "\n"|telnet www.baidu.com 80|grep Connected|wc -l
  2. Connection closed by foreign host.
  3. 1

nmap監控埠

  1. [root@lamp ~]# nmap www.baidu.com -p 80|grep open|wc -l
  2. 1

nc監控埠

  1. [root@lamp ~]# nc -z 192.168.163.128 22|grep succeeded|wc -l
  2. 1

2、進程監控

本地監控:ps -ef|grep mysql|wc -l

3、wget、curl,http方式根據返回值或者返回內容判斷。

4、header(http),http方式根據狀態碼判斷。

5、資料庫特有通過mysql客戶端連接,根據返回值或者返回內容判斷。

  1. [root@lamp ~]# cat check_db.sh
  2. #!/bin/bash
  3. #local
  4. if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]
  5. #if [ `ps -ef|grep mysql|grep -v grep|wc -l` -gt 0 ]
  6. #if [ `netstat -lntup|grep mysqld|wc -l` -gt 0 ]
  7. #if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
  8.  
  9. #remote
  10. #if [ `nmap 192.168.1.123 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]
  11. #if [ `nc -w 2 192.168.1.123 3306 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ]
  12.   then
  13.     echo "Mysql is Running."
  14. else
  15.     echo "Mysql is Stopped."
  16.     /deta/mysql start
  17. fi

 

  1. [root@lamp ~]# cat check_web.sh
  2. #!/bin/bash
  3. if [ "`curl -I -s -o /dev/null -w "%{http_code}\n" http://192.168.1.123`" = "200" ]
  4. #if [ `curl -I http://192.168.1.123 2>/dev/null|head -1|egrep "200|302|301"|wc -l` -eq 1 ]
  5. #curl -s http://192.168.1.123 &>/dev/null
  6. #if [ $? -eq 0 ]
  7. #if [ "`curl -s http://192.168.1.123 &>/dev/null&&echo $?`" = "0" ]
  8. #if [ "`curl -s http://192.168.1.123`" = "bbs" ]
  9.   then
  10.     echo "httpd is running."
  11. else
  12.     echo "httpd is stopped."
  13. fi

 

通過傳參的方式往/etc/user.conf里添加用戶,具體要求如下:

1、命令用法:USAGE:sh adduser {-add|-del|-search} username

2、傳參要求:如果參數為-add,表示添加後面接的用戶名;如果參數為-del,表示刪除後面接的用戶名;如果參數為-search,表示查找後面接的用戶名。

3、如果有同名的用戶則不能添加,沒有對應用戶則無需刪除,查找到用戶以及沒有用戶時給出明確提示。

4、/etc/user.conf不能被所有外部用戶之間刪除或修改。

  1. [root@lamp ~]# cat user.sh
  2. #!/bin/bash
  3. ROOT_UID=0
  4.  
  5. if [ "$UID" -ne "$ROOT_UID" ]
  6.   then
  7.     echo "Mast be root to run this script."
  8.     exit 1
  9. fi
  10. if [ $# -ne 2 ]
  11.   then
  12.     echo "USAGE:sh $0 {-add|-del|-search} username."
  13.     exit 2
  14. fi
  15. check=$1
  16. name=$2
  17. if [ "$check" = "add" ]
  18.   then
  19.     result=`cat /etc/user.conf|grep -Fx "$name"`
  20.     [ -z $result ]&&{
  21.       echo "$name" >> /etc/user.conf
  22.       echo "user add "$name" is ok."
  23.       exit 0
  24.     }
  25.     echo "user $name is in."
  26.     exit 0
  27. elif [ "$check" = "del" ]
  28.   then
  29.     result=`cat /etc/user.conf|grep -Fx "$name"`
  30.     [ -z $result ]&&{
  31.       echo "user "$name" not find."
  32.       exit 0
  33.     }
  34.     sed -ri /^$name$/d /etc/user.conf
  35.     echo "user del "$name" is ok."
  36. elif [ "$check" = "search" ]
  37.   then
  38.     result=`cat /etc/user.conf|grep -Fx "$name"`
  39.     [ -z $result ]&&{
  40.       echo "user $name not find."
  41.       exit 0
  42.     }
  43.     echo $result
  44.     exit 0
  45. else
  46.     echo "USAGE:sh $0 {-add|-del|-search} username."
  47.     exit 1
  48. fi

 

獲取文件md5值,防篡改。

  1. [root@lamp ~]# find ./ -type f|xargs md5sum

將md5值寫入文件。

  1. [root@lamp ~]# find ./ -type f|xargs md5sum >/tmp/md5list

比較md5值。

  1. [root@lamp ~]# md5list -c /tmp/md5list

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Docker相信很多朋友都使用過,做微服務比虛擬機還好用。 需要安裝的一些東西 ffmpeg: dotnet: 預設全是latest最新即可,具體怎麼配置網上搜索一下即可。 調用用REST? 還是用RPC? 微服務之間的介面調用通常包含兩個部分,序列化和通信協議。常見的序列化協議包括json、xml ...
  • 今天回憶了之前看的《深入理解C#》這本書中的泛型章節,其中對泛型的可變性的理解。泛型可變性分兩種:協變和逆變。逆變也又稱為抗變。 怎麼理解這兩個名詞的意思: ①:協變即為在泛型介面類型中使用out標識的類型參數。協變的字面意思是“與變化的方向相同”②逆變那就是用in來標識的泛型介面類型的類型參數。逆 ...
  • 面向對象:用線性的思維。與面向過程相輔相成。在軟體開發過程中,巨集觀上,用面向對象來把握事物間複雜的關係,分析系統。微觀上,仍然使用面向過程。 “面向過程”是一種是事件為中心的編程思想。就是分析出解決問題所需的步驟,然後用函數把這寫步驟實現,並按順序調用。 ”面向對象“是以“對象”為中心的編程思想。 ...
  • /*直接複製在自己的js文件中就能使用*/ jQuery.extend({ createUploadIframe: function (id, uri) { //create frame var frameId = 'jUploadFrame' + id; if (window.ActiveXObj ...
  • 一、連接數據庫 1.定義連接數據庫的字元串 2.數據庫連接開啟、關閉 3.對數據庫連接進行優化 數據庫連接屬於稀缺資源的使用,使用完後必須立即關閉避免出現資源匱乏的情況。因此關閉數據庫連接應是強制的,可以通過兩種方式來確保數據庫資源使用完後立即釋放。 3.1 使用try...catch...fina ...
  • 1、值類型與引用類型區別 2、裝箱拆箱 裝箱:值類型轉換成引用類型。將值類型從棧上拷貝到堆上,將地址返回; 拆箱:引用類型轉換成值類型。將引用類型的數據拷貝到棧上。 3、JS遍歷 for語句:和c#一樣 in語句: .each: ...
  • CLR線程池並不會在CLR初始化時立即建立線程,而是在應用程式要創建線程來運行任務時,線程池才初始化一個線程。線程池初始化時是沒有線程的,線程池裡的線程的初始化與其他線程一樣,但是在完成任務以後,該線程不會自行銷毀,而是以掛起的狀態返回到線程池。直到應用程式再次向線程池發出請求時,線程池裡掛起的線程 ...
  • move命令: // 描述: 將一個或多個文件從一個目錄移動到另一個目錄。 // 語法: move [{/y | /-y}] [<Source>] [<Target>] // 參數: /y: 不提示確認是否要覆蓋現有目標文件。 /-y: 確認是否要覆蓋現有目標文件。(預設值) <source>: 指 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...