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

    Linux Shell 腳本入門到實戰詳解

    VSole2022-11-28 10:52:47

    一、shell 入門簡介

    1.1 什么是 shell

    shell 腳本簡介

    什么是shell

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

    官方化的shell 介紹

    Shell 通過提示您輸入,向操作系統解釋該輸入,然后處理來自操作系統的任何結果輸出,簡單來說Shell就是一個用戶跟操作系統之間的一個命令解釋器。

    常見的 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由于易用和免費,在日常工作中被廣泛使用,也是大多數Linux操作系統默認的Shell環境。

    1.2 shell 編程注意事項

    • shell 編程有哪些注意事項
    • shell 命名:Shell 腳本名稱命名一般為英文、大寫、小寫,后綴以. sh 結尾
    • 不能使用特殊符號、空格
    • 見聞之意,名稱要寫的一眼可以看出功能
    • shell 編程 首行需要 #!/bin/bash 開頭
    • shell 腳本 變量 不能以 數字、特殊符號開頭,可以使用下劃線—, 但不能 用破折號 -

    1.3 第一個 shell 腳本 hello world

    創建一個偉大編程項目 — Hello World

    # 創建一個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
    # 賦予執行權限
    [root@aly_server01~]# chmod o+x Helloword.sh 
    # 運行helloword.sh 腳本
    [root@aly_server01~]# ./Helloword.sh 
    hello world
    

    二、shell 環境變量講解

    2.1 shell 變量詳解

    環境變量介紹

    什么是變量

    很多人可能會說,可以變化的量就是變量。但是發現很多漢語意思很強大,你看的懂的字,卻不一定可以理解它的意思。這里你可以理解為 a = 1,同時還可以 a =2、a = 3 ,不同的值都可以復制給同一個 變量 a 。

    常見的3種變量

    Shell編程中變量分為三種,分別是系統變量、環境變量和用戶變量,Shell變量名在定義時,首個字符必須為字母(a-z,A-Z),不能以數字開頭,中間不能有空格,可以使用下劃線(_),不能使用(-),也不能使用標點符號等。

    簡單的變量介紹

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

    2.2 shell 系統變量 介紹

    系統變量

    # Shell常見的變量之一系統變量,主要是用于對參數判斷和命令返回值判斷時使用,系統變量詳解如下:
    $0   當前腳本的名稱;
    $n   當前腳本的第n個參數,n=1,2,…9;
    $*   當前腳本的所有參數(不包括程序本身);
    $#   當前腳本的參數個數(不包括程序本身);
    $?   令或程序執行完后的狀態,返回0表示執行成功;
    $$   程序本身的PID號。
    

    2.3 shell 環境變量 介紹

    2.3.1 常見的系統環境變量

    環境變量介紹

    #Shell常見的變量之二環境變量,主要是在程序運行時需要設置,環境變量詳解如下:
    PATH    命令所示路徑,以冒號為分割;
    HOME    打印用戶家目錄;
    SHELL   顯示當前Shell類型;
    USER    打印當前用戶名;
    ID      打印當前用戶id信息;
    PWD     顯示當前所在路徑;
    TERM    打印當前終端類型;
    HOSTNAME    顯示當前主機名;
    PS1         定義主機命令提示符的;
    HISTSIZE    歷史命令大小,可通過 HISTTIMEFORMAT 變量設置命令執行時間;
    RANDOM      隨機生成一個 0 至 32767 的整數;
    HOSTNAME    主機名
    

    2.4 shell 用戶環境變量 介紹

    2.4.1 自定義 shell 環境變量

    用戶自定義變量

    # 常見的變量之三用戶變量,用戶變量又稱為局部變量,主要用在Shell腳本內部或者臨時局部使用,系統變量詳解如下:
    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 安裝過程

    # echo 打印httpd-2.4安裝步驟
    [root@web-server01~]# touch httpd_2.4_install.sh
    # 賦予執行權限
    [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 擴展

    #!/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 編程流程控制語句

    3.1 if 條件語句介紹

    3.1.1 常用的單 / 雙分支

    if 條件語句

    # If條件判斷語句,通常以if開頭,fi結尾。也可加入else或者elif進行多條件的判斷
    # 單分支語句 ---比較大小
     if (條件表達式);then
      語句1
     fi
    # 雙分支if 語句
     if (表達式)
      語句1
     else
      語句2
     fi
    # 多支條件語句 ---判斷成績
     if (表達式)
      語句1
     elif
      語句2
     elif
      語句2
     fi
    

    3.1.2 if 常見判斷邏輯運算符詳解

    常見邏輯判斷運算符

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

    3.1.3 使用單分支語句判斷 crond 進程是否在運行—案例

    判斷 crond 服務是否運行

    #!/bin/bash
    # this is check crond
    # by author rivers on 2021-9.23
    # 定義一個變量名
    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 判斷系統目錄是否存在 —案例

    判斷系統目錄是否存在

    #!/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 多個條件判斷學生分數等級 — 案例

    判斷學生成績等級

    # if 語句可以直接對命令狀態進行判斷,就省去了獲取$?這一步!
      # 如果第一個條件符合就不再向下匹配
    #!/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 循環語句介紹

    for 循環語句

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

    3.2.1 檢查同一局域網 多臺主機是否存活

    檢查多臺主機存活情況

    #!/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 循環語句介紹

    while 循環語句

    # While循環語句與for循環功能類似,主要用于對某個數據域進行循環讀取、對文件進行遍歷,通常用于需要循環某個文件或者列表,滿足循環條件會一直循環,不滿足則退出循環,其語法格式以while…do開頭,done結尾與 
    #while 關聯的還有一個 until 語句,它與 while 不同之處在于,是當條件表達式為 false 時才循環,實際使用中比較少,這里不再講解。
    while  (表達式)
    do
      語句1
    done
    

    break 和 continue 語句

    # break 和 continue 語句
      break 是終止循環。
      continue 是跳出當前循環。
    #示例 1:在死循環中,滿足條件終止循環
    while true; do
      let N++
      if [ $N -eq 5 ]; then
        break
    fi
      echo $N
    done
    輸出:1 2 3 4
    #示例 2:舉例子說明 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 數字
    i=0
    while ((i<=100))
    do
            echo  $i
            i=`expr $i + 1`
    done
    

    3.3.1 While 循環求 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 秒循環判斷一次 hbs 用戶是否登錄系統 —案例

    每 10 秒 循環判斷系統登錄

    [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 選擇語句介紹

    case 選擇語句

    #Case選擇語句,主要用于對多個選擇條件進行匹配輸出,與if elif語句結構類似,通常用于腳本傳遞輸入參數,打印出輸出結果及內容,其語法格式以Case…in開頭,esac結尾。語法格式如下:
    case 模式名  in
      模式 1)
        命令
        ;;
      模式 2)
        命令
        ;;
    *)
    不符合以上模式執行的命令
    esac
    # 每個模式必須以右括號結束,命令結尾以雙分號結束。
    

    3.4.1 使用 case 編寫一個 httpd 服務啟動腳本

    編寫 http 服務啟動腳本

    [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 "請輸入你的選擇start|stop|quit:" char
    case $char in
    start)
        systemctl start httpd && echo "httpd服務已經開啟" || echo "開啟失敗"
    ;;
    stop)
        systemctl stop httpd && echo "httpd服務已經關閉" || echo "關閉失敗"
    ;;
    restart)
        systemctl restart httpd && echo "httpd服務已經重啟" || echo "重啟失敗
    "
    ;;
    status)
        systemctl status httpd && echo -e "
            httpd 的服務狀態
    ;;
    quit)
    

    3.5 select 選擇語句介紹

    select 選擇語句

    #select 是一個類似于 for 循環的語句
    #Select語句一般用于選擇,常用于選擇菜單的創建,可以配合PS3來做打印菜單的輸出信息,其語法格式以select…in do開頭,done結尾:
    select i in (表達式) 
    do
    語句
    done
    # 選擇mysql 版本
    #!/bin/bash
    # by author rivers on 2021-9-27
    PS3="Select a number: "
    while true; do
    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 函數、數組 編程 實戰

    函數

    # Shell允許將一組命令集或語句形成一個可用塊,這些塊稱為Shell函數,Shell函數的用于在于只需定義一次,后期隨時使用即可,無需在Shell腳本中添加重復的語句塊,其語法格式以function name(){開頭,以}結尾。
    # Shell編程函數默認不能將參數傳入()內部,Shell函數參數傳遞在調用函數名稱傳遞,例如name args1 args2。
    # 函數語法
    func() {
    command1
    command1
    ……
    }
    fun  # 直接調用函數名
    # Shell 函數很簡單,函數名后跟雙括號,再跟雙大括號。通過函數名直接調用,不加小括號。
    #!/bin/bash
    func() {
    VAR=$((1+1))
    return $VAR
    echo "This is a function."
    }
    func
    echo $?
    # bash test.sh 
    2
    

    數組

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

    3.6.1 定義一個 httpd 安裝的函數 —案例

    創建 apache 軟件安裝函數

    [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 "\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
    # 調用函數,傳參為1
    

    3.6.2 遍歷數組元素 — 案例

    遍歷數組元素

    #方法 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 編程實戰 案例

    4.1 shell 腳本實戰之 系統備份腳本 —案例

    Tar 工具全備、增量備份網站,Shell 腳本實現自動打包備份

    #!/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:Please Enter Your Backup Files or Directories--------------------------------------------Usage: { $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  "--------------------------------------------\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  "-----------------------------------------\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 腳本 實戰 之收集系統信息 —案例

    Shell 腳本實現服務器信息自動收集

    cat <++++++++++++++++++++++++++++++++++++++++++++++
    ++++++++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 腳本實戰 之 一鍵部署 lnmp 架構 — 案例

    批量部署 lnmp 架構

    [root@web-server01~/script]# vim lnmp.sh 
    #!/bin/bash
    #install lnmp
    #by author rivers on 2021-9-28
    # nginx 環境準備
    Nginx_url=https://nginx.org/download/nginx-1.20.1.tar.gz
    Nginx_prefix=/usr/local/nginx
    # mysql 環境準備
    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 環境準備
    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 "\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 "\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
    
    shellshell 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 工程師,會寫好的腳本不僅能提高工作效率,還能有更多的時間做自己的事。最近在網上沖浪的時候,也注意收集一些大佬寫過的腳本,匯總整理一下,歡迎收藏,與君共勉!
    VMPWN的入門系列-2
    2023-08-03 09:29:42
    解釋器是一種計算機程序,用于解釋和執行源代碼。與編譯器不同,解釋器不會將源代碼轉換為機器語言,而是直接執行源代碼。即,這個程序接收一定的解釋器語言,然后按照一定的規則對其進行解析,完成相應的功能,從本質上來看依然是一個虛擬機。總的來說,如果輸入字符數小于0x10,string類的大概成員應該如下struct?
    0x02 Webshell簡介webshell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種代碼執行環境,主要用于網站管理、服務器管理、權限管理等操作。使用方法簡單,只需上傳一個代碼文件,通過網址訪問,便可進行很多日常操作,極大地方便了使用者對網站和服務器的管理。
    不甘心,案例找不出來,我把代碼審計一遍還不行嗎?于是就通過webshell打包了一份代碼,于是便有了這篇文章。0x02 漏洞利用還是先簡單聊聊sql注入如何拿下內網的吧。因此可以下定結論,該漏洞在未經授權就可被利用。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类