<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    35 個非常實用的 Shell 拿來就用腳本實例!

    VSole2022-07-18 22:49:39

    作為一名 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
    

    (11)腳本 殺掉 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
    

    (12)打印國際象棋棋盤

    #!/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
    

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

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

    (14)備份 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
    

    (15)使用死循環實時顯示 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
    

    (16)編寫腳本測試 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
    

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

    #!/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"
    

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

    #!/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"
    

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

    #!/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"
    

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

    #!/bin/bash
    
    cd /home/wenmin/
    touch wenxing.txt
    echo "I lov cls" >>wenxing.txt
    

    (21)腳本編寫 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]
    

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

    #!/bin/bash
    
    for i in "$*"
    do 
     echo "wenmin xihuan $i"
    done
    
    for j in "$@"
    do 
     echo "wenmin xihuan $j"
    done
    

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

    #!/bin/bash
    # 每周 5 使用 tar 命令備份/var/log 下的所有日志文件
    # vim  /root/logbak.sh
    # 編寫備份腳本,備份后的文件名包含日期標簽,防止后面的備份將前面的備份數據覆蓋
    # 注意 date 命令需要使用反引號括起來,反引號在鍵盤鍵上面
    
    tar -czf log-`date +%Y%m%d`.tar.gz /var/log 
    
    # crontab -e #編寫計劃任務,執行備份腳本
    00 03 * * 5 /home/wenmin/datas/logbak.sh
    

    (24)腳本編寫 求和 函數運算 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
    

    (25)腳本編寫 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
    

    (26)# 定義要監控的頁面地址,對 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
    

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

    #!/bin/bash
    
    # 通過位置變量創建Linux 系統賬戶及密碼
    
    # $1 是執行腳本的第一個參數,$2  是執行腳本的第二個參數
    
    useradd "$1"
    echo "$2" | passwd --stdin "$1"
    

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

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

    (29)實時監控本機內存和硬盤剩余空間,剩余內存小于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  < Insufficient resources,資源不足
    EOF
    fi
    done
    

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

    #!/bin/bash
    
    if [ -f /home/wenmin/datas ]
    then 
    echo "File exists"
    fi
    

    (31)腳本定義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
    

    (32)一鍵部署 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
    

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

    #!/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
    

    (34)腳本實現復制

    #!/bin/bash
    
    cp $1 $2
    

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

    #!/bin/bash
    
    if [ -f file.txt ];then
     echo "文件存在"
    else 
     echo "文件不存在"
    fi
    
    腳本shell for循環
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    這里你可以理解為 a = 1,同時還可以 a =2、a = 3 ,不同的值都可以復制給同一個 變量 a 。Shell常見的變量之一系統變量,主要是用于對參數判斷和命令返回值判斷時使用,系統變量詳解如下:。令或程序執行完后的狀態,返回0表示執行成功;顯示當前主機名;
    PHP disable_functions disable_functions是php.ini中的一個設置選項。相當一個黑名單,可以用來設置PHP環境禁止使用某些函數,通常是網站管理員為了安全起見,用來禁用某些危險的命令執行函數等。
    disable_functions是php.ini中的一個設置選項。相當一個黑名單,可以用來設置PHP環境禁止使用某些函數,通常是網站管理員為了安全起見,用來禁用某些危險的命令執行函數等。
    相當一個黑名單,可以用來設置PHP環境禁止使用某些函數,通常是網站管理員為了安全起見,用來禁用某些危險的命令執行函數等。高ini_restore()可用于恢復 PHP 環境配置參數到其初始值
    作為一名 Linux 工程師,會寫好的腳本不僅能提高工作效率,還能有更多的時間做自己的事。最近在網上沖浪的時候,也注意收集一些大佬寫過的腳本,匯總整理一下,歡迎收藏,與君共勉!
    0x02 Webshell簡介webshell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種代碼執行環境,主要用于網站管理、服務器管理、權限管理等操作。使用方法簡單,只需上傳一個代碼文件,通過網址訪問,便可進行很多日常操作,極大地方便了使用者對網站和服務器的管理。
    VMPWN的入門系列-2
    2023-08-03 09:29:42
    解釋器是一種計算機程序,用于解釋和執行源代碼。與編譯器不同,解釋器不會將源代碼轉換為機器語言,而是直接執行源代碼。即,這個程序接收一定的解釋器語言,然后按照一定的規則對其進行解析,完成相應的功能,從本質上來看依然是一個虛擬機。總的來說,如果輸入字符數小于0x10,string類的大概成員應該如下struct?
    關于 DNS TXT 記錄的意義可以參考下面兩篇文章:TXT 記錄值 - Google Workspace 管理員幫助https://support.google.com/a/answer/2716802?hl=zh-HansDNS中TXT記錄是做什么用的?既然輸出沒有問題了,可以進行轉換了,這里又涉及一個問題:certutil 只能對文件進行轉換,
    前言在工作中經常會遇到各種websehll,黑客通常要通過各種方式獲取 webshell,從而獲得企業網站的控制權,識別出webshell文件或通信流量可以有效地阻止黑客進一步的攻擊行為,下面以常見的四款webshell進行分析,對工具連接流量有個基本認識。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类