分支與迴圈結構

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...