1. <em id="vzzs9"></em>
      <tbody id="vzzs9"></tbody>

    2. <span id="vzzs9"></span>
      <progress id="vzzs9"></progress>
      首頁 運維干貨34個Linux Shell腳本,一定能幫到你!

      34個Linux Shell腳本,一定能幫到你!

      運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
      領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

      (1)用戶猜數字

      #!/bin/bash

      # 腳本生成一個 100 以內的隨機數,提示用戶猜數字,根據用戶的輸入,提示用戶猜對了,
      # 猜小了或猜大了,直至用戶猜對腳本結束。

      # RANDOM 為系統自帶的系統變量,值為 0‐32767的隨機數
      # 使用取余算法將隨機數變為 1‐100 的隨機數
      num=$[RANDOM%100+1]
      echo "$num"

      # 使用 read 提示用戶猜數字
      # 使用 if 判斷用戶猜數字的大小關系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),
      # ‐lt(小于),‐le(小于等于)
      while :
      do 
       read -p "計算機生成了一個 1‐100 的隨機數,你猜: " cai  
          if [ $cai -eq $num ]   
          then     
              echo "恭喜,猜對了"     
              exit  
           elif [ $cai -gt $num ]  
           then       
                  echo "Oops,猜大了"    
             else      
                  echo "Oops,猜小了" 
        fi
      done

      (2)查看有多少遠程的 IP 在連接本機

      #!/bin/bash

      #!/bin/bash
      # 查看有多少遠程的 IP 在連接本機(不管是通過 ssh 還是 web 還是 ftp 都統計) 

      # 使用 netstat ‐atn 可以查看本機所有連接的狀態,‐a 查看所有,
      # -t僅顯示 tcp 連接的信息,‐n 數字格式顯示
      # Local Address(第四列是本機的 IP 和端口信息)
      # Foreign Address(第五列是遠程主機的 IP 和端口信息)
      # 使用 awk 命令僅顯示第 5 列數據,再顯示第 1 列 IP 地址的信息
      # sort 可以按數字大小排序,最后使用 uniq 將多余重復的刪除,并統計重復的次數
      netstat -atn  |  awk  '{print $5}'  | awk  '{print $1}' | sort -nr  |  uniq -c

      (3)helloworld

      #!/bin/bash

      function example {
      echo "Hello world!"
      }
      example

      (4)打印 tomcat 的 pid

      #!/bin/sh`

      v1="Hello"
      v2="world"
      v3=${v1}${v2}
      echo $v3

      pidlist=`ps -ef|grep apache-tomcat-7.0.75|grep -v "grep"|awk '{print $2}'`
      echo $pidlist
      echo "tomcat Id list :$pidlist"  //顯示pid

      (5)腳本編寫 剪刀 、 石頭、布游戲

      #!/bin/bash

      game=(石頭 剪刀 布)
      num=$[RANDOM%3]
      computer=${game[$sum]}

      echo "請根據下列提示選擇您的出拳手勢"
      echo " 1. 石頭"
      echo " 2. 剪刀"
      echo " 3. 布 "

      read -p "請選擇 1-3 :" person
      case $person in
      1)
        if [ $num -eq 0 ]
        then 
          echo "平局"
          elif [ $num -eq 1 ]
          then
            echo "你贏"
          else 
            echo "計算機贏"
      fi;;
      2)
       if [ $num -eq 0 ]
       then
          echo "計算機贏"
          elif [ $num -eq 1 ] 
          then
           echo "平局"
          else 
            echo "你贏"
      fi;;
      3)
       if [ $num -eq 0 ]
       then  
         echo "你贏"
         elif [ $num -eq 1 ]
         then 
           echo "計算機贏"
         else 
            echo "平局"
      fi;;
      *)
        echo "必須輸入1-3 的數字"
      esac

      (6)九九乘法表

      #!/bin/bash

      for i in `seq 9`
      do 
       for j in `seq $i`
       do 
       echo -n "$j*$i=$[i*j] "
       done
          echo
      done

      (7)腳本用源碼來安裝 memcached 服務器

      #!/bin/bash
      # 一鍵部署 memcached 

      # 腳本用源碼來安裝 memcached 服務器
      # 注意:如果軟件的下載鏈接過期了,請更新 memcached 的下載鏈接
      wget http://www.memcached.org/files/memcached-1.5.1.tar.gz
      yum -y install gcc
      tar -xf  memcached‐1.5.1.tar.gz
      cd memcached‐1.5.1
      ./configure
      make
      make install

      (8)檢測本機當前用戶是否為超級管理員

      #!/bin/bash

      # 檢測本機當前用戶是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不
      # 是,則提示您非管理員(使用字串對比版本) 
      if [ $USER == "root" ] 
      then 
       yum -y install vsftpd
      else 
       echo "您不是管理員,沒有權限安裝軟件"
      fi

      (9)if 運算表達式

      #!/bin/bash -xv

      if [ $1 -eq 2 ] ;then
       echo "wo ai wenmin"
      elif [ $1 -eq 3 ] ;then 
       echo "wo ai wenxing "
      elif [ $1 -eq 4 ] ;then 
       echo "wo de xin "
      elif [ $1 -eq 5 ] ;then
       echo "wo de ai "
      fi

      (10)腳本 殺掉 tomcat 進程并重新啟動

      #!/bin/bash

      #kill tomcat pid

      pidlist=`ps -ef|grep apache-tomcat-7.0.75|grep -v "grep"|awk '{print $2}'`  #找到tomcat的PID號

      echo "tomcat Id list :$pidlist"  //顯示pid

      kill -9 $pidlist  #殺掉改進程

      echo "KILL $pidlist:" //提示進程以及被殺掉

      echo "service stop success"

      echo "start tomcat"

      cd /opt/apache-tomcat-7.0.75

      pwd 

      rm -rf work/*

      cd bin

      ./startup.sh #;tail -f ../logs/catalina.out

      (11)打印國際象棋棋盤

      #!/bin/bash
      # 打印國際象棋棋盤
      # 設置兩個變量,i 和 j,一個代表行,一個代表列,國際象棋為 8*8 棋盤
      # i=1 是代表準備打印第一行棋盤,第 1 行棋盤有灰色和藍色間隔輸出,總共為 8 列
      # i=1,j=1 代表第 1 行的第 1 列;i=2,j=3 代表第 2 行的第 3 列
      # 棋盤的規律是 i+j 如果是偶數,就打印藍色色塊,如果是奇數就打印灰色色塊
      # 使用 echo ‐ne 打印色塊,并且打印完成色塊后不自動換行,在同一行繼續輸出其他色塊
      for i in {1..8}
      do
         for j in {1..8}
         do
          sum=$[i+j]
        if [  $[sum%2] -eq 0 ];then
          echo -ne "\033[46m  \033[0m"
        else
         echo -ne "\033[47m  \033[0m"
        fi
         done
         echo
      done

      (12)統計當前 Linux 系統中可以登錄計算機的賬戶有多少個

      #!/bin/bash

      # 統計當前 Linux 系統中可以登錄計算機的賬戶有多少個
      #方法 1:
      grep "bash$" /etc/passwd | wc -l
      #方法 2:
      awk -f : '/bash$/{x++}end{print x}' /etc/passwd

      (13)備份 MySQL 表數據

      #!/bin/sh

      source /etc/profile
      dbName=mysql
      tableName=db
      echo [`date +'%Y-%m-%d %H:%M:%S'`]' start loading data...'
      mysql -uroot -proot -P3306 ${dbName} -e "LOAD DATA LOCAL INFILE '# /home/wenmin/wenxing.txt' INTO TABLE ${tableName} FIELDS TERMINATED BY ';'"
      echo [`date +'%Y-%m-%d %H:%M:%S'`]' end loading data...'
      exit
      EOF

      (14)使用死循環實時顯示 eth0 網卡發送的數據包流量

      #!/bin/bash

      # 使用死循環實時顯示 eth0 網卡發送的數據包流量 

      while :
      do 
       echo '本地網卡 ens33 流量信息如下:'
       ifconfig ens33 | grep "RX pack" | awk '{print $5}'
           ifconfig ens33 | grep "TX pack" | awk '{print $5}'
       sleep 1
      done

      (15)編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處于開機狀態,哪些主機處于關機

      #!/bin/bash

      # 編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處于開機狀態,哪些主機處于關機
      # 狀態(for 版本)
      for i in {1..254}
      do 
       # 每隔0.3秒ping一次,一共ping2次,并以1毫秒為單位設置ping的超時時間
       ping -c 2 -i 0.3 -W 1 192.168.1.$i &>/dev/null
           if [ $? -eq 0 ];then
       echo "192.168.1.$i is up"
       else 
       echo "192.168.1.$i is down"
       fi
      done

      (16)編寫腳本:提示用戶輸入用戶名和密碼, 腳本自動創建相應的賬戶及配置密碼。如果用戶

      #!/bin/bash
      # 編寫腳本:提示用戶輸入用戶名和密碼,腳本自動創建相應的賬戶及配置密碼。如果用戶
      # 不輸入賬戶名,則提示必須輸入賬戶名并退出腳本;如果用戶不輸入密碼,則統一使用默
      # 認的 123456 作為默認密碼。

      read -p "請輸入用戶名:" user
      #使用‐z 可以判斷一個變量是否為空,如果為空,提示用戶必須輸入賬戶名,并退出腳本,退出碼為 2
      #沒有輸入用戶名腳本退出后,使用$?查看的返回碼為 2
      if [ -z $user ]; then
       echo " 您不需要輸入賬戶名" 
       exit 2
      fi 
      #使用 stty ‐echo 關閉 shell 的回顯功能
      #使用 stty  echo 打開 shell 的回顯功能
      stty -echo 
      read -p "請輸入密碼:" pass
      stty echo 
      pass=${pass:-123456}
      useradd "$user"
      echo "$pass" | passwd --stdin "$user"

      (17)使用腳本對輸入的三個整數進行排序

      #!/bin/bash

      # 依次提示用戶輸入 3 個整數,腳本根據數字大小依次排序輸出 3 個數字
      read -p " 請輸入一個整數:" num1
      read -p " 請輸入一個整數:" num2
      read -p " 請輸入一個整數:  " num3

      # 不管誰大誰小,最后都打印 echo "$num1,$num2,$num3"
      # num1 中永遠存最小的值,num2 中永遠存中間值,num3 永遠存最大值
      # 如果輸入的不是這樣的順序,則改變數的存儲順序,如:可以將 num1 和 num2 的值對調
      tmp=0
      # 如果 num1 大于 num2,就把 num1 和和 num2 的值對調,確保 num1 變量中存的是最小值
      if [ $num1 -gt $num2 ];then
       tmp=$num1
       num1=$num2
       num2=tmp
      fi
      # 如果 num1 大于 num3,就把 num1 和 num3 對調,確保 num1 變量中存的是最小值
      if [ $num1 -gt $num3 ];then
       tmp=$num1
       num1=$num3
       num3=$tmp
      fi
      # 如果 num2 大于 num3,就把 num2 和 num3 對調,確保 num2 變量中存的是最小值
      if [ $num2 -gt $num3 ];then
       tmp=$num2
       num2=$num3
       num3=$tmp
      fi
      echo "排序后數據(從小到大)為:$num1,$num2,$num3"

      (18)根據計算機當前時間,返回問候語,可以將該腳本設置為開機啟動

      #!/bin/bash
      # 根據計算機當前時間,返回問候語,可以將該腳本設置為開機啟動 

      # 00‐12 點為早晨,12‐18 點為下午,18‐24 點為晚上
      # 使用 date 命令獲取時間后,if 判斷時間的區間,確定問候語內容
      tm=$(date +%H)
      if [ $tm -le 12 ];then
       msg="Good Morning $USER"
      elif [ $tm -gt 12 -a $tm -le 18 ];then
         msg="Good Afternoon $USER"
      else
         msg="Good Night $USER"
      fi
      echo "當前時間是:$(date +"%Y‐%m‐%d %H:%M:%S")"
      echo -e "\033[34m$msg\033[0m"

      (19)將 I lov cls 寫入到 txt 文件中

      #!/bin/bash

      cd /home/wenmin/
      touch wenxing.txt
      echo "I lov cls" >>wenxing.txt

      (20)腳本編寫 for 循環判斷

      #!/bin/bash

      s=0;
      for((i=1;i<100;i++))
      do 
       s=$[$s+$i]
      done 

      echo $s

      r=0;
      a=0;
      b=0;
      for((x=1;x<9;x++))
      do 
       a=$[$a+$x] 
      echo $x
      done
      for((y=1;y<9;y++))
      do 
       b=$[$b+$y]
      echo $y

      done

      echo $r=$[$a+$b]

      (21)腳本編寫 for 循環判斷

      #!/bin/bash

      for i in "$*"
      do 
       echo "wenmin xihuan $i"
      done

      for j in "$@"
      do 
       echo "wenmin xihuan $j"
      done

      (22)腳本 每周 5 使用 tar 命令備份 / var/log 下的所有日志文件

      #!/bin/bash
      # 每周 5 使用 tar 命令備份/var/log 下的所有日志文件
      # vim  /root/logbak.sh
      # 編寫備份腳本,備份后的文件名包含日期標簽,防止后面的備份將前面的備份數據覆蓋
      # 注意 date 命令需要使用反引號括起來,反引號在鍵盤<tab>鍵上面

      tar -czf log-`date +%Y%m%d`.tar.gz /var/log 

      # crontab -e #編寫計劃任務,執行備份腳本
      00 03 * * 5 /home/wenmin/datas/logbak.sh

      (23)腳本編寫 求和 函數運算 function xx()

      #!/bin/bash

      function sum()
      {
       s=0;
       s=$[$1+$2]
       echo $s
      }
      read -p "input your parameter " p1
      read -p "input your parameter " p2

      sum $p1 $p2

      function multi()
      {
       r=0;
       r=$[$1/$2]
       echo $r
      }
      read -p "input your parameter " x1
      read -p "input your parameter " x2

      multi $x1 $x2

      v1=1
      v2=2
      let v3=$v1+$v2
      echo $v3

      (24)腳本編寫 case — esac 分支結構表達式

      #!/bin/bash 

      case $1 in 
      1) 
       echo "wenmin "
      ;;
      2)
       echo "wenxing "
      ;; 
      3)  
       echo "wemchang "
      ;;
      4) 
       echo "yijun"
      ;;
      5)
       echo "sinian"
      ;;
      6)  
       echo "sikeng"
      ;;
      7) 
       echo "yanna"
      ;;
      *)
       echo "danlian"
      ;; 
      esac

      (25)# 定義要監控的頁面地址,對 tomcat 狀態進行重啟或維護

      #!/bin/sh  
      # function:自動監控tomcat進程,掛了就執行重啟操作  
      # author:huanghong  
      # DEFINE  

      # 獲取tomcat PPID  
      TomcatID=$(ps -ef |grep tomcat |grep -w 'apache-tomcat-7.0.75'|grep -v 'grep'|awk '{print $2}')  

      # tomcat_startup  
      StartTomcat=/opt/apache-tomcat-7.0.75/bin/startup.sh  


      #TomcatCache=/usr/apache-tomcat-5.5.23/work  

      # 定義要監控的頁面地址  
      WebUrl=http://192.168.254.118:8080/

      # 日志輸出  
      GetPageInfo=/dev/null  
      TomcatMonitorLog=/tmp/TomcatMonitor.log  

      Monitor()  
        {  
         echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')]"  
         if [ $TomcatID ]
       then  
            echo "[info]tomcat進程ID為:$TomcatID."  
            # 獲取返回狀態碼  
            TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})  
            if [ $TomcatServiceCode -eq 200 ];then  
                echo "[info]返回碼為$TomcatServiceCode,tomcat啟動成功,頁面正常."  
            else  
                echo "[error]訪問出錯,狀態碼為$TomcatServiceCode,錯誤日志已輸出到$GetPageInfo"  
                echo "[error]開始重啟tomcat"  
                kill -9 $TomcatID  # 殺掉原tomcat進程  
                sleep 3  
                #rm -rf $TomcatCache # 清理tomcat緩存  
                $StartTomcat  
            fi  
            else  
            echo "[error]進程不存在!tomcat自動重啟..."  
            echo "[info]$StartTomcat,請稍候......"  
            #rm -rf $TomcatCache  
            $StartTomcat  
          fi  
          echo "------------------------------"  
         }  
         Monitor>>$TomcatMonitorLog

      (26)通過位置變量創建 Linux 系統賬戶及密碼

      #!/bin/bash

      # 通過位置變量創建Linux 系統賬戶及密碼

      # $1 是執行腳本的第一個參數,$2  是執行腳本的第二個參數

      useradd "$1"
      echo "$2" | passwd --stdin "$1"

      (27)對變量的傳入與獲取個數及打印

      #!/bin/bash
      echo "$0 $1 $2 $3"  // 傳入三個參數
      echo $#    //獲取傳入參數的數量
      echo $@    //打印獲取傳入參數
      echo $*    //打印獲取傳入參數

      (28)實時監控本機內存和硬盤剩余空間,剩余內存小于 500M、根分區剩余空間小于 1000M 時,發送報警郵件給 root 管理員

      #!/bin/bash

      # 實時監控本機內存和硬盤剩余空間,剩余內存小于500M、根分區剩余空間小于1000M時,發送報警郵件給root管理員

      # 提取根分區剩余空間
      disk_size=$(df / | awk '/\//{print $4}')

      # 提取內存剩余空空間
      mem_size=$(free | awk '/Mem/{print $4}')
      while :
      do 
      # 注意內存和磁盤提取的空間大小都是以 Kb 為單位
      if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
      then
          mail  ‐s  "Warning"  root  <<EOF
       Insufficient resources,資源不足
      EOF
      fi
      done

      (29)檢查指定目錄下是否存在 對應 文件

      #!/bin/bash

      if [ -f /home/wenmin/datas ]
      then 
      echo "File exists"
      fi

      (30)腳本定義 while 循環語句

      #!/bin/bash

      if [ -f /home/wenmin/datas ]
      then 
      echo "File exists"
      fi

      [root@rich datas]# cat while.sh 
      #!/bin/bash

      s=0
      i=1
      while [ $i -le 100 ]
      do
              s=$[$s + $i]
              i=$[$i + 1]
      done

      echo $s
      echo $i

      (31)一鍵部署 LNMP(RPM 包版本)

      #!/bin/bash 

      # 一鍵部署 LNMP(RPM 包版本)
      # 使用 yum 安裝部署 LNMP,需要提前配置好 yum 源,否則該腳本會失敗
      # 本腳本使用于 centos7.2 或 RHEL7.2
      yum -y install httpd
      yum -y install mariadb mariadb-devel mariadb-server
      yum -y install php php-mysql

      systemctl start httpd mariadb
      systemctl enable httpd mariadb

      (32)讀取控制臺傳入參數

      #!/bin/bash
      read -t 7 -p "input your name " NAME
      echo $NAME

      read -t 11 -p "input you age " AGE
      echo $AGE

      read -t 15 -p "input your friend " FRIEND
      echo $FRIEND

      read -t 16 -p "input your love " LOVE
      echo $LOVE

      (33)腳本實現 復制

      #!/bin/bash

      cp $1 $2

      (34)腳本實現文件存在與否的判斷

      #!/bin/bash

      if [ -f file.txt ];then
       echo "文件存在"
      else 
       echo "文件不存在"
      fi

      轉自:入門小站

      本文鏈接:http://www.abandonstatusquo.com/42820.html

      網友評論comments

      發表評論

      您的電子郵箱地址不會被公開。

      暫無評論

      Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
      掃二維碼
      掃二維碼
      返回頂部
      久久久久亚洲国内精品|亚洲一区二区在线观看综合无码|欧洲一区无码精品色|97伊人久久超碰|一级a爱片国产亚洲精品