• Shell 脚本



    一、Hello Shell

    # 1、创建一个`HelloShell.sh文件`。
    touch HelloShell.sh
    
    # 2、编写脚本。
    vim HelloShell.sh
    ------------------------------
    #!/bin/bash
    # This is ower first shell
    # by author rivers 2022.06
    echo "Hello Shell"
    ------------------------------
    
    # 3、查看脚本。
    cat HelloShell.sh
    ll HelloShell.sh
    #`-rw-r--r-- 1 root root 85 6月  28 20:24 HelloShell.sh`
    
    # 4、赋予执行权限。
    chmod o+x Helloword.sh 
    ll HelloShell.sh 
    #`-rw-r--r-x 1 root root 85 6月  28 20:24 HelloShell.sh`
    
    # 5、运行脚本。
    [root@qs shell]# ./HelloShell.sh  1 2 3
    #`Hello Shell`
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述


    二、Shell 变量

    • Shell变量名 在定义时。
    1. 首个字符必须为字母开头(a-z、A-Z)。
    2. 不能以数字开头。
    3. 中间不能有空格。
    4. 可以使用下划线(_)。
    5. 不能使用(-)。
    6. 不能使用 标点符号 等。
    # 等号左右不能有`空格`。
    [root@qs shell]# age=18
    [root@qs shell]# echo $age
    #`18`
    
    • 1
    • 2
    • 3
    • 4

    1. 系统变量

    • 主要是用于对 参数判断 和 命令返回值判断 时使用。
    echo ---------- 系统变量 ----------
    # 当前脚本的名称。
    echo '$0' = $0	
    # `$n`当前脚本的第n个参数`n=1,2,…9`。
    echo '$1' = $1
    # 当前脚本的所有参数(不包括程序本身)。
    echo '$*' = $*	
    # 当前脚本的参数个数(不包括程序本身)。
    echo '$#' = $#	
    # 命令或程序执行完后的状态,返回`0表示执行成功`。
    echo '$?' = $?	
    # 程序本身的`PID号`。
    echo '$$' = $?	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述


    2. 环境变量

    • 主要是在 程序运行时 需要设置。
    echo ---------- 系统变量 ----------
    # 所示路径,以`冒号分割`。
    echo 'PATH' = $PATH		
    # 打印`用户家目录`。
    echo 'HOME' = $HOME   		
    # 显示`当前Shell类型`。
    echo 'SHELL' = $SHELL 
    # 打印`当前用户名`。		
    echo 'USER' = $USER  	
    # 打印`当前用户ID`信息。	
    echo 'ID' = $ID    		    
    # 显示`当前所在路径`。
    echo 'PWD' = $PWD   		    
    # 打印`当前终端类型`。
    echo 'TERM' = $TERM  		
    # 显示`当前主机名`。
    echo 'HOSTNAME' = $HOSTNAME  
    # 定义主机命令提示符的。
    echo 'PS1' = $PS1      
    # 历史命令大小,可通过`HISTTIMEFORMAT变量`设置命令执行时间。      
    echo 'HISTSIZE' = $HISTSIZE  
    # 随机生成一个`0至32767`的整数。
    echo 'RANDOM' = $RANDOM       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述


    3. 用户变量

    • 用户变量 又称为 局部变量,主要用在 Shell脚本内部 或者 临时局部 使用。
    echo ---------- 用户变量 ----------
    # 自定义`变量a`。
    a=rivers
    echo 'a' = $a
    # 自定义`变量httpd_sort`。
    httpd_sort=httpd-2.4.6-97.tar
    echo 'Httpd_sort' = $httpd_sort
    # 自定义`变量BACK_DIR`。
    BACK_DIR=/data/backup/
    echo 'BACK_DIR' = $BACK_DIR
    # 自定义`变量IP_ADDRESS`。
    IP_ADDRESS=10.0.0.1
    echo 'IP_ADDRESS' = $IP_ADDRESS
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述


    三、颜色背景色

    echo ---------- 字体颜色 ----------
    # 字体颜色
    for i in {31..37}; do
    echo -e "\033[$i;40mHello Shell!\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 Java!\033[0m"
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述


    四、流程控制语句


    1. If 条件判断语句

    • If 条件判断语句,通常以 if开头,fi结尾。
    • 也可加入 else 或 elif 进行多条件的判断。

    echo ---------- If 条件判断语句 ----------
    # 单分支`if语句`
    if [ -f /etc/passwd ]
    then 
    	echo ok
    fi
    
    if [ 10 -eq 10 ]
    then
      	echo ok
    fi
    
    #if [ "root" =~ ^r ]
    #then
    #   echo ok
    #fi
    
    
    # 双分支`if语句`
    if [ 10 -eq 10 ]
    then
    	echo 成立
    else
       	echo 不成立
    fi
    
    
    # 多支条件语句
    if [ $1 -lt 20 ]
    then
    	echo 小了
    elif [ $1 -gt 20 ]
    then
    	echo 大了
    else
    	echo 相等
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在这里插入图片描述


    1.1 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      # 是否具有可执行权限。
    ||      # 单方成立。
    &&      # 双方都成立表达式。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.2 if 案例—单分支语句—判断crond进程是否在运行

    echo ---------- if 案例—单分支语句—判断crond进程是否在运行 ----------
    # 定义一个变量名
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述


    1.3 if 案例—单分支语句—判断系统目录是否存在

    echo ---------- if 案例—单分支语句—判断系统目录是否存在 ----------
    if [ -d /root/test -o -d /root/demo ];then
    	mkdir -p /root/demo 
    fi
    
    • 1
    • 2
    • 3
    • 4

    1.4 if 案例—多分支语句—判断学生分数等级

    echo ---------- if 案例—多分支语句—判断学生分数等级 ----------
    # `if语句`可以直接对命令状态进行判断,就省去了获取`$?`这一步。
    # 如果第一个条件符合,就不再向下匹配。  
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述


    2. for 循环语句

    # `for循环`格式。
    # for name [ [in [word ... ] ] ;] do list; done
    for '变量名' in '取值列表'; do
    	'语句1'
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.1 for 案例—检查同一局域网内,多个主机是否存活

    echo ---------- for 案例—检查同一局域网内,多台主机是否存活 ----------
    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
    
    ./ping.sh 127.0.0.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3. while 循环语句

    # 1、`while循环`与`for循环`功能类似,主要用于 对某个数据域进行循环读取、对文件进行遍历。
    # 2、通常用于需要循环某个文件或列表,满足循环条件会一直循环,不满足则退出循环。
    # 3、其语法格式以`while ... do`开头,`done`结尾。
    # - 与while关联的还有一个`until语句`,它与while不同之处在于,是当条件表达式为`false`时才循环,实际使用中比较少。
    
    while ('表达式')
    do
    	'语句1'
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.1 while 循环—break 和 continue 语句

    # 1、break:是终止循环。
    # 2、continue:是跳出当前循环。
    echo ---------- while 案例—在死循环中,满足条件终止循环 ----------
    while true; do
    	let N++
      	if [ $N -eq 5 ]; then
    		break
    	fi
      	echo $N
    done
    
    
    echo ---------- while 案例—continue ----------
    N=0
    while [ $N -lt 5 ]; do
    	let N++
    	if [ $N -eq 3 ]; then
      		continue
    	fi
      	echo $N
    done
    
    
    echo ---------- while 案例—打印1-5数字 ----------
    i=0
    while ((i<=5))
    do
    	echo  $i
      	i=`expr $i + 1`
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述


    3.2 while 案例—循环求1-100的总和

    echo ---------- while 案例—循环求1-100的总和 ----------
    j=0
    i=1
    while ((i<=100))
    do
    	j=`expr $i + $j`
        	((i++))
    done
    echo $j
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述


    3.3 while 案例—循环每10秒判断系统登录

    echo ---------- while 案例—循环每10秒判断系统登录 ----------
    # `root用户`是否登录系统。
    USERS="qs"
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述


    4. case 选择语句

    # 1、case选择语句,主要用于对多个选择条件进行匹配输出。
    # 2、与`if elif语句`结构类似,通常用于脚本 传递输入参数,打印出输出结果及内容。
    # 3、其语法格式以`case ... in`开头,`esac`结尾。
    case '模式名' in
    '模式1')
    	'命令'
        ;;
    '模式2')
       	'命令'
       	;;
    *)
    	'不符合以上模式,执行的命令'
    esac
    # 每个模式必须`以右括号结束`,命令结尾`以双分号结束`。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4.1 case 案例—编写http服务启动脚本

    echo ---------- case 案例—编写http服务启动脚本 ----------
    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)
    	echo -e "httpd服务退出"
    ;;
    *)
    	echo -e "httpd服务"
    ;;
    esac
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在这里插入图片描述


    5. select 选择语句

    # 1、`select语句`是一个类似于`for循环`的语句。
    # 2、`select语句`一般用于选择,常用于选择菜单的创建。
    # 3、可以配合`PS3`,来做打印菜单的输出信息。
    # 4、其语法格式以`select ... in do`开头,`done`结尾。
    
    select i in ('表达式') 
    do
    	'语句'
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5.1 select 案例—选择MySQL版本

    echo ---------- select 案例—选择MySQL版本 ----------
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述


    5.2 select 案例—打印lnmp菜单栏

    echo ---------- select 案例—打印lnmp菜单栏 ----------
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述


    五、函数 和 数组


    1. 函数

    # 1、Shell 允许将一组 命令集 或 语句 形成一个可用块,这些块称为 Shell函数。
    # 2、Shell函数 的用于只需定义一次,后期随时使用即可,无需在 Shell脚本 中添加重复的语句块。
    # 3、其语法格式以`function name() {`开头,以`}`结尾。
    
    # 4、Shell编程函数 默认不能将参数传入`()`内部。
    # 5、Shell函数参数 传递在调用函数名称传递,例如`name args1 args2`。
    
    # Shell函数 很简单,函数名后跟双括号,再跟双大括号。
    func() {
    	command1
    	command1
    	...
    }
    
    # 通过`函数名`直接调用,不加小括号。
    func
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    1.1 函数案例

    echo ---------- 函数案例 ----------
    func() {
    	VAR=$((1+1))
    	return $VAR
    	echo "This is a function."
    }
    
    func
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述


    1.2 函数案例—创建Apache软件安装

    echo ---------- 函数案例—创建Apache软件安装 ----------
    # 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
    }
    
    # 调用函数,传参为1
    Apache_install 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2. 数组

    # 1、数组 是相同类型的元素,按一定顺序排列的集合。
    # 2、格式:`array=(元素1 元素2 元素3 ...)
    
    # 3、用小括号初始化数组,元素之间用空格分隔。
    # 3.1、定义方法一:初始化数组`array=(a b c)`。
    # 3.2、定义方法二:新建数组并添加元素`array[下标]=元素`。
    # 3.3、定义方法三:将命令输出作为数组元素`array=($(command))`。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.1 数组案例—遍历数组元素一

    # 方法一
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.2 数组案例—遍历数组元素二

    # 方法二
    IP=(10.0.0.1 10.0.0.2 10.0.0.3)
    for IP in ${IP[*]}; do
    	echo $IP
    done 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    六、Shell 案例


    1. 案例—系统备份脚本

    • 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:\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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    2. 案例—服务器信息自动收集

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    3. 案例—一键批量部署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 "\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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129

  • 相关阅读:
    堆外内存和堆内内存及虚引用的应用
    网络空间内生安全数学基础(1)——背景
    flink技术总结待续
    Java的CAS和synchronized原理解析【干货】
    ChatGPT 和文心一言哪个更好用?
    期货开户合约的规模和价值
    GitHub下载量从19暴涨到5W,这份架构师学习路线只用了一晚
    Vue3:用vite创建Vue3项目
    基于红黑树对map和set容器的封装
    [PHP毕业设计源码]精品基于PHP实现的商城电商网站[包运行成功]
  • 原文地址:https://blog.csdn.net/qq_38667427/article/details/125509189