<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>

    shell編程15例(一)

    VSole2022-03-23 07:53:04

    1、編寫hello world腳本

    #!/bin/bash
    
    # 編寫hello world腳本
     
    echo "Hello World!"
    

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

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

    3、備份日志

    #!/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  /root/logbak.sh
    

    4、一鍵部署 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
    

    5、監控內存和磁盤容量,小于給定值時報警

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

    6、猜數字游戲

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

    7、檢測本機當前用戶是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不是,則提示您非管理員(使用字串對比版本)

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

    8、檢測本機當前用戶是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不是,則提示您非管理員(使用 UID 數字對比版本)

    #!/bin/bash
    
    # 檢測本機當前用戶是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不
    # 是,則提示您非管理員(使用 UID 數字對比版本)
    if [ $UID -eq 0 ];then
        yum ‐y install vsftpd
    else
        echo "您不是管理員,沒有權限安裝軟件"
    fi
    
    

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

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

    10、輸入三個數并進行升序排序

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

    11、石頭、剪刀、布游戲

    #!/bin/bash
    
    # 編寫腳本,實現人機<石頭,剪刀,布>游戲
    game=(石頭 剪刀 布)
    num=$[RANDOM%3]
    computer=${game[$num]}
    # 通過隨機數獲取計算機的出拳
    # 出拳的可能性保存在一個數組中,game[0],game[1],game[2]分別是 3 中不同的可能
     
    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
    

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

    #!/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.4.$i  &>/dev/null
        if  [ $? -eq 0 ];then
             echo "192.168.4.$i is up"
         else
             echo  "192.168.4.$i is down"
         fi
    done
    
    

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

    #!/bin/bash
    
    # 編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處于開機狀態,哪些主機處于關機
    # 狀態(while 版本) 
    i=1
    while [ $i -le 254 ]
    do
         ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i  &>/dev/null
         if  [ $? -eq 0 ];then
             echo "192.168.4.$i is up"
        else
             echo  "192.168.4.$i is down"
         fi
         let i++
    done
    

    14、編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處于開機狀態,哪些主機處于關機狀態(多進程版)

    #!/bin/bash
    
    # 編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處于開機狀態,哪些主機處于關機
    # 狀態(多進程版)
     
    #定義一個函數,ping 某一臺主機,并檢測主機的存活狀態
    myping(){
    ping ‐c 2 ‐i 0.3 ‐W 1 $1  &>/dev/null
    if  [ $? -eq 0 ];then
      echo "$1 is up"
    else
      echo "$1 is down"
    fi
    }
    for i in {1..254}
    do
         myping 192.168.4.$i &
    done
    # 使用&符號,將執行的函數放入后臺執行
    # 這樣做的好處是不需要等待ping第一臺主機的回應,就可以繼續并發ping第二臺主機,依次類推。
    

    15、編寫腳本,顯示進度條

    #!/bin/bash
    
    # 編寫腳本,顯示進度條
    jindu(){
    while :
    do
         echo -n '#'
         sleep 0.2
    done
    }
    jindu &
    cp -a $1 $2
    killall $0
    echo "拷貝完成"
    
    linux腳本shell函數
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    這里你可以理解為 a = 1,同時還可以 a =2、a = 3 ,不同的值都可以復制給同一個 變量 a 。Shell常見的變量之一系統變量,主要是用于對參數判斷和命令返回值判斷時使用,系統變量詳解如下:。令或程序執行完后的狀態,返回0表示執行成功;顯示當前主機名;
    系統管理員發現文件的最近修改時間,便提示他們系統受到攻擊,采取行動鎖定系統。然而幸運的是,修改時間不是絕對可靠的記錄,修改時間本身可以被欺騙或修改,通過編寫 Shell腳本,攻擊者可將備份和恢復修改時間的過程自動化。
    在find的基礎上,我們可與等其它基本Linux命令相結合,即能創造出無限的命令行功能,比如:可以快速查找出Linux某個文件夾及其子文件夾中的重復文件列表。
    這里根據紅日安全PHP-Audit-Labs對一些函數缺陷的分析,從PHP內核層面來分析一些函數的可利用的地方,標題所說的函數缺陷并不一定是函數本身的缺陷,也可能是函數在使用過程中存在某些問題,造成了漏洞,以下是對部分函數的分析
    近日,美國調查新聞網站 The Intercept 信息安全部總監、DDoSecrets 顧問 Micah Lee 心血來潮,拿著 GPT-4 去?在 GPT-4 的幫助下,他不僅獲得了更多的“旗幟”,也有一些不同的 GPT-4 的使用經驗想要分享。不過,你可以把所有問題劃分成小模塊,然后逐個向 GPT-4 提問。在 Shamir 秘密共享方案中,一個秘密被分成一定數量,如果一個人擁有這些部分的答案,他們就可以解密。Lee 轉了一圈之后,找到了其中 6 個部分。為了驗證,Micah Lee 把 GPT-4 給出的 Python 腳本復制到了 Decrypt.py 里面,并運行了一下:$?
    所有瀏覽者都會受到攻擊。OS命令注入攻擊指通過Web應用,執行非法的操作系統命令達到攻擊的目的。危險網站B要求訪問網站A并提出要求。在實際的代碼安全審查中,這類漏洞往往很難通過工具進行自動化檢測,因此在實際應用中危害很大。水平越權漏洞,是一種“基于數據的訪問控制”設計缺陷引起的漏洞。由此可見,Smartbi正是通過建立全方位的安全漏洞防御機制來確保用戶信息的安全。
    本篇和大家分享的是springboot打包并結合shell腳本命令部署,重點在分享一個shell程序啟動工具,希望能便利工作; profiles指定不同環境的配置 maven-assembly-plugin打發布壓縮包 分享shenniu_publish.sh程序啟動工具 linux上使用shenniu_publish.sh啟動程序 Part2profiles指定不同環境的配置 通常一套
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类