Linux之shell脚本篇(四)

一、函数使用

  • 定义:将一组命令集或语句形成一个可用块称为shell函数
  • 语法格式:function name()以{ 开头 以}结尾
  • 函数调用:
bash 复制代码
### v1版本函数调用
#!/bin/bash

# ***************************************************************************
# * 
# * @file:1_test.sh 
# * @author:www.hxd666.cn 
# * @date:2025-07-31 19:40 
# * @version 1.0  
# * @description: Shell script 
# * @Copyright (c)  all right reserved 
#* 
#**************************************************************************/ 

function downlod_nginx(){
	wget -c http://nginx.org/download/nginx-1.26.3.tar.gz -P /usr/src/
}

function extract_nginx(){
	cd /usr/src/;
	ls -l nginx-1.26.3.tar.gz;
	tar -xzvf nginx-1.26.3.tar.gz;
}

downlod_nginx
extract_nginx


### v2版本位置变量
#!/bin/bash

# ***************************************************************************
# * 
# * @file:1_test.sh 
# * @author:www.hxd666.cn 
# * @date:2025-07-31 19:40 
# * @version 1.0  
# * @description: Shell script 
# * @Copyright (c)  all right reserved 
#* 
#**************************************************************************/ 

function downlod_nginx(){
	wget -c http://nginx.org/download/nginx-1.26.3.tar.gz -P /usr/src/
}

function extract_nginx(){
	cd /usr/src/;
	ls -l nginx-1.26.3.tar.gz;
	tar -xzvf nginx-1.26.3.tar.gz;
}

$1

nginx脚本之一键调用函数代码

bash 复制代码
#!/bin/bash
#2025年7月22日08:01:28
#auto install nginx
#by author www.hxd666.com
########################

NGX_VER="$1"
NGX_URL="http://nginx.org/download"
NGX_SOFT="nginx-${NGX_VER}.tar.gz"
NGX_DIR="/usr/local/nginx"
NGX_ARGS="--user=www --group=www --with-http_stub_status_module"
NGX_SRC=$(echo $NGX_SOFT | sed 's/.tar.gz//g')

function print_help(){
            echo -e "\033[32m--------------\033[0m"
#!/bin/bash     
#2025年7月22日08:01:28
#auto install nginx
#by author www.hxd666.com
########################

NGX_VER="$1"
NGX_URL="http://nginx.org/download"
NGX_SOFT="nginx-${NGX_VER}.tar.gz"
NGX_DIR="/usr/local/nginx"
NGX_ARGS="--user=www --group=www --with-http_stub_status_module"
NGX_SRC=$(echo $NGX_SOFT | sed 's/.tar.gz//g')

function print_help(){
            echo -e "\033[32m--------------\033[0m"
                echo -e "\033[32mUsage:{/bin/sh $0 1.23.0|1.26.6|help}\033[0m"
                    exit

}
## 判断位置参数个数
if [ $# -eq 0 ];then
        print_help
fi

                    if [ $1 == "help" -o $1 == "-h" ];then
                        print_help
                    fi

                    function install_nginx(){
                        CHECK_NUM=$(rpm -qa | grep -wE "gcc|pcre-devel|zlib-devel"|wc -l)
                    wget -c $NGX_URL/$NGX_SOFT -P /usr/src/

                    # 解压源码压缩包,切换到源码目录
                    cd /usr/src/
                    ls -l $NGX_SOFT
                    tar -zxvf $NGX_SOFT
                    cd $NGX_SRC
                    # 创建用户和组
                    useradd -s /sbin/nologin www -M
                    # 预编译、编译,安装
                    ./configure --prefix=$NGX_DIR $NGX_ARGS
                    make -j4
                    make -j4 install

                    # 查看是否部署成功
                    ls -l $NGX_DIR

                    # 启动nginx服务进程
                    $NGX_DIR/sbin/nginx

                    # 查看nginx进程
                    ps -ef | grep -aiE nginx

                    # firewalld防火墙对外开放80端口
                    firewall-cmd --add-port=80/tcp --permanent
                }
                if [ ! -f $NGX_DIR/sbin/nginx  ];then
                        install_nginx

                else
                        ls -ld $NGX_DIR/
                        ls -l $NGX_DIR/
                        echo -e "\033[31m-------------------\033[0m"
                        echo -e "\033[31mNginx已经部署完成,请确认是否重装? yes/no \033[0m"
                        read INPUT
                        if [     $INPUT == "yes" -o $INPUT == "y" ];then
                                install_nginx;
                        fi
                fi

nginx脚本之优化更新功能、卸载功能

bash 复制代码
#!/bin/bash
#2025年7月22日08:01:28
#auto install nginx
#by author www.hxd666.com
########################
 
NGX_VER="1.26.1"
NGX_URL="http://nginx.org/download"
NGX_SOFT="nginx-${NGX_VER}.tar.gz"
NGX_DIR="/usr/local"
NGX_ARGS="--user=www --group=www --with-http_stub_status_module"
NGX_SRC=$(echo $NGX_SOFT | sed 's/.tar.gz//g')
		    function install_nginx(){
		   	CHECK_NUM=$(rpm -qa | grep -wE "gcc|pcre-devel|zlib-devel"|wc -l)
			if [ $CHECK_NUM -lt 4 ];then
				yum -y install gcc pcre-devel zlib-devel
			fi
		    wget -c $NGX_URL/$NGX_SOFT -P /usr/src/
		     
		    # 解压源码压缩包,切换到源码目录
		    cd /usr/src/
		    ls -l $NGX_SOFT
		    tar -zxvf $NGX_SOFT
		    cd $NGX_SRC
		    # 创建用户和组
		    useradd -s /sbin/nologin www -M
		    # 预编译、编译,安装
		    ./configure --prefix=$NGX_DIR $NGX_ARGS
		    make -j4
		    make -j4 install
		     
		    # 查看是否部署成功
		    ls -l $NGX_DIR
		     
		    # 启动nginx服务进程
		    $NGX_DIR/sbin/nginx
		     
		    # 查看nginx进程
		    ps -ef | grep -aiE nginx
		     
		    # firewalld防火墙对外开放80端口
		    firewall-cmd --add-port=80/tcp --permanent
		}

		## nginx更新
		function update_nginx(){
			## 判断nginx程序是否安装
			if [ ! -f $NGX_DIR/sbin/nginx ];then
				echo "Nginx未安装,是否需要重新安装nginx yes/no"
				read INPUT
				if [ $INPUT == "yes" -o $INPUT == "y" ];then
					install_nginx
					exit
				fi
			fi
			echo "-----------------"
			echo -e  "请输入你要升级/降级的nginx版本号,例如1.24.0"			
			read NGX_VER
		     	NGX_SOFT="nginx-$NGX_VER.tar.gz"
			NGX_SRC=$(echo $NGX_SOFT | sed 's/.tar.gz//g')
			NGX_ARGS="--user=www --group=www --with-http_stub_status_module"
		       	wget -c $NGX_URL/$NGX_SOFT -P /usr/src/
		     
		    # 解压源码压缩包,切换到源码目录
		    cd /usr/src/
		    if [ -f  $NGX_SOFT ];then 
		    	ls -l $NGX_SOFT
		    	tar -zxvf $NGX_SOFT
		   	 cd $NGX_SRC
		   	 # 创建用户和组
		    	useradd -s /sbin/nologin www -M
		    # 预编译、编译,安装
		   	 ./configure --prefix=$NGX_DIR $NGX_ARGS
		   	 make -j4
		   	 make -j4 install
		     
		    # 查看是否部署成功
		    	ls -l $NGX_DIR
		     
		    # 启动nginx服务进程
		   	mv  $NGX_DIR/sbin/nginx $NGX_DIR/sbin/nginx.old
		     
		   # 启动nginx服务进程
			cp objs/nginx $NGX_DIR/sbin
			$NGX_DIR/sbin/nginx -s reload
		    # 查看nginx进程
		    ps -ef | grep -aiE nginx
		     
		    # firewalld防火墙对外开放80端口
		    firewalld -cmd --add-port=80/tcp --permanent
		    systemctl reload firewalld.service
		    ## 查看nginx版本信息
		   $NGX_DIR/sbin/nginx -v
		    fi
		}

		function remove_nginx(){
			echo -e "\033[31m---------------\033[0m"
			echo -e "\033[31m--请确认是否删除,删除无法确认,yes/no ?----\033[0m"
			read INPUT 
			if [ $INPUT == "yes" -o $INPUT == "y" ];then 
			pkill nginx
                        sleep 5
			## 删除nginx源代码安装包
 			rm -rf /usr/src/nginx*
			## 删除ngin程序目录
			rm -rf $NGX_DIR/
			## 删除依赖库
			yum -y remove pcre-devel zlib-devel openssl-devel
			
			echo -e "\033[32m---------------\033[0m"
			echo -e "\033[32m-----nginx web已经删除,请查看----\033[0m"
			fi		
	}

	case $1 in
		1)
		install_nginx
		;;
		2)
		update_nginx
		;;
		3)
		remove_nginx
		;;
		*)
		echo -e "\033[32m---------------\033[0m"
		echo "1)Install nginx"
		echo "2)update nginx"
		echo "3)remove nginx"
		echo -e "\033[32mUsage:$0-----install_1|2|3|help-\033[0m"
		;;
esac

函数传参测试

bash 复制代码
#!/bin/bash
function download_nginx(){
	    NGX_VER=$1
	        wget -c "http://nginx.org//download//nginx-$NGX_VER.tar.gz" -P /usr/src

	}

function remove_nginx(){
	NGX_VER=$1
	echo "已经删除nginx"
	rm -rf /usr/src/$NGX_VER
}


case $1 in
	-d | -D )
	shift 1
	download_nginx $1
	;;
	-r | -R )
	remove_nginx
	;;
esac	

二、shell编程四剑客之Find

通过find命令可以查找以目标文件开头的文件,也可以以文件名进行修改

bash 复制代码
## 以指定名字进行搜素
find  / -name "*.log" -a naem "dnf"        

## 查找一定时间范围内的文件 (-a 与 -o或)
find / -name  "*.log" -a -name "dnf*" -a -mtime [-、+、30]

## 查找30天之内的文件且全=权限为644
find / -name "*.log" -name  "dnf*" -mtime -30 -perm 644;


## 限制大小 -size
find / -name "*.log" -name  "dnf*" -mtime -30 -perm 644 -size +1M;



## 查找普通文件,软链接文件,文件夹
find / -name "*.log" -name  "dnf*" -mtime -30 -perm 644 -size +1M -type d;(文件夹)
find / -name "*.log" -name  "dnf*" -mtime -30 -perm 644 -size +1M -type f;(普通文件)
find / -name "*.log" -name  "dnf*" -mtime -30 -perm 644 -size +1M -type ;(软链接)


## 限制所属用户、所属组
find / -name "*.log"  -user adm -group adm




                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

find结合shell编程拷贝多个文件

方法1

bash 复制代码
#!/bin/bash
for i in $( find / -name "*.log" -name  "dnf*" -mtime -30 -perm 644 -size +1M );
do
    cp $i /tmp/
done

方法2

bash 复制代码
 find / -name "*.log" -name  "dnf*" -mtime -30 -perm 644 -size +1M -exec cp {} /tmp \;

文件时间属性

当文件内容被修改了修改的是modify属性,当文件权限被修改属于ctime属性,当查看文件access(atime)属性会改变,这里为了节省磁盘读取io可以使用noatime 避免磁盘频繁读取io

三、shell编程四剑客之SED

所谓sed也叫文本编辑器,主要用于对文本中的文件内容进行修改,相较于vim编辑器属于非交互的形式修改文本内容

实验环境前置准备

perl 复制代码
for i in $(seq 1 5);do echo 10.0.0.$i root 123456 ; done >> list.txt

开始使用sed工具

1.vim工具表示方法 <=====> :%s/root/admin/g

2.sed工具表示方法 <=====> sed -i s/root/admin/g list.txt

3.sed中单引号和双引号的区别

perl 复制代码
## 单引号的使用(定义的变量无法被正常解析)
WEB=www.baidu.com
sed 's/root/$WEB/g' list.txt

## 双引号的使用(定义的变量可以 被正常解析)

sed "s/root/$WEB/g" list.txt

4.处理屏蔽过程(-n)以及打印范围(/p)

perl 复制代码
## 处理屏蔽过程-n
sed -n "/10.0.0.3/,/10.0.0.5/p" list.txt


## 支持多个表达式同时工作
sed -n  -e "/10.0.0.3/p" -e "/10.0.0.5/p" list.txt
sed -n  -e "/10.0.0.3/p;/10.0.0.5/p" list.txt

## 显示第四行到最后一行所有内容
sed -n '4,$p' list.txt 

  

5.打印一定格式的文本内容

perl 复制代码
## 方式一:使用sed替换

for i in $(seq 1 $(cat list.txt | wc -l));
do
    sed -i -e "${i}s/^/${i}) /g" -e "${i}s/$/\. /g" list.txt
done

## 方式二:使用sed特性
sed = list.txt | sed 'N;s/\n/) /g'| sed 's/$/\./g' 

6.匹配特定行并替换特定数据

perl 复制代码
## 匹配修改特定行数值
sed '/10.0.0.5/s/root/admin/g' list.txt

## 匹配修改除特定行数值
sed '/10.0.0.5/!s/root/admin/g' list.txt

7.删除特定位置的文本

bash 复制代码
## 删除最后一行
sed -i '$d' list.txt

## 删除最后三行
for i in $( seq 1 3 ) ;
do
    sed -i '%d' list.txt;
done

 
## 删除一定范围的数据
sed '/10.0.0.5/,/10.0.0.6/d' list.txt


## 删除nginx空格和以#开头的行
sed -i -e '/#/d' -e '/^$/d' nginx.conf

## 删除配置文件中server到末尾所有文件
sed -i '/server/,$d' nginx.conf

## 在末尾加入#include和}内容
sed -i 'keepalive_timeout/ainclude domains/*;\n}' nginx.conf

四、shell编程四剑客之AWK

perl 复制代码
语法组成
awk 'pattern' 'action' 文件名

依次根据指定格式取出指定格式的内容

perl 复制代码
[root@10.0.0.5 ~/2025-08-06]#awk '{print $1,$2}' list.txt
192.168.101.1 admin
192.168.101.2 admin
192.168.101.3 admin
192.168.101.4 admin
192.168.101.5 admin

## 将ip追加到指定文本中
[root@10.0.0.5 ~/2025-08-06]#awk '{print $1}'>>"ip.txt" list.txt 
[root@10.0.0.5 ~/2025-08-06]#awk '{print $1}' list.txt >> ip.txt 

打印出指定的某一行内容

perl 复制代码
[root@10.0.0.5 ~/2025-08-06]#awk '/192.168.101.2/{print $0}' list.txt
192.168.101.2 admin 123456
  • 打印一段区间的内容
perl 复制代码
[root@10.0.0.5 ~/2025-08-06]#awk '/192.168.101.2/,/192.168.101.4/{print $0}' list.txt
192.168.101.2 admin 123456
192.168.101.3 admin 123456
192.168.101.4 admin 123456
  • 打印指定行内容
perl 复制代码
[root@10.0.0.5 ~/2025-08-06]#awk 'NR==2 {print $0}' list.txt
192.168.101.2 admin 123456
[root@10.0.0.5 ~/2025-08-06]#awk 'NR>=3 {print $0}' list.txt
192.168.101.3 admin 123456
192.168.101.4 admin 123456
192.168.101.5 admin 123456
[root@10.0.0.5 ~/2025-08-06]#awk 'NR>=1&&NR<=3 {print $0}' list.txt
192.168.101.1 admin 123456
192.168.101.2 admin 123456
192.168.101.3 admin 123456
[root@10.0.0.5 ~/2025-08-06]#awk 'NR>=1||NR<=3 {print $0}' list.txt
192.168.101.1 admin 123456
192.168.101.2 admin 123456
192.168.101.3 admin 123456
192.168.101.4 admin 123456
192.168.101.5 admin 123456
  • 取出特定内容
perl 复制代码
## 取出了ip的最后一位
[root@10.0.0.5 ~/2025-08-06]#awk '{print $1}' list.txt | awk -F \. '{print $4}'
1
2
3
4
5


## 将取出的内容进行累加
[root@10.0.0.5 ~/2025-08-06]#seq 1 100|awk '{sum+=$1}END{print sum}'
5050


## 取出原数据的min
[root@10.0.0.5 ~/2025-08-06]#awk '{print $2}' list.txt | awk -F \ad '{print $2}'
min
min
min
min
min

## 使用多个方式进行切割
[root@10.0.0.5 ~/2025-08-06]#awk -F '[ .]' '{print $4}' list.txt 
1
2
3
4
5

## 累加末尾数字
[root@10.0.0.5 ~/2025-08-06]#awk -F '[ .]' '{print $4}' list.txt | awk '{sum+=$1}END{print sum}'
15
  • 前后加入特定的内容
perl 复制代码
[root@10.0.0.5 ~/2025-08-06]#awk '{print NR,$0"."}' list.txt
1 192.168.101.1 admin 123456.
2 192.168.101.2 admin 123456.
3 192.168.101.3 admin 123456.
4 192.168.101.4 admin 123456.
5 192.168.101.5 admin 123456.


[root@10.0.0.5 ~/2025-08-06]#awk '{print NR")",$0"."}' list.txt
1) 192.168.101.1 admin 123456.
2) 192.168.101.2 admin 123456.
3) 192.168.101.3 admin 123456.
4) 192.168.101.4 admin 123456.
5) 192.168.101.5 admin 123456.


## 引入变量
[root@10.0.0.5 ~/2025-08-06]#H=hello,world
[root@10.0.0.5 ~/2025-08-06]#awk '{ print "'$H'",$0}' list.txt 
hello,world 192.168.101.1 admin 123456
hello,world 192.168.101.2 admin 123456
hello,world 192.168.101.3 admin 123456
hello,world 192.168.101.4 admin 123456
hello,world 192.168.101.5 admin 123456

## 调用变量
[root@10.0.0.5 ~/2025-08-06]#awk -v H=hello '{print H,$0}' list.txt
hello 192.168.101.1 admin 123456
hello 192.168.101.2 admin 123456
hello 192.168.101.3 admin 123456
hello 192.168.101.4 admin 123456
hello 192.168.101.5 admin 123456

NF与$NF区别

awk嵌套if条件判断

perl 复制代码
[root@10.0.0.5 ~/2025-08-06]#awk 'NR%2==0 {print $0}' list.txt
192.168.101.2 admin 123456
192.168.101.4 admin 123456
[root@10.0.0.5 ~/2025-08-06]#awk 'NR%2==0 {next}{print $0}' list.txt
192.168.101.1 admin 123456
192.168.101.3 admin 123456
192.168.101.5 admin 123456
perl 复制代码
[root@10.0.0.5 ~/2025-08-06]#echo 100 200 300 | awk '{if((($1>=100))&&(($3>=200))) {print $2} else {print $3} fi}'
200

五、shell编程四剑客之GREP

grep工具有三种使用方法egrep(grep -E),fgrep(grep -F),grep

grep用法之关键词匹配

perl 复制代码
##关键词匹配
grep root list.txt

## 变量匹配
R=root
grep "$R" list.txt

## 多条件匹配
grep -E 'ROOT|root' list.txt
egrep 'root|ROOT' list.txt


## 忽略大小写匹配(-a 匹配文本 -i忽略大小写,-E多条件匹配 -c匹配符合条件的数目)

grep -i "ROOT" list.txt

grep -aiE -c 'ROOT|192' list.txt


## 匹配指定的单词数(-c)

grep -aiE -w 'ROOT' list.txt

综合实践之nginx配置虚拟主机

bash 复制代码
function add_vhost(){
		read -p "请输入虚拟主机的域名:" NGX_VHOST
		for NGX_VHOST in $NGX_VHOST
		do
		## 切换到nginx配置目录
		cd $NGX_DIR/conf/
		## 备份配置文件目录
		\cp nginx.conf nginx.conf.bak
		##修改配置文件内容
		sed -i -e "/#/d" -e "/^$/d" /usr/local/nginx/conf/nginx.conf
		## 删除server后面的内容
		sed -i -e "/^#/d" -e "/^$/d" -e "/server/,//d" nginx.conf
		grep -aiE 'include domains' $NGX_VHOST >>/dev/null
		if [ $? -eq 0 ];then
			echo -e "	include domains/*;\n}" >> nginx.conf
			mkdir -p domains/
			\cp nginx.conf nginx.conf.bak
			##修改配置文件内容
			sed -i -e "/#/d" -e "/^$/d" /usr/local/nginx/conf/nginx.conf
			## 删除server后面的内容
			sed -i -e "/^#/d" -e "/^$/d" -e "/server/,//d" nginx.conf
			## 切换到domains目录创建虚拟主机
			cd domains/

		fi
		ls $NGX_VHOST >>/dev/null 2>&1
		if [ $? -ne 0 ];then cat > $NGX_VHOST <<-EOF
			server {
				listen	80;
				server_name $NGX_VHOST;
				location / {
					root html;
					index index.html index.htm;
				}		
			}
EOF
			## 重启nginx配置文件
			$NGX_DIR/sbin/nginx -s reload;
			## 提示创建成功
			echo -e "\033[32m----------\033[0m"
			echo -e "\033[32m---$NGX_VHOST虚拟主机创建成功----\033[0m"	

			cat $NGX_VHOST
			cat > /usr/local/nginx/html/index.html <<-EOF

			<h1> $NGX_VHOST</h1>
			<hr color="red">
		EOF
		else
			
		            echo -e "\033[32m----------\033[0m"
			    echo -e "\033[32m---$NGX_VHOST虚拟主机已经存在,无需进行添加----\033[0m"  
		fi
	done

}

六、shell编程之数组

简要概述

概述:用于将一组数据类型组合在一起的数据用法,称作为一个数组

perl 复制代码
## 变量的应用
oot@10.0.0.5 ~]#WEB1=www.baidu.com
[root@10.0.0.5 ~]#WEB2=www.qq.com
[root@10.0.0.5 ~]#WEB3=www.4399.com

## 数组的引用
[root@10.0.0.5 ~]#WEB=(www.jd.com www.qq.com www.4399.com)
[root@10.0.0.5 ~]#echo ${WEB[0]}
www.jd.com

使用场景应用

基础使用

perl 复制代码
## 传统的使用方法
[root@10.0.0.5 ~]#IP1=$(echo 192.168.1.100 | awk -F \. '{print $1}')
[root@10.0.0.5 ~]#echo $IP1
192
[root@10.0.0.5 ~]#IP2=$(echo 192.168.1.100 | awk -F \. '{print $2}')
[root@10.0.0.5 ~]#echo $IP2
168
[root@10.0.0.5 ~]#IP3=$(echo 192.168.1.100 | awk -F \. '{print $3}')
[root@10.0.0.5 ~]#echo $IP3
1
[root@10.0.0.5 ~]#IP4=$(echo 192.168.1.100 | awk -F \. '{print $4}')
[root@10.0.0.5 ~]#echo $IP4
100


## 使用数组的方法进行分隔
[root@10.0.0.5 ~]#IP=($(echo 192.168.1.100 |sed 's/\./ /g'))

[root@10.0.0.5 ~]#echo ${IP[0]}
192

[root@10.0.0.5 ~]#echo ${IP[1]}
168




##lnmp插件包的安装
[root@10.0.0.5 ~]#LNMP=(nginx nginx-devel mysql-server mysql php php-fpm)
[root@10.0.0.5 ~]#
[root@10.0.0.5 ~]#yum -y install ${LNMP[0]}
OS                                                                                                                                                           228 kB/s | 2.7 kB     00:00    
everything                                                                                                                                                   316 kB/s | 2.8 kB     00:00    
EPOL                                                                                                                                                         326 kB/s | 2.8 kB     00:00    
debuginfo                                                                                                                                                    325 kB/s | 2.8 kB     00:00    
source                                                                                                                                                       
Package nginx-1:1.21.5-9.oe2203sp4.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

## 打印参数
[root@10.0.0.5 ~]#echo ${LNMP[@]}
nginx nginx-devel mysql-server mysql php php-fpm

[root@10.0.0.5 ~]#echo ${IP[@]}
192 168 1 100

## 确定字符长度
[root@10.0.0.5 ~]#echo ${#IP[@]}
4
[root@10.0.0.5 ~]#echo ${#IP[3]}
3

##使用oprint $1}')
[root@10.0.0.5 ~]#echo $IP1
192
[root@10.0.0.5 ~]#IP2=$(echo 192.168.1.100 | awk -F \. '{print $2}')
[root@10.0.0.5 ~]#echo $IP2
168
[root@10.0.0.5 ~]#IP3=$(echo 192.168.1.100 | awk -F \. '{print $3}')
[root@10.0.0.5 ~]#echo $IP3
1
[root@10.0.0.5 ~]#IP4=$(echo 192.168.1.100 | awk -F \. '{print $4}')
[root@10.0.0.5 ~]#echo $IP4
100


## 使用数组的方法进行分隔
[root@10.0.0.5 ~]#IP=($(echo 192.168.1.100 |sed 's/\./ /g'))

[root@10.0.0.5 ~]#echo ${IP[0]}
192

[root@10.0.0.5 ~]#echo ${IP[1]}
168




##lnmp插件包的安装
[root@10.0.0.5 ~]#LNMP=(nginx nginx-devel mysql-server mysql php php-fpm)
[root@10.0.0.5 ~]#
[root@10.0.0.5 ~]#yum -y install ${LNMP[0]}
OS                                                                                                                                                           228 kB/s | 2.7 kB     00:00    
everything                                                                                                                                                   316 kB/s | 2.8 kB     00:00    
EPOL                                                                                                                                                         326 kB/s | 2.8 kB     00:00    
debuginfo                                                                                                                                                    325 kB/s | 2.8 kB     00:00    
source                                                                                                                                                       
Package nginx-1:1.21.5-9.oe2203sp4.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

## 打印参数
[root@10.0.0.5 ~]#echo ${LNMP[@]}
nginx nginx-devel mysql-server mysql php php-fpm

[root@10.0.0.5 ~]#echo ${IP[@]}
192 168 1 100

## 确定字符长度
[root@10.0.0.5 ~]#echo ${#IP[@]}
4
[root@10.0.0.5 ~]#echo ${#IP[3]}
3

##使用切片确定其长度
#### 从索引1元素开始分割
[root@10.0.0.5 ~]#echo ${LNMP[@]:1}

#### 从索引0元素开始分割
[root@10.0.0.5 ~]#echo ${LNMP[@]:0}


####  查找索引2到索引3内容
[root@10.0.0.5 ~]#echo ${IP[@]:1:2}
168 1

 
#### 修改IP索引
[root@10.0.0.5 ~]#IP=(192 168 [2]=101 100)
[root@10.0.0.5 ~]#echo ${IP[@]}
192 168 101 100


## 替换查找的内容
### 搜索101内容替换成201
[root@10.0.0.5 ~]#IP=($(echo ${IP[@]/101/201}))
[root@10.0.0.5 ~]#
[root@10.0.0.5 ~]#
[root@10.0.0.5 ~]#echo ${IP[@]}
192 168 201 100


## 删除下标中的元素
unset IP[0]


## 删除全部内容
unset IP

配置网卡信息一键脚本自动化实现

bash 复制代码
#!/bin/bash
NETWORK=(
    IPADDR=$(ifconfig ens33|grep -aiE "netmask" |awk '{print $2}')
    NETMASK=$(ifconfig ens33|grep -aiE "netmask" |awk '{print $4}')
    GATEWAY=$(route -n|grep -aiwE "UG" |awk '{print $2}')
    DNS1=$(cat /etc/resolve.conf | grep -aiE "nameserver"|awk 'NR==1 {print $2}' )
)

cat>>/etc/sysconfig/network-scripts/ifcfg-ens33 <<EOF
${NETWORK[0]}
${NETWORK[1]}
${NETWORK[2]}
${NETWORK[3]}
EOF

sed -i '/BOOTPROTO/s/dhcp/static/g' ifcfg-ens33

实现tomcat管理脚本

bash 复制代码
==========需要实现如下功能=================
## 安装tomcat

## 删除tomcat

## 支持添加单个nginx实例

## 支持添加多个nginx实例

## 将tomcat实例加入nginx均衡池中
v1版本之tomcat安装和删除
bash 复制代码
### 将window编码转换成unix编码形式
dos2unix auto_config_tomcat_v1.sh

###############

#!/bin/bash

####### 安装tomcat ########

# 安装jdk工具
yum -y install java 
# 查看jdk版本
java -version
# 从apache官网下载tomcat软件包
wget -c https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.108/bin/apache-tomcat-9.0.108.tar.gz
# cd 切换到/usr/src
cd /usr/src
ls -l apache-tomcat-9.0.108.tar.gz
# 通过tar工具进行解压
tar -zxvf apache-tomcat-9.0.108.tar.gz
# 将tar包放入目标目录
\cp -a apache-tomcat-9.0.108 /usr/local/tomcat_v1.jfedu.net/
# 查看是否部署成功
ls -l /usr/local/tomcat_v1.jfedu.net/

# 启动tomcat服务进程
/usr/local/tomcat_v1.jfedu.net/bin/startup.sh
ps -ef | grep -aiWE "8005|8080"

## 开放防火墙和端口
firewalld-cmd --add-port=8080/tcp --permanent
systemctl reload firewalld.service




####### 删除tomcat ########
## 移除jdk环境
yum -y remove java
## 停止进程
/usr/local/tomcat_v1.jfedu.net/bin/shutdown.sh
## 等待5s
sleep 5
## 查看tomcat进程状态
ps -ef | grep -aiE "v1.jfedu.net"
## 删除tomcat主程序文件
rm -rf /usr/local/tomcat_v1.jfedu.net/
v2版本之tomcat函数组装
bash 复制代码
TOMCAT_VER=9.0.108
TOMCAT_SOFT="apache-tomcat-${TOMCAT_VER}.tar.gz"
TOMCAT_URL="https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.108/bin/apache-tomcat-    9.0.108.tar.gz"
TOMCAT_DIR="/usr/local/tomcat"
TOMCAT_VHOST="v1.jfedu.net"
TOMCAT_SRC=$(echo $TOMCAT_SOFT|sed -i 's/\.tar.*//g')
function install_tomcat(){
        # 安装jdk工具
    yum -y install java 
    # 查看jdk版本
    java -version
    # 从apache官网下载tomcat软件包
    wget -c $TOMCAT_URL
    # cd 切换到/usr/src
    cd /usr/src
    ls -l apache-tomcat-9.0.108.tar.gz
    # 通过tar工具进行解压
    tar -zxvf apache-tomcat-9.0.108.tar.gz
    # 将tar包放入目标目录
    \cp -a apache-tomcat-9.0.108 /usr/local/tomcat_v1.jfedu.net/
    # 查看是否部署成功
    ls -l /usr/local/tomcat_v1.jfedu.net/
    
    # 启动tomcat服务进程
    /usr/local/tomcat_v1.jfedu.net/bin/startup.sh
    ps -ef | grep -aiWE "8005|8080"    
    ## 开放防火墙和端口
    firewalld-cmd --add-port=8080/tcp --permanent
    systemctl reload firewalld.service

}


function remove_tomcat()
{

####### 删除tomcat ########
## 移除jdk环境
yum -y remove java
## 停止进程
/usr/local/tomcat_v1.jfedu.net/bin/shutdown.sh
## 等待5s
sleep 5
## 查看tomcat进程状态
ps -ef | grep -aiE "v1.jfedu.net"
## 删除tomcat主程序文件
rm -rf /usr/local/tomcat_v1.jfedu.net/

}



case $1 in 
    1)
    install_tomcat
    ;;
    2)
    remove_tomcat
    ;;
    *)
    echo -e "\033[32m----------\033[0m"
    echo  "1) install tomcat"
    echo  "2) remove tomcat"
    echo  "3) Add tomcat vhost"
    echo -e "\033[32mUsage:{/bin/sh $0 1|2|3|help}\033[0m"
v3版本之tomcat虚拟主机组装
bash 复制代码
TOMCAT_VER=9.0.108
TOMCAT_SOFT="apache-tomcat-${TOMCAT_VER}.tar.gz"
TOMCAT_URL="https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.108/bin/apache-tomcat-    9.0.108.tar.gz"
TOMCAT_DIR="/usr/local/tomcat"
TOMCAT_VHOST="v1.jfedu.net"
TOMCAT_SRC=$(echo $TOMCAT_SOFT|sed -i 's/\.tar.*//g')
function install_tomcat(){
        # 安装jdk工具(检查残留unset删除变量)
    yum -y install java 
   source /etc/profile
    # 查看jdk版本
    java -version
    # 从apache官网下载tomcat软件包
    # wget -c $TOMCAT_URL

    # 通过下载压缩包上传到/usr/src
    cd /usr/src
    ls -l $TOMCAT_SOFT

    # cd 切换到/usr/src
    cd /usr/src
    ls -l apache-tomcat-9.0.108.tar.gz
    # 通过tar工具进行解压
    tar -zxvf apache-tomcat-9.0.108.tar.gz
    # 将tar包放入目标目录
    \cp -a $TOMCAT_SRC $TOMCAT_DIR_TOMCAT_VHOST/
    # 查看是否部署成功
    ls -l /usr/local/tomcat_v1.jfedu.net/
    
    # 启动tomcat服务进程
    /usr/local/tomcat_v1.jfedu.net/bin/startup.sh
    ps -ef | grep -aiWE "8001|7001"    
    ## 开放防火墙和端口
    firewalld-cmd --add-port=8001/tcp --permanent
    systemctl reload firewalld.service

}


function remove_tomcat()
{

####### 删除tomcat ########
read -p "请输入要删除的tomcat实例" TOMCAT_VHOST
## 移除jdk环境
yum -y remove java

  echo -e "\033[31m----------\033[0m"
  echo -e "\033[31m---请确认 是否删除tomcat实例${TOMCAT_VHOST}?-----\033[0m"  
   read $INPUT
    if [ $INPUT == "yes" -o $INPUT="y" ];then
        ## 停止进程
    /usr/local/tomcat_v1.jfedu.net/bin/shutdown.sh
    ## 等待5s
    sleep 5
    ## 查看tomcat进程状态
    ps -ef | grep -aiE "v1.jfedu.net"
    ## 删除tomcat主程序文件
    rm -rf /usr/local/tomcat_v1.jfedu.net/
  echo -e "\033[32m----------\033[0m"
  echo -e "\033[32m---TOMCAT实例已经删除成功-----\033[0m"  
    fi
}

#######  增加tomcat实例   ########

function add_tomcat(){
    ## 增加tomcat实例
    ## 请输入增加的tomcat实例名称
    read -p "请输入增加的tomcat实例名称:" TOMCAT_VHOST
    wget -c $TOMCAT_URL
    # cd 切换到/usr/src
    cd /usr/src
    ls -l apache-tomcat-9.0.108.tar.gz
    # 通过tar工具进行解压
    tar -zxvf apache-tomcat-9.0.108.tar.gz
    \cp -a $TOMCAT_SRC ${TOMCAT_DIR}_${TOMCAT_VHOST}
    # 这里修改原始监听端口为8001,HTTP端口为7001
    sed -i "s/8005/8001/g"${TOMCAT_SRC}/conf/server.xml
     sed -i "s/8080/7001/g" ${TOMCAT_SRC}/conf/server.xml
  # 查看是否部署成功
    ls -l /usr/local/tomcat_v1.jfedu.net/ 
    # 启动tomcat服务进程
    /usr/local/tomcat_v1.jfedu.net/bin/startup.sh
    ps -ef | grep -aiWE "8001|7001"    
    ## 开放防火墙和端口
    firewalld-cmd --add-port=8001/tcp --permanent
    systemctl reload firewalld.service

}


case $1 in 
    1)
    install_tomcat
    ;;
    2)
    remove_tomcat
    ;;
    *)
    echo -e "\033[32m----------\033[0m"
    echo  "1) install tomcat"
    echo  "2) remove tomcat"
    echo  "3) Add tomcat vhost"
    echo -e "\033[32mUsage:{/bin/sh $0 1|2|3|help}\033[0m"








## 匹配HTTP最大端口
for i in ${find /usr/local/ -name server.xml};do grep -aiE "port=" $i;done | grep -aiE "HTTP/1.1" | awk -F \" '{print $2}' |sort -n | tail -1

针对tomcat递增情况进行补充

bash 复制代码
#######  增加tomcat实例   ########
MAX_PORT=$(for i in ${find /usr/local/ -name server.xml};do grep -aiE "port=" $i;done | grep -aiE "HTTP/1.1" | awk -F \" '{print $2}' |sort -n | tail -1)
function add_tomcat(){
    ## 增加tomcat实例
    ## 请输入增加的tomcat实例名称
    read -p "请输入增加的tomcat实例名称:" TOMCAT_VHOST
    for TOMCAT_VHOST in $TOMCAT_VHOST
    do
    wget -c $TOMCAT_URL
    # cd 切换到/usr/src
    cd /usr/src
    ls -l apache-tomcat-9.0.108.tar.gz
    SHUTDOWN_PORT=$(expr $MAX_PORT +1000 +1)
    HTTP_PORT=$(expr  $MAX_PORT + 1 )
    # 通过tar工具进行解压
    tar -zxvf apache-tomcat-9.0.108.tar.gz
    \cp -a $TOMCAT_SRC ${TOMCAT_DIR}_${TOMCAT_VHOST}
    # 这里修改原始监听端口为8001,HTTP端口为7001
    # sed -i "s/8005/8001/g"${TOMCAT_SRC}/conf/server.xml
     # sed -i "s/8080/7001/g" ${TOMCAT_SRC}/conf/server.xml
     sed -i "s/8001/${SHUTDOWN_PORT}/g" ${TOMCAT_SRC}/conf/server.xml
      sed -i "s/7001/${HTTP_PORT}/g" ${TOMCAT_SRC}/conf/server.xml

  # 查看是否部署成功
   # ls -l /usr/local/tomcat_v1.jfedu.net/ 
    # 启动tomcat服务进程
    /usr/local/tomcat_v1.jfedu.net/bin/startup.sh
    ps -ef | grep -aiWE "8001|7001"    
    ## 开放防火墙和端口
    firewalld-cmd --add-port=8001/tcp --permanent
    systemctl reload firewalld.service
    echo -e "\033[32m-------------\033[0m"
     echo -e "\033[32m-----Tomcat实例添加成功-----\033[0m"
    done
}
相关推荐
TG_yunshuguoji23 分钟前
阿里云国际代理:阿里云的云数据库是什么?
服务器·数据库·安全·阿里云·云计算
那小子、真烦27 分钟前
配置阿里云 YUM 源指南
linux·运维
管家婆客服中心1 小时前
管家婆分销ERP A/V系列导出提示加载数据过大的处理方式
linux·服务器·apache
Austindatabases1 小时前
沧海要,《SQL SERVER 运维之道》,清风笑,竟惹寂寥
运维
久绊A2 小时前
指定端口-SSH连接的目标(告别 22 端口暴力破解)
linux·网络·ssh
ACRELKY5 小时前
光伏运维迎来云端革命!AcrelCloud-1200如何破解分布式光伏四大痛点?
运维·分布式
bantinghy7 小时前
Linux系统TCP/IP网络参数优化
linux·网络·tcp/ip
星期天要睡觉7 小时前
Linux 综合练习
linux·运维·服务器
saynaihe7 小时前
proxmox8升级到proxmox9
linux·运维·服务器
Delphi菜鸟8 小时前
docker 部署RustDesk服务
运维·docker·容器