Shell---控制流程

来源:https://www.cnblogs.com/sre-chan/archive/2023/03/23/17247478.html
-Advertisement-
Play Games

操作系統: RHEL7.x 或CentOS 7.x 最小化安裝 配置好固定的IP,能訪問互聯網 配置好yum源(yum repolist 可以查看yum源) 本地光碟 掛載光碟,開機自動掛載 vim + /etc/fstable /dev/sr0 /mnt iso9660 defaults 0 0 ...


操作系統:

RHEL7.x 或CentOS 7.x

  • 最小化安裝
  • 配置好固定的IP,能訪問互聯網
  • 配置好yum源(yum repolist 可以查看yum源)
    • 本地光碟
      • 掛載光碟,開機自動掛載
        • vim + /etc/fstable
        • /dev/sr0 /mnt iso9660 defaults 0 0
      • 創建掛載點目錄:
        • mkdir /media/cdrom
      • 掛載:mount -a
      • 配置yum源:
        • yum-config-manger --add-repo=file:/// media/cdrom
        • echo "gpgcheck = 0" >> /etc/yum.repos.d/media_cdrom.repo
    • EPEL
      • aliyun sohu 中科大 清華 網易

開發環境:vim

查看系統shell類型:

[root@template ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

查看當前預設shell:

[root@template ~]# echo $SHELL
/bin/bash

快速如何快速生成腳本開頭的版本版權註釋信息

[root@template ~]# cat ~/.vimrc
autocmd BufNewFile *.go,*.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"#########################")
call setline(3,"#File name:".expand("%"))
call setline(4,"#Version:v1.0")
call setline(5,"#Email:[email protected]")
call setline(6,"#Created time:".strftime("%F %T"))
call setline(7,"#Description:")
call setline(8,"#########################")
call setline(9,"")
endif
endfunc

修改Tab縮進

在/etc/vim/下有兩個文件,分別為vimrc 和vimrc.tiny

在vimrc文件中加入:set tabstop=4

流程式控制制與判斷練習:

1、ping主機測試,查看主機是否存活

[root@template chap04]# cat ping.sh
#!/bin/bash
#########################
#File name:ping.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-03-23 17:32:18
#Description:
#########################
read -p "please enter your host:" host
if ping -c2 $host &> /dev/null
then
        echo "$host is running"
else
        echo "$host is down"
fi

2、判斷一個用戶是否存在

[root@template chap04]# cat user.sh
#!/bin/bash
#########################
#File name:user.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-03-23 17:45:03
#Description:
#########################
read -p "please enter a username:" username
if id $username &> /dev/null
then
        echo "$username is exist"
else
        echo " $username is not exist "
fi

3、判斷當前內核主版本是否為3,且次版本是否大於10

[root@template chap04]# cat sys.sh
#!/bin/bash
#########################
#File name:sys.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-03-23 17:52:56
#Description:
main_version=`uname  -r | awk -F . '{print $1 }'`
minor_version=`uname -r | awk -F . '{print $2}'`
if [ "$main_version"  -eq 3 ] && [ "$minor_version" -ge 10 ]
  then
     echo "主版本是:$main_version 次版本是:$minor_version"
else
       echo "不滿足條件,此系統的主版本是:$main_version 次版本是:$minor_version"
fi

4、判斷vsftpd軟體包是否安裝,如果沒有則自動安裝

#!/bin/bash
#########################
#File name:isvsftp.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-03-23 18:05:56
#Description:
#########################
if rpm -qa | grep vsftpd &> /dev/null
then
        echo "vsftp is exist"
else
        echo "vsftp is not exist"
        read -p "please enter your choice:" choice
        if [ $choice -eq 1 ]
                then
                        yum install vsftpd -y &> /dev/null
        else
                echo " break and uninstall"
        fi
fi

# 測試結果:最初環境沒有安裝,選擇時隨機輸入,最後選擇安裝,最後一次測試檢查是否安裝成
[root@template chap04]# ./isvsftp.sh
vsftp is not exist
please enter your choice:2
 break and uninstall
[root@template chap04]# ./isvsftp.sh
vsftp is not exist
please enter your choice:1
[root@template chap04]# ./isvsftp.sh
vsftp is exist

5、判斷httpd是否運行

# 也不算完整:先檢測是否安裝htppd.service此軟體,註意centos7版本中自帶一個httpd-xxx的工具,所以在寫服務時最好加上httpd.service,程式流程:如果包存在,直接輸出active,如果不存在就選擇是否安裝
[root@template chap04]# cat httpd.sh
#!/bin/bash
#########################
#File name:httpd.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-03-23 18:20:59
#Description:
#########################
if rpm -qa |  grep httpd.service &> /dev/null
then
        echo "system  `systemctl is-active httpd`"
else
        echo "httpd is uninstall"
        read -p " please enter your choice : " choice
        if [ $choice -eq 1 ]
        then
                yum install httpd -y &> /dev/null
                systemctl restart httpd
        else
                echo " break and uninstall"
        fi
fi

6、判斷指定的主機是否能ping通,必須使用$1變數

[root@template chap04]# cat ping2.sh
#!/bin/bash
#########################
#File name:ping2.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-03-23 18:55:21
#Description:
#########################
if ping -c1 $1 &> /dev/null
then
        echo "$1 is runing"
else
        echo "$1 is dead"
fi

[root@template chap04]# ./ping2.sh  192.168.11.10
192.168.11.10 is runing
[root@template chap04]# ./ping2.sh  baidu.com
baidu.com is runing

7、報警腳本,要求如下

根分區剩餘空間小於20%
記憶體已用空間大於80%
向用戶alice發送告警郵件
配合crond每5分鐘檢查一次

yum install mailx -y &> /dev/null
#!/bin/bash
total_mem=$(free -m | tr -s " " | cut -d " " -f 2 | head -2 | tail -1)
used_mem=$(free -m | tr -s " " | cut -d " " -f 3 | head -2 | tail -1)
used_memper=$(echo "scale=2;$used_mem/$total_mem*100" | bc)
total_root=$(df | grep "/"$ |tr -s " " | cut -d " " -f 2)
used_root=$(df | grep "/"$ |tr -s " " | cut -d " " -f 4)
free_rootper=$(echo "scale=2;$used_root/$total_root*100" | bc)
v1=$(echo "used_memper > 80" | bc)
v2=$(echo "free_rootper < 20" | bc)
if [ $v1 -eq 1 ];then
  echo "記憶體已用空間大於80%" | mail -s "警告信息" alice
elif [ $v2 -eq 1 ];then
  echo "根分區剩餘空間小於20%" | mail -s "警告信息" alice
else
  echo "正常使用"
fi

8、判斷用戶輸入的是否是數字,如果是數字判斷該數字是否大於10

[root@template chap04]# cat num.sh
#!/bin/bash
read -p "please input a num:" num
if echo  " $num" | grep " [ 0-9 ]" &> /dev/null
then
        if [ $num -gt 10 ]
        then
                echo "$num is more than 10"
        else
                echo "$num is less than 10"

        fi
else
        echo "input a num!!!"
fi

9、計算用戶輸入的任意兩個整數的和、差、乘積、商、餘數

a=$1
b=$2
if [ $# -eq 2 ]
then
  if [[ "$a" =~ ^[0-9]*$ && "$b" =~ ^[0-9]*$ ]]
  then
    echo "a、b Is an integer"
    echo a+b=$((a+b))
    echo a-b=$((a-b))
    echo a*b=$((a*b))
    echo a/b=$((a/b))
    echo a%b=$((a%b))
  else
    echo "a,b Is  not an integer"
    exit 0
  fi
else
  echo "The number of parameters is 2"
  exit 0
fi
作者:ChAn 出處:http://www.cnblogs.com/sre-chan/

-------------------------------------------

個性簽名:今天做了別人不想做的事,明天你就做得到別人做不到的事,嘗試你都不敢,你拿什麼贏!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!


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

-Advertisement-
Play Games
更多相關文章
  • ​1 導庫 import re 2 使用模板 re_pattern = re.compile(pattern, flags=0) result = re.findall(re_pattern,string) 3 說明 參數 描述 pattern 匹配的正則表達式,如 r'abc' 可用來匹配abc ...
  • Salt安裝部署 一:salt簡介 ​ 早期運維人員會根據自己的生產環境來寫特定腳本完成大量重覆性工作,這些腳本複雜且難以維護。系統管理員面臨的問題主要是1、系統配置管理,2、遠程執行命令,因此誕生了很多開源軟體,系統維護方面有fabric、puppet、chef、ansible、saltstack ...
  • """ 需求1:會員卡充值 金額只能輸入數字和浮點數、不能輸入負數 充值100(包含100)金額提示:成功充值N元,恭喜你成為普通會員 充值100.01(包含100.01)至200金額提示:成功充值N元,恭喜你成為鉑金會員 充值200.01(包含100.01)至300金額提示:成功充值N元,恭喜你成 ...
  • 本人是一家小公司的技術總監,工作包括寫市場分析、工作彙報、產品推廣文案及代碼開發等。在ChatGPT推出之後本人一直在工作中使用,在頭腦風暴、大綱生成、語句優化、代碼生成方面很有效果。但ChatGPT在一些常識性生成方面並不理想,比如某個省有哪些旅游景點、三角數學公式推算等,大家使用中一定要註意並仔 ...
  • .NET Core WebApi介面ip限流實踐 前言 之前一直想實現介面限流,但一直沒去實現,然後剛好看到一篇文章是基於AspNetCoreRateLimit 組件的限流策略。這個組件不做多的介紹,想瞭解詳情可以去訪問官方網址或者原文地址,地址在文章底部,本文只講實現。 實現介面限流步驟 導包 第 ...
  • 當前的Winform分頁控制項中,當前導出的數據一般使用Excel來處理,Excel的文檔可以用於後期的數據展示或者批量導入做準備,因此是比較好的輸入輸出格式。但是有框架的使用客戶希望分頁控制項能夠直接導出PDF,雖然Excel也可以直接轉換為PDF,不過直接導出PDF的處理肯定更加方便直觀。因此整理了... ...
  • 1. 核心關註點 1.1. 開發軟體的原因 2. 切麵關註點 2.1. 所有的代碼領域都需要處理相關的問題 3. 結構化模式 3.1. 裝飾器模式 3.1.1. 可以在現有對象上添加新的功能,而不改變其結構 3.2. 代理模式 3.2.1. 所提供的對象可以替代客戶端使用的實際服務對象 4. 使用P ...
  • 使用lvs+keepalived架構架構實現後端web伺服器(該web伺服器要求搭建wordpress博客站)的負載均衡 最終客戶端訪問功能變數名稱 我的名字.wordpress.cn 能夠訪問搭建的博客站 ,達到負載均衡的目的 IP 主機名 角色 192.168.26.101 rs1 後端真實伺服器/ng ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...