<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux Shell 腳本入門到實(shí)戰(zhàn)詳解

          共 28391字,需瀏覽 57分鐘

           ·

          2022-07-31 08:30

          在公眾號(hào)后臺(tái)回復(fù):JGNB,可獲取杰哥原創(chuàng)的 PDF 手冊(cè)。

          一、shell 入門簡(jiǎn)介

          1.1 什么是 shell

          shell 腳本簡(jiǎn)介

          什么是shell

          網(wǎng)上有很多 shell 的概念介紹,其實(shí)都很官方化,如果你對(duì) linux 命令很熟悉,那么編寫 shell 就不是一個(gè)難事,shell 本質(zhì)上是 linux 命令,一條一條命令組合在一起,實(shí)現(xiàn)某一個(gè)目的,就變成了 shell 腳本。它從一定程度上 減輕了工作量,提高了工作效率。

          官方化的shell 介紹

          Shell 通過(guò)提示您輸入,向操作系統(tǒng)解釋該輸入,然后處理來(lái)自操作系統(tǒng)的任何結(jié)果輸出,簡(jiǎn)單來(lái)說(shuō)Shell就是一個(gè)用戶跟操作系統(tǒng)之間的一個(gè)命令解釋器。

          常見(jiàn)的 shell 有哪些

          • Bourne Shell(/usr/bin/sh或/bin/sh)

          • Bourne Again Shell(/bin/bash)

          • C Shell(/usr/bin/csh)

          • K Shell(/usr/bin/ksh)

          • Shell for Root(/sbin/sh)

          最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免費(fèi),在日常工作中被廣泛使用,也是大多數(shù)Linux操作系統(tǒng)默認(rèn)的Shell環(huán)境。

          1.2 shell 編程注意事項(xiàng)

          • shell 編程有哪些注意事項(xiàng)

          • shell 命名:Shell 腳本名稱命名一般為英文、大寫、小寫,后綴以. sh 結(jié)尾

          • 不能使用特殊符號(hào)、空格

          • 見(jiàn)聞之意,名稱要寫的一眼可以看出功能

          • shell 編程 首行需要 #!/bin/bash 開頭

          • shell 腳本 變量 不能以 數(shù)字、特殊符號(hào)開頭,可以使用下劃線—, 但不能 用破折號(hào) -

          1.3 第一個(gè) shell 腳本 hello world

          創(chuàng)建一個(gè)偉大編程項(xiàng)目 — Hello World

          # 創(chuàng)建一個(gè)Helloword.sh 文件
          [root@aly_server01~]# touch Helloword.sh

          # 編輯Helloword.sh 文件
          [root@aly_server01~]# vim Helloword.sh
          [root@aly_server01~]# cat Helloword.sh 
          #!/bin/bash
          # This is ower first shell
          # by author rivers 2021.09
          echo "hello world"
          [root@aly_server01~]
          [root@aly_server01~]# ll Helloword.sh 
          -rw-r--r-- 1 root root 85 Sep 20 22:26 Helloword.sh

          # 賦予執(zhí)行權(quán)限
          [root@aly_server01~]# chmod o+x Helloword.sh 

          # 運(yùn)行helloword.sh 腳本
          [root@aly_server01~]# ./Helloword.sh 
          hello world

          二、shell 環(huán)境變量講解

          2.1 shell 變量詳解

          環(huán)境變量介紹

          什么是變量

          很多人可能會(huì)說(shuō),可以變化的量就是變量。但是發(fā)現(xiàn)很多漢語(yǔ)意思很強(qiáng)大,你看的懂的字,卻不一定可以理解它的意思。這里你可以理解為 a = 1,同時(shí)還可以 a =2、a = 3 ,不同的值都可以復(fù)制給同一個(gè) 變量 a 。

          常見(jiàn)的3種變量

          Shell編程中變量分為三種,分別是系統(tǒng)變量、環(huán)境變量和用戶變量,Shell變量名在定義時(shí),首個(gè)字符必須為字母(a-z,A-Z),不能以數(shù)字開頭,中間不能有空格,可以使用下劃線(_),不能使用(-),也不能使用標(biāo)點(diǎn)符號(hào)等。

          簡(jiǎn)單的變量介紹

          [root@keeplived_server~]# a=18
          [root@keeplived_server~]# echo $a
          18

          2.2 shell 系統(tǒng)變量 介紹

          系統(tǒng)變量

          # Shell常見(jiàn)的變量之一系統(tǒng)變量,主要是用于對(duì)參數(shù)判斷和命令返回值判斷時(shí)使用,系統(tǒng)變量詳解如下:

          $
          0   當(dāng)前腳本的名稱;
          $n   當(dāng)前腳本的第n個(gè)參數(shù),n=1,2,…9;
          $*   當(dāng)前腳本的所有參數(shù)(不包括程序本身);
          $#   當(dāng)前腳本的參數(shù)個(gè)數(shù)(不包括程序本身);
          $?   令或程序執(zhí)行完后的狀態(tài),返回0表示執(zhí)行成功;
          $$   程序本身的PID號(hào)。

          2.3 shell 環(huán)境變量 介紹

          2.3.1 常見(jiàn)的系統(tǒng)環(huán)境變量

          環(huán)境變量介紹

          #Shell常見(jiàn)的變量之二環(huán)境變量,主要是在程序運(yùn)行時(shí)需要設(shè)置,環(huán)境變量詳解如下:

          PATH    命令所示路徑,以冒號(hào)為分割;
          HOME    打印用戶家目錄;
          SHELL   顯示當(dāng)前Shell類型;
          USER    打印當(dāng)前用戶名;
          ID      打印當(dāng)前用戶id信息;
          PWD     顯示當(dāng)前所在路徑;
          TERM    打印當(dāng)前終端類型;
          HOSTNAME    顯示當(dāng)前主機(jī)名;
          PS1         定義主機(jī)命令提示符的;
          HISTSIZE    歷史命令大小,可通過(guò) HISTTIMEFORMAT 變量設(shè)置命令執(zhí)行時(shí)間;
          RANDOM      隨機(jī)生成一個(gè) 0 至 32767 的整數(shù);
          HOSTNAME    主機(jī)名

          2.4 shell 用戶環(huán)境變量 介紹

          2.4.1 自定義 shell 環(huán)境變量

          用戶自定義變量

          # 常見(jiàn)的變量之三用戶變量,用戶變量又稱為局部變量,主要用在Shell腳本內(nèi)部或者臨時(shí)局部使用,系統(tǒng)變量詳解如下:
          a=rivers                       自定義變量A;
          Httpd_sort=httpd-2.4.6-97.tar  自定義變量N_SOFT;
          BACK_DIR=/data/backup/         自定義變量BACK_DIR;
          IPaddress=10.0.0.1             自定義變量IP1;

          2.4.2 echo 打印菜單欄

          使用 echo 打印菜單欄,顯示 http-2.4 安裝過(guò)程

          # echo 打印httpd-2.4安裝步驟
          [root@web-server01~]# touch httpd_2.4_install.sh

          # 賦予執(zhí)行權(quán)限
          [root@web-server01~]# chmod o+x httpd_2.4_install.sh
          [root@web-server01~]# ./httpd_2.4_install.sh

          2.4.3 shell 中彩色輸出 helloworld

          echo -e 擴(kuò)展

          #!/bin/bash
          # This is echo color shell
          # by author rivers 2021.09-23
          # 字體顏色
          for i in {31..37}; do
          echo -e "\033[$i;40mHello world!\033[0m"
          done
          # 背景顏色
          for i in {41..47}; do
          echo -e "\033[47;${i}mHello world!\033[0m"
          done
          # 顯示方式
          for i in {1..8}; do
          echo -e "\033[$i;31;40mHello world!\033[0m"
          done

          三、shell 編程流程控制語(yǔ)句

          3.1 if 條件語(yǔ)句介紹

          3.1.1 常用的單 / 雙分支

          if 條件語(yǔ)句

          # If條件判斷語(yǔ)句,通常以if開頭,fi結(jié)尾。也可加入else或者elif進(jìn)行多條件的判斷

          # 單分支語(yǔ)句 ---比較大小
           if (條件表達(dá)式);then
            語(yǔ)句1
           fi

          # 雙分支if 語(yǔ)句
           if (表達(dá)式)
            語(yǔ)句1
           else
            語(yǔ)句2
           fi

          # 多支條件語(yǔ)句 ---判斷成績(jī)
           if (表達(dá)式)
            語(yǔ)句1
           elif
            語(yǔ)句2
           elif
            語(yǔ)句2
           fi

          3.1.2 if 常見(jiàn)判斷邏輯運(yùn)算符詳解

          常見(jiàn)邏輯判斷運(yùn)算符

          -f   判斷文件是否存在 eg: if [ -f filename ];
          -d   判斷目錄是否存在 eg: if [ -d dir     ];
          -eq  等于,應(yīng)用于整型比較 equal;
          -ne  不等于,應(yīng)用于整型比較 not equal;
          -lt  小于,應(yīng)用于整型比較 letter;
          -gt  大于,應(yīng)用于整型比較 greater;
          -le  小于或等于,應(yīng)用于整型比較;
          -ge  大于或等于,應(yīng)用于整型比較;
          -a  雙方都成立(and) 邏輯表達(dá)式 –a 邏輯表達(dá)式;
          -o  單方成立(or) 邏輯表達(dá)式 –o 邏輯表達(dá)式;
          -z  空字符串;
          -x      是否具有可執(zhí)行權(quán)限
          ||      單方成立;
          &&      雙方都成立表達(dá)式。

          3.1.3 使用單分支語(yǔ)句判斷 crond 進(jìn)程是否在運(yùn)行—案例

          判斷 crond 服務(wù)是否運(yùn)行

          #!/bin/bash
          # this is check crond
          # by author rivers on 2021-9.23

          # 定義一個(gè)變量名
          name=crond
          num=$(ps -ef|grep $name|grep -vc grep)
          if [ $num -eq 1 ];then
              echo "$num running!"
          else
              echo "$num is not running!"
          fi

          3.1.4 判斷系統(tǒng)目錄是否存在 —案例

          判斷系統(tǒng)目錄是否存在

          #!/bin/bash
          # this is check directory 
          # by author rivers on 2021-9.27 
           if  [  !  -d  /data/rivers  -a !  -d  /tmp/rivers  ];then
           mkdir  -p  /data/rivers  f
           i

          3.1.5 多個(gè)條件判斷學(xué)生分?jǐn)?shù)等級(jí) — 案例

          判斷學(xué)生成績(jī)等級(jí)

          # if 語(yǔ)句可以直接對(duì)命令狀態(tài)進(jìn)行判斷,就省去了獲取$?這一步!
            # 如果第一個(gè)條件符合就不再向下匹配
          #!/bin/bash
            # this check grade shell
            # by author rivers on 2021-09-27

            grade=$1
            if [ $grade -gt 90 ];then
              echo "Is's very good!"
            elif [ $grade -gt 70 ];then
              echo "Is's is good!"

            elif [ $grade -ge 60 ];then
              echo "pass"

            else
              echo "no pass"
            fi

          3.2 for 循環(huán)語(yǔ)句介紹

          for 循環(huán)語(yǔ)句

          #格式:for name [ [ in [ word ... ] ] ; ] do list ; done
            for 變量名 in 取值列表; do
              語(yǔ)句 1
            done

          3.2.1 檢查同一局域網(wǎng) 多臺(tái)主機(jī)是否存活

          檢查多臺(tái)主機(jī)存活情況

          #!/bin/bash
          # check hosts is on/Off
          # by rivers on 20219-23

          Network=$1
          for Host in $(seq 1 254)
          do
          ping -c 1 $Network.$Host > /dev/null && result=0 || result=1

          if [ "$result" == 0 ];then
            echo -e "\033[32;1m$Network.$Host is up \033[0m"
            echo "$Network.$Host" >> /tmp/up.txt

          else
            echo -e "\033[;31m$Network.$Host is down \033[0m"
            echo "$Network.$Host" >> /tmp/down.txt
          fi
          done

          3.3 while 循環(huán)語(yǔ)句介紹

          while 循環(huán)語(yǔ)句

          # While循環(huán)語(yǔ)句與for循環(huán)功能類似,主要用于對(duì)某個(gè)數(shù)據(jù)域進(jìn)行循環(huán)讀取、對(duì)文件進(jìn)行遍歷,通常用于需要循環(huán)某個(gè)文件或者列表,滿足循環(huán)條件會(huì)一直循環(huán),不滿足則退出循環(huán),其語(yǔ)法格式以whiledo開頭,done結(jié)尾與 
          #while 關(guān)聯(lián)的還有一個(gè) until 語(yǔ)句,它與 while 不同之處在于,是當(dāng)條件表達(dá)式為 false 時(shí)才循環(huán),實(shí)際使用中比較少,這里不再講解。

          while  (表達(dá)式)
          do
            語(yǔ)句1
          done

          break 和 continue 語(yǔ)句

          # break 和 continue 語(yǔ)句
            break 是終止循環(huán)。
            continue 是跳出當(dāng)前循環(huán)。
          #示例 1:在死循環(huán)中,滿足條件終止循環(huán)
          while truedo
            let N++
            if [ $N -eq 5 ]; then
              break
          fi
            echo $N
          done
          輸出:1 2 3 4

          #示例 2:舉例子說(shuō)明 continue 用法
          N=0
          while [ $N -lt 5 ]; do
            let N++
          if [ $N -eq 3 ]; then
            continue
          fi
            echo $N
          done

          輸出:1 2 4

          # 打印 1-100 數(shù)字
          i=0
          while ((i<=100))
          do
                  echo  $i
                  i=`expr $i + 1`
          done

          3.3.1 While 循環(huán)求 1-100 的總和 —案例

          求 1-100 的總和

          #!/bin/bash
          # by author rivers on 2021-9-27
          j=0
          i=1
          while ((i<=100))
          do
               j=`expr $i + $j`
               ((i++))
          done
          echo $j

          3.3.2 每 10 秒循環(huán)判斷一次 hbs 用戶是否登錄系統(tǒng) —案例

          每 10 秒 循環(huán)判斷系統(tǒng)登錄

          [root@web-server01~/script]# vim login.sh 
          #!/bin/bash
          #Check File to change. 
          #By author rivers 2021-9-27
          USERS="hbs"
          while true
          do
                  echo "The Time is `date +%F-%T`"
                  sleep 10
                  NUM=`who|grep "$USERS"|wc -l`
                  if [[ $NUM -ge 1 ]];then
                          echo "The $USERS is login in system."
                  fi
          done

          3.4 case 選擇語(yǔ)句介紹

          case 選擇語(yǔ)句

          #Case選擇語(yǔ)句,主要用于對(duì)多個(gè)選擇條件進(jìn)行匹配輸出,與if elif語(yǔ)句結(jié)構(gòu)類似,通常用于腳本傳遞輸入?yún)?shù),打印出輸出結(jié)果及內(nèi)容,其語(yǔ)法格式以Case…in開頭,esac結(jié)尾。語(yǔ)法格式如下:
          case 模式名  in
            模式 1)
              命令
              ;;
            模式 2)
              命令
              ;;
          *)
          不符合以上模式執(zhí)行的命令
          esac
          # 每個(gè)模式必須以右括號(hào)結(jié)束,命令結(jié)尾以雙分號(hào)結(jié)束。

          3.4.1 使用 case 編寫一個(gè) httpd 服務(wù)啟動(dòng)腳本

          編寫 http 服務(wù)啟動(dòng)腳本

          [root@web-server01~/script]# vim httpd_start.sh 
          # check http server start|stop|starus
          # by author rivers on 2021-9-27
          while true
          do
              echo -e "
              \033[31m start \033[0m
              \033[32m stop \033[0m 
              \033[33m status \033[0m
              \033[34m quit \033[0m 
          "

          read -p "請(qǐng)輸入你的選擇start|stop|quit:" char
          case $char in
          start)
              systemctl start httpd && echo "httpd服務(wù)已經(jīng)開啟" || echo "開啟失敗"
          ;;
          stop)
              systemctl stop httpd && echo "httpd服務(wù)已經(jīng)關(guān)閉" || echo "關(guān)閉失敗"
          ;;
          restart)
              systemctl restart httpd && echo "httpd服務(wù)已經(jīng)重啟" || echo "重啟失敗
          "

          ;;
          status)
              systemctl status httpd && echo -e "
                  httpd 的服務(wù)狀態(tài)

          ;;
          quit)

          3.5 select 選擇語(yǔ)句介紹

          select 選擇語(yǔ)句

          #select 是一個(gè)類似于 for 循環(huán)的語(yǔ)句
          #Select語(yǔ)句一般用于選擇,常用于選擇菜單的創(chuàng)建,可以配合PS3來(lái)做打印菜單的輸出信息,其語(yǔ)法格式以select…in do開頭,done結(jié)尾:

          select i in (表達(dá)式) 
          do
          語(yǔ)句
          done

          # 選擇mysql 版本
          #!/bin/bash
          # by author rivers on 2021-9-27
          PS3="Select a number: "
          while truedo
          select mysql_version in 5.1 5.6 quit;
           do
            case $mysql_version in
            5.1)
              echo "mysql 5.1"
                break
                ;;
            5.6)
              echo "mysql 5.6"
                 break
                 ;;
            quit)
              exit
              ;;
            *)
              echo "Input error, Please enter again!"
                break
          esac
           done
          done

          3.5.1 使用 select 打印 lnmp 菜單欄 —案例

          打印 lnmp 選擇菜單

          #!/bin/bash
          #by author rivers on 2021-9-27
          PS3="Please enter you select install menu:"
          select i in http php mysql quit
          do
          case $i in
                  http)
                  echo -e "
                          \033[31m Test Httpd \033[0m"
           
                  ;;
                  php)
                  echo  -e "\033[32m Test PHP\033[0m"
                  ;;
                  mysql)
                  echo -e "\033[33m Test MySQL.\033[0m"
                  ;;
                  quit)
                  echo -e "\033[32m The System exit.\033[0m"
                  exit
          esac
          done

          3.6 shell 函數(shù)、數(shù)組 編程 實(shí)戰(zhàn)

          函數(shù)

          # Shell允許將一組命令集或語(yǔ)句形成一個(gè)可用塊,這些塊稱為Shell函數(shù),Shell函數(shù)的用于在于只需定義一次,后期隨時(shí)使用即可,無(wú)需在Shell腳本中添加重復(fù)的語(yǔ)句塊,其語(yǔ)法格式以function name(){開頭,以}結(jié)尾。

          # Shell編程函數(shù)默認(rèn)不能將參數(shù)傳入()內(nèi)部,Shell函數(shù)參數(shù)傳遞在調(diào)用函數(shù)名稱傳遞,例如name args1 args2。

          # 函數(shù)語(yǔ)法
          func() {
          command1
          command1
          ……
          }
          fun  # 直接調(diào)用函數(shù)名
          # Shell 函數(shù)很簡(jiǎn)單,函數(shù)名后跟雙括號(hào),再跟雙大括號(hào)。通過(guò)函數(shù)名直接調(diào)用,不加小括號(hào)。
          #!/bin/bash
          func() {
          VAR=$((1+1))
          return $VAR
          echo "This is a function."
          }
          func
          echo $?
          # bash test.sh 
          2

          數(shù)組

          # 數(shù)組是相同類型的元素按一定順序排列的集合。
          格式:array=(元素 1 元素 2 元素 3 ...)
          用小括號(hào)初始化數(shù)組,元素之間用空格分隔。
           定義方法 1:初始化數(shù)組 array=(a b c)
           定義方法 2:新建數(shù)組并添加元素 array[下標(biāo)]=元素
           定義方法 3:將命令輸出作為數(shù)組元素array=($(command))

          3.6.1 定義一個(gè) httpd 安裝的函數(shù) —案例

          創(chuàng)建 apache 軟件安裝函數(shù)

          [root@web-server01~/script]# vim xx.sh 
          #!/bin/bash
          #auto install apache
          #By author rivers 2021-09-27 
          #Httpd define path variable
          FILES=httpd-2.2.31.tar.bz2
          LES_DIR=httpd-2.2.31
          URL=http://mirrors.cnnic.cn/apache/httpd/
          PREFIX=/usr/local/apache2/
          function Apache_install ()
          {
          #Install httpd web server 
          if [[ "$1" -eq "1" ]];then
                  wget -c $URL/$FILES &&  tar -jxvf $FILES && cd $FILES_DIR &&./configure
                  if [ $? -eq 0 ];then
                          make && make install
                          echo -e "\n\033[32m--------------------------------------------
                          echo -e "
          \033[32mThe $FILES_DIR Server Install Success !\033[0m
                  else
                          echo -e "\033[32mThe $FILES_DIR Make or Make install ERROR,Plea
                          exit 0
                  fi
          fi
          }
          Apache_install 1
          # 調(diào)用函數(shù),傳參為1

          3.6.2 遍歷數(shù)組元素 — 案例

          遍歷數(shù)組元素

          #方法 1:
          #!/bin/bash
          IP=(10.0.0.1 10.0.0.2 10.0.0.3)
          for ((i=0;i<${#IP[*]};i++)); do
          echo ${IP[$i]}
          done
          # bash test.sh
          10.0.0.1
          10.0.0.2
          10.0.0.3

          #方法 2:
          #!/bin/bash
          IP=(10.0.0.1 10.0.0.2 10.0.0.3)
          for   IP   in ${IP[*]}do
          echo $IP
          done

          四、shell 編程實(shí)戰(zhàn) 案例

          4.1 shell 腳本實(shí)戰(zhàn)之 系統(tǒng)備份腳本 —案例

          Tar 工具全備、增量備份網(wǎng)站,Shell 腳本實(shí)現(xiàn)自動(dòng)打包備份

          #!/bin/bash
          #Auto Backup Linux System Files
          #by author rivers on 2021-09-28

          SOURCE_DIR=(
              $*
          )
          TARGET_DIR=/data/backup/
          YEAR=`date +%Y`
          MONTH=`date +%m`
          DAY=`date +%d`
          WEEK=`date +%u`
          A_NAME=`date +%H%M`
          FILES=system_backup.tgz
          CODE=$?
          if
              [ -z "$*" ];then
              echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n--------------------------------------------\n\nUsage: { $0 /boot /etc}\033[0m"
              exit
          fi
          #Determine Whether the Target Directory Exists
          if
              [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then
              mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY
              echo -e "\033[32mThe $TARGET_DIR Created Successfully !\033[0m"
          fi
          #EXEC Full_Backup Function Command
          Full_Backup()
          {
          if
              [ "$WEEK" -eq "7" ];then
              rm -rf $TARGET_DIR/snapshot
              cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]}
              [ "$CODE" == "0" ]&&echo -e  "--------------------------------------------\n\033[32mThese Full_Backup System Files Backup Successfully !\033[0m"
          fi
          }
          #Perform incremental BACKUP Function Command
          Add_Backup()
          {
             if
                  [ $WEEK -ne "7" ];then
                  cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $A_NAME$FILES ${SOURCE_DIR[@]}
                  [ "$CODE" == "0" ]&&echo -e  "-----------------------------------------\n\033[32mThese Add_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup Successfully !\033[0m"
             fi
          }
          sleep 3 
          Full_Backup;Add_Backup

          4.2 shell 腳本 實(shí)戰(zhàn) 之收集系統(tǒng)信息 —案例

          Shell 腳本實(shí)現(xiàn)服務(wù)器信息自動(dòng)收集

          cat <<EOF
          ++++++++++++++++++++++++++++++++++++++++++++++
          ++++++++Welcome to use system Collect+++++++++
          ++++++++++++++++++++++++++++++++++++++++++++++
          EOF
          ip_info=`ifconfig |grep "Bcast"|tail -1 |awk '{print $2}'|cut -d: -f 2`
          cpu_info1=`cat /proc/cpuinfo |grep 'model name'|tail -1 |awk -F: '{print $2}'|sed 's/^ //g'|awk '{print $1,$3,$4,$NF}'`
          cpu_info2=`cat /proc/cpuinfo |grep "physical id"|sort |uniq -c|wc -l`
          serv_info=`hostname |tail -1`
          disk_info=`fdisk -l|grep "Disk"|grep -v "identifier"|awk '{print $2,$3,$4}'|sed 's/,//g'`
          mem_info=`free -m |grep "Mem"|awk '{print "Total",$1,$2"M"}'`
          load_info=`uptime |awk '{print "Current Load: "$(NF-2)}'|sed 's/\,//g'`
          mark_info='BeiJing_IDC'
          echo -e "\033[32m-------------------------------------------\033[1m"
          echo IPADDR:${ip_info}
          echo HOSTNAME:$serv_info
          echo CPU_INFO:${cpu_info1} X${cpu_info2}
          echo DISK_INFO:$disk_info
          echo MEM_INFO:$mem_info
          echo LOAD_INFO:$load_info
          echo -e "\033[32m-------------------------------------------\033[0m"
          echo -e -n "\033[36mYou want to write the data to the databases? \033[1m" ;read ensure

          if      [ "$ensure" == "yes" -o "$ensure" == "y" -o "$ensure" == "Y" ];then
                  echo "--------------------------------------------"
                  echo -e  '\033[31mmysql -uaudit -p123456 -D audit -e ''' "insert into audit_system values('','${ip_info}','$serv_info','${
          cpu_info1} X${cpu_info2}','$disk_info','$mem_info','$load_info','$mark_info')"
           ''' \033[0m '
                  mysql -uroot -p123456 -D test -e "insert into audit_system values('','${ip_info}','$serv_info','${cpu_info1} X${cpu_info2}
          ','$disk_info','$mem_info','$load_info','$mark_info')"

          else
                  echo "Please wait,exit......"
                  exit
          fi

          4.3 shell 腳本實(shí)戰(zhàn) 之 一鍵部署 lnmp 架構(gòu) — 案例

          批量部署 lnmp 架構(gòu)

          [root@web-server01~/script]# vim lnmp.sh 
          #!/bin/bash
          #install lnmp
          #by author rivers on 2021-9-28

          # nginx 環(huán)境準(zhǔn)備
          Nginx_url=https://nginx.org/download/nginx-1.20.1.tar.gz
          Nginx_prefix=/usr/local/nginx

          # mysql 環(huán)境準(zhǔn)備
          Mysql_version=mysql-5.5.20.tar.gz
          Mysql_dir=mysql-5.5.20
          Mysql_url=https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.20.tar.gz
          Mysql_prefix=/usr/local/mysql/

          # php 環(huán)境準(zhǔn)備
          Php_version=php-7.2.10.tar.gz
          Php_prefix=/usr/local/php-7.2.10/


          function nginx_install(){

          if [[ "$1" -eq "1" ]];then
                  if [ $? -eq 0 ];then
                          make && make install
                  fi

          fi
          }



          function mysql_install(){
          if [[ "$1" -eq "2" ]];then
          -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
          -DMYSQL_DATADIR=/data/mysql \
          -DSYSCONFDIR=/etc \
          -DMYSQL_USER=mysql \
          -DMYSQL_TCP_PORT=3306 \
          -DWITH_XTRADB_STORAGE_ENGINE=1 \
          -DWITH_INNOBASE_STORAGE_ENGINE=1 \
          -DWITH_PARTITION_STORAGE_ENGINE=1 \
          -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
          -DWITH_MYISAM_STORAGE_ENGINE=1 \
          -DWITH_READLINE=1 \
          -DENABLED_LOCAL_INFILE=1 \
          -DWITH_EXTRA_CHARSETS=1 \
          -DDEFAULT_CHARSET=utf8 \
          -DDEFAULT_COLLATION=utf8_general_ci \
          -DEXTRA_CHARSETS=all \
                          echo -e "\033[32mThe $Mysql_dir Server Install Success !\033[0m"
                  else
                          echo -e "\033[32mThe $Mysql_dir Make or Make install ERROR,Please Check......"
                          exit 0
          fi
          /bin/cp support-files/my-small.cnf  /etc/my.cnf
          /bin/cp support-files/mysql.server /etc/init.d/mysqld
          chmod +x /etc/init.d/mysqld
          chkconfig --add mysqld
          chkconfig mysqld on
          fi
          }


          function php_install(){
          if [[ "$1" -eq "3" ]];then
                  if [ $? -eq 0 ];then
                          make ZEND_EXTRA_LIBS='-liconv' && make install
          if [[ "$1" -eq "3" ]];then
           wget $Php_url && tar xf $Php_version && cd $Php_dir && yum install   bxml2* bzip2* libcurl*  libjpeg* libpng* freetype* gmp* libm
          crypt* readline* libxslt* -y && ./configure --prefix=$Php_prefix --disable-fileinfo --enable-fpm --with-config-file-path=/etc --wi
            -config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc --with-jpeg-dir --w
          ith-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --enable-
          mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/var/lib/mysql/mysql.sock --without-pear --enable-bcmath
                  if [ $? -eq 0 ];then
                          make ZEND_EXTRA_LIBS='-liconv' && make install
                          echo -e "\n\033[32m-----------------------------------------------\033[0m"
                          echo -e "\033[32mThe $Php_version Server Install Success !\033[0m"
                  else
                          echo -e "\033[32mThe $Php_version Make or Make install ERROR,Please Check......"
                          exit 0
                  fi
          fi
          }


          PS3="Please enter you select install menu:"
          select i in nginx mysql php quit
          do
          "lnmp.sh" 113L, 3516C written                                                                                   
          [root@web-server01~/script]# vim lnmp.sh 
          chkconfig --add mysqld
          chkconfig mysqld on
          fi
          }


          function php_install(){
          if [[ "$1" -eq "3" ]];then
                  if [ $? -eq 0 ];then
                          make ZEND_EXTRA_LIBS='-liconv' && make install
                          echo -e "\n\033[32m-----------------------------------------------\033[0m"
                          echo -e "\033[32mThe $Php_version Server Install Success !\033[0m"
                  else
                          echo -e "\033[32mThe $Php_version Make or Make install ERROR,Please Check......"
                          exit 0
                  fi
          fi
          }


          PS3="Please enter you select install menu:"
          select i in nginx mysql php quit
          do

          case $i in
                  nginx)
                  nginx_install 1
                  ;;
                  mysql)
                  mysql_install 2
                  ;;
                  php)
                  php_install 3
                  ;;
                  quit)
                  exit
          esac
          done

          推薦閱讀

          開箱即用:100個(gè)Linux Shell腳本經(jīng)典案例解析

          如何用 10 行 bash shell 腳本監(jiān)控 Linux?

          35 個(gè)非常實(shí)用的 Shell 拿來(lái)就用腳本實(shí)例!

          Linux 超級(jí)漂亮的 Shell

          9 個(gè)實(shí)用的 Shell 拿來(lái)就用腳本實(shí)例!

          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  乱伦色区| 欧美精品一区二 | 国产一区二区三区在线 | 亚洲AV无码乱码精品 | 婷婷五月天色播 |