当前位置: 首页 > news >正文

Linux之shell脚本篇(四)

一、函数使用

  • 定义:将一组命令集或语句形成一个可用块称为shell函数
  • 语法格式:function name()以{ 开头    以}结尾
  • 函数调用:
### 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脚本之一键调用函数代码

#!/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 ];thenprint_help
fiif [ $1 == "help" -o $1 == "-h" ];thenprint_helpfifunction 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_SOFTtar -zxvf $NGX_SOFTcd $NGX_SRC# 创建用户和组useradd -s /sbin/nologin www -M# 预编译、编译,安装./configure --prefix=$NGX_DIR $NGX_ARGSmake -j4make -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  ];theninstall_nginxelsels -ld $NGX_DIR/ls -l $NGX_DIR/echo -e "\033[31m-------------------\033[0m"echo -e "\033[31mNginx已经部署完成,请确认是否重装? yes/no \033[0m"read INPUTif [     $INPUT == "yes" -o $INPUT == "y" ];theninstall_nginx;fifi
  • nginx脚本之优化更新功能、卸载功能

#!/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 ];thenyum -y install gcc pcre-devel zlib-develfiwget -c $NGX_URL/$NGX_SOFT -P /usr/src/# 解压源码压缩包,切换到源码目录cd /usr/src/ls -l $NGX_SOFTtar -zxvf $NGX_SOFTcd $NGX_SRC# 创建用户和组useradd -s /sbin/nologin www -M# 预编译、编译,安装./configure --prefix=$NGX_DIR $NGX_ARGSmake -j4make -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 ];thenecho "Nginx未安装,是否需要重新安装nginx yes/no"read INPUTif [ $INPUT == "yes" -o $INPUT == "y" ];theninstall_nginxexitfifiecho "-----------------"echo -e  "请输入你要升级/降级的nginx版本号,例如1.24.0"			read NGX_VERNGX_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_SOFTtar -zxvf $NGX_SOFTcd $NGX_SRC# 创建用户和组useradd -s /sbin/nologin www -M# 预编译、编译,安装./configure --prefix=$NGX_DIR $NGX_ARGSmake -j4make -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 --permanentsystemctl reload firewalld.service## 查看nginx版本信息$NGX_DIR/sbin/nginx -vfi}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 nginxsleep 5## 删除nginx源代码安装包rm -rf /usr/src/nginx*## 删除ngin程序目录rm -rf $NGX_DIR/## 删除依赖库yum -y remove pcre-devel zlib-devel openssl-develecho -e "\033[32m---------------\033[0m"echo -e "\033[32m-----nginx web已经删除,请查看----\033[0m"fi		}case $1 in1)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
  • 函数传参测试

#!/bin/bash
function download_nginx(){NGX_VER=$1wget -c "http://nginx.org//download//nginx-$NGX_VER.tar.gz" -P /usr/src}function remove_nginx(){NGX_VER=$1echo "已经删除nginx"rm -rf /usr/src/$NGX_VER
}case $1 in-d | -D )shift 1download_nginx $1;;-r | -R )remove_nginx;;
esac	

二、shell编程四剑客之Find

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

## 以指定名字进行搜素
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

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

方法2

 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编辑器属于非交互的形式修改文本内容

  • 实验环境前置准备

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中单引号和双引号的区别

## 单引号的使用(定义的变量无法被正常解析)
WEB=www.baidu.com
sed 's/root/$WEB/g' list.txt## 双引号的使用(定义的变量可以 被正常解析)sed "s/root/$WEB/g" list.txt

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

## 处理屏蔽过程-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.打印一定格式的文本内容

## 方式一:使用sed替换for i in $(seq 1 $(cat list.txt | wc -l));
dosed -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.匹配特定行并替换特定数据

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

7.删除特定位置的文本

## 删除最后一行
sed -i '$d' list.txt## 删除最后三行
for i in $( seq 1 3 ) ;
dosed -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

语法组成
awk 'pattern' 'action' 文件名
  • 依次根据指定格式取出指定格式的内容

[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 
  • 打印出指定的某一行内容

[root@10.0.0.5 ~/2025-08-06]#awk '/192.168.101.2/{print $0}' list.txt
192.168.101.2 admin 123456
  • 打印一段区间的内容
[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
  • 打印指定行内容
[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
  • 取出特定内容
## 取出了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
  • 前后加入特定的内容
[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条件判断

[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
[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用法之关键词匹配

##关键词匹配
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.txtgrep -aiE -c 'ROOT|192' list.txt## 匹配指定的单词数(-c)grep -aiE -w 'ROOT' list.txt
  • 综合实践之nginx配置虚拟主机

function add_vhost(){read -p "请输入虚拟主机的域名:" NGX_VHOSTfor NGX_VHOST in $NGX_VHOSTdo## 切换到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.confgrep -aiE 'include domains' $NGX_VHOST >>/dev/nullif [ $? -eq 0 ];thenecho -e "	include domains/*;\n}" >> nginx.confmkdir -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/fils $NGX_VHOST >>/dev/null 2>&1if [ $? -ne 0 ];then cat > $NGX_VHOST <<-EOFserver {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_VHOSTcat > /usr/local/nginx/html/index.html <<-EOF<h1> $NGX_VHOST</h1><hr color="red">EOFelseecho -e "\033[32m----------\033[0m"echo -e "\033[32m---$NGX_VHOST虚拟主机已经存在,无需进行添加----\033[0m"  fidone}

六、shell编程之数组

  • 简要概述

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

## 变量的应用
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
  • 使用场景应用

  • 基础使用

## 传统的使用方法
[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

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

#!/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]}
EOFsed -i '/BOOTPROTO/s/dhcp/static/g' ifcfg-ens33

实现tomcat管理脚本

==========需要实现如下功能=================
## 安装tomcat## 删除tomcat## 支持添加单个nginx实例## 支持添加多个nginx实例## 将tomcat实例加入nginx均衡池中
v1版本之tomcat安装和删除
### 将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函数组装
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/srccd /usr/srcls -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.shps -ef | grep -aiWE "8005|8080"    ## 开放防火墙和端口firewalld-cmd --add-port=8080/tcp --permanentsystemctl 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虚拟主机组装
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/srccd /usr/srcls -l $TOMCAT_SOFT# cd 切换到/usr/srccd /usr/srcls -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.shps -ef | grep -aiWE "8001|7001"    ## 开放防火墙和端口firewalld-cmd --add-port=8001/tcp --permanentsystemctl reload firewalld.service}function remove_tomcat()
{####### 删除tomcat ########
read -p "请输入要删除的tomcat实例" TOMCAT_VHOST
## 移除jdk环境
yum -y remove javaecho -e "\033[31m----------\033[0m"echo -e "\033[31m---请确认 是否删除tomcat实例${TOMCAT_VHOST}?-----\033[0m"  read $INPUTif [ $INPUT == "yes" -o $INPUT="y" ];then## 停止进程/usr/local/tomcat_v1.jfedu.net/bin/shutdown.sh## 等待5ssleep 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_VHOSTwget -c $TOMCAT_URL# cd 切换到/usr/srccd /usr/srcls -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端口为7001sed -i "s/8005/8001/g"${TOMCAT_SRC}/conf/server.xmlsed -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.shps -ef | grep -aiWE "8001|7001"    ## 开放防火墙和端口firewalld-cmd --add-port=8001/tcp --permanentsystemctl 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递增情况进行补充

#######  增加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_VHOSTfor TOMCAT_VHOST in $TOMCAT_VHOSTdowget -c $TOMCAT_URL# cd 切换到/usr/srccd /usr/srcls -l apache-tomcat-9.0.108.tar.gzSHUTDOWN_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.xmlsed -i "s/8001/${SHUTDOWN_PORT}/g" ${TOMCAT_SRC}/conf/server.xmlsed -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.shps -ef | grep -aiWE "8001|7001"    ## 开放防火墙和端口firewalld-cmd --add-port=8001/tcp --permanentsystemctl reload firewalld.serviceecho -e "\033[32m-------------\033[0m"echo -e "\033[32m-----Tomcat实例添加成功-----\033[0m"done
}

http://www.lryc.cn/news/615634.html

相关文章:

  • 【工具变量】地市人力资本水平数据集(2003-2023年)
  • 9. 堆和栈有什么区别
  • 健全性测试(Sanity Testing):你软件的快速“体检” ✅(省时避坑,确保核心!)
  • PID学习笔记1
  • 复现论文关于3-RPRU并联机器人运动学建模与参数优化设计
  • QT环境搭建
  • 功能测试中常见的面试题-二
  • 【Python 高频 API 速学 ⑥】
  • 09 【C++ 初阶】C/C++内存管理
  • [激光原理与应用-207]:光学器件 - 光纤种子源激光器常用元器件
  • Linux文件系统基石:透彻理解inode及其核心作用
  • 【高等数学】第八章 向量代数与空间解析几何——第四节 空间直线及其方程
  • 分析报告:基于字节连续匹配技术的KV缓存共享实施可能性及其扩展
  • 【机器学习深度学习】模型选型:如何根据模型的参数算出合适的设备匹配?
  • 202506 电子学会青少年等级考试机器人二级理论综合真题
  • 202506 电子学会青少年等级考试机器人三级器人理论真题
  • openvela之STM32开发板部署
  • LLM表征的提取方式
  • EP06:【DL 第二弹】动态计算图与梯度下降入门
  • UCMT部分复现
  • Chaos Monkey 故障注入工具使用介绍
  • Spring Boot Starter 自动化配置原理深度剖析
  • CentOS7编译安装GCC
  • C++高频知识点(十七)
  • C++ 虚函数、多重继承、虚基类与RTTI的实现成本剖析
  • AI大模型模态特征详解
  • 鸿蒙分布式任务调度深度剖析:跨设备并行计算的最佳实践
  • <PLC><汇川><字符转换>在汇川PLC中,如何进行字符串的转换与比较?
  • 从零开始理解编译原理:设计一个简单的编程语言
  • 二十、MySQL-DQL-条件查询