shell_script

oneShellScript

下载脚本

curl -O https://wangjian.run/files/script/shell_script/one_shell_script.sh
#常用命令
yum -y install vim telnet net-tools lrzsz wget zip unzip nc telnet dos2unix fontconfig urw-fonts yum-utils wget bash-completion lsof

grafana

下载脚本

curl -O https://wangjian.run/files/software/grafana/grafana_auto_install.sh

下载安装包

curl -O https://wangjian.run/files/software/grafana/grafana-enterprise_13.0.1_24542347077_linux_amd64.rpm

prometheus

下载脚本

curl -O https://wangjian.run/files/software/prometheus/prometheus_auto_install.sh

下载安装包

curl -O https://wangjian.run/files/software/prometheus/prometheus-3.11.3.linux-amd64.tar.gz

判断IP是否能ping通

版本1

#!/bin/bash
. /etc/init.d/functions
check_ip(){
	ip=192.168.15.$1
	ping -c1 -i1 -w1 $ip &>/dev/null
	if [[ $? -eq 0 ]];then
		action "$ip is true" /bin/true
	else
		action "$ip is false" /bin/false
	fi
}
main(){
	for n in {128..129}
	do
		check_ip $n 
		usleep 100
	done
}
main

docker

一键在线安装最新版本的docker

yum -y install wget && wget https://wangjian.run/ShellScript/docker-install.sh --no-check-certificate && bash docker-install.sh

tomcat

一键安装tomcat

yum -y install wget && wget https://wangjian.run/ShellScript/tomjb.sh --no-check-certificate && bash tomjb.sh

nginx

#nginx重启脚本
vim nginx-restart.sh 
ngmul=/opt/nginx-1.24.0/sbin/
id=$(pgrep nginx)
kill -9 $id > /dev/null
#启动nginx
cd $ngmul && ./nginx 
#查看进程
ps -ef|grep nginx

镜像定时更新

速查表定时更新

#!/bin/bash
#速查表定时获取最新版本脚本
#查找容器
rongqiid=$(docker ps | awk 'NR!=1{print }' | awk '{print $1}')
#停止容器
docker stop "$rongqiid"
#查看所有容器
rongqiids=$(docker ps -qa)
docker rm "$rongqiids"
#查找镜像删除
JiangXiangId=$(docker images | awk 'NR!=1{print }' | awk '{print $3}')
docker rmi -f "$JiangXiangId"
#下载镜像并启动容器
docker pull wcjiang/reference
docker run --name reference --rm -d -p 9667:3000 wcjiang/reference:latest

60s 镜像定时更新

#!/bin/bash
# 出错即停、未定义变量报错、管道失败检测
set -euo pipefail  
# 停止所有运行中的容器(忽略无容器的报错)
docker stop $(docker ps -q) 2>/dev/null || true
# 删除所有容器(包括已停止的)
docker rm $(docker ps -aq) 2>/dev/null || true
# 删除所有镜像(强制)
docker rmi -f $(docker images -q) 2>/dev/null || true
# 下载镜像并以指定配置启动新容器
docker run -d --restart always --name 60s -p 4399:4399 vikiboss/60s:latest
echo "容器 60s 已重新部署。"

其他脚本

vim mysql-install-centos7.9.sh
#!/bin/bash
echo -e "\e[32m##########mysql安装环境开始检测##########\e[0m"
#软件安装环境检查
mariadb=$(rpm -qa|grep -c mariadb)
mysql=$(rpm -qa|grep -c mysql) #写法2 grep mysql | wc -l
if [[ $mariadb != 0 ]];then
    echo -e "\e[31m##########mysql安装环境监测不通过##########\e[0m"
    echo "本系统有安装mariadb数据库,请先卸载,卸载方法如下实例所示:"
    echo "可以使用rpm -qa|grep mariadb 查询"
    echo "然后使用rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps进行卸载"
    exit 1
fi

if [[ $mysql != 0 ]];then
    echo -e "\e[31m##########mysql安装环境监测不通过##########\e[0m"
    echo "本系统有安装mysql数据库,请先卸载相关的安装"
    exit 1
fi

#<<COMMENT
#用户和组检查
yonghuzu=$(more /etc/group | grep -c mysql) #shell规范中不建议用cat,cat是一个工具来欺骗"猫"的文件.将AINGLE文件作为程序的输入被认为是《禁止酷刑和其他残忍、不人道或有辱人格的待遇或处罚公约》
yonghu=$(more /etc/passwd |grep -c mysql)
if [[ $yonghuzu == 0 ]];then
    groupadd mysql
    echo -e "\e[32m##########本系统没有mysql组,脚本已自动完成mysql组创建##########\e[0m"
else
    echo -e "\e[32m##########本系统有mysql组,无需脚本创建用户组##########\e[0m"
fi

if [[ $yonghu == 0 ]];then
    useradd -g mysql mysql
    echo -e "\e[32m##########本系统没有mysql用户,脚本已自动完成mysql用户创建,并添加到mysql组##########\e[0m"
else
    echo -e "\e[32m##########本系统有mysql用户,无需脚本创建用户##########\e[0m"
fi

if [[ $mariadb == 0 && $mysql == 0 ]];then
    echo -e "\e[32m##########恭喜你mysql安装环境监测通过,开始安装mysql##########\e[0m"
fi
#COMMENT

判断软件是否安装

Packs=("curl" "tar" "gzip" "netstat" "ss" "docker" ); for pack in "${Packs[@]}"; do command -v "$pack" >/dev/null 2>&1 || echo -e "\033[31mError: $pack 命令不存在\033[0m"; done

统计IP出现的次数

tail -n 1000 wangjian.run.log | awk '{print $1}' |sort | uniq -c | sort -nr | head -n 10

查看日志

sed -n '/09\/Jan\/2025:09:21:00/,/09\/Jan\/2025:09:21:59/'p wangjian.run.log
sed -n '/2019-07-30 20:00:00/,/2019-07-30 21:30:00/'p gateway.log

多列输出所在行

[root@wjcentos7 ~]# more wjip.txt 
300 192.168.1.3
100 192.168.1.4
150 192.168.1.5
2 192.168.1.6
5 192.168.1.7
50 192.168.1.8
#!/bin/bash
file="wjip.txt"
#在这个脚本中,while read line循环会不断从文件(通过< "$file"重定向输入)中读取一行数据,将其存储到变量line中
#然后通过echo $line输出这一行数据,直到文件中的所有行都被读取完
if [ -f "$file" ];then
        #count ip_address代表txt文件中的两个字段
	while read count ip_address;do 
		#echo $ip_address
		if [ $count -gt 200 ];then
		firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="'$ip_address'" port port="22" protocol="tcp" reject' --permanent
                firewall-cmd --reload
                echo "$ip_address:禁用成功"		
		fi
	done < "$file"
else 
	echo "文件不存在"
fi

自动禁用启用IP

统计出现大于200的IP地址

tail -n 1000 wangjian.run.log | awk '{print $1}' |sort | uniq -c | awk '$1 > 200' | sort -nr | awk '{print $2}'| tr -d ' '

禁用脚本

[root@wjcentos7 ~]# more DisableIp.sh 
#!/bin/bash
file="wjip.txt"
#在这个脚本中,while read line循环会不断从文件(通过< "$file"重定向输入)中读取一行数据,将其存储到变量line中
#然后通过echo $line输出这一行数据,直到文件中的所有行都被读取完
if [ -f "$file" ];then
  while read ip_address;do
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="'$ip_address'" port port="22" protocol="tcp" reject' --permanent
    firewall-cmd --reload
    echo "$ip_address:禁用成功"             
  done < "$file"
else
  echo "文件不存在"
fi

启用脚本

[root@wjcentos7 ~]# more EnableIp.sh 
#!/bin/bash
file="wjip.txt"
#在这个脚本中,while read line循环会不断从文件(通过< "$file"重定向输入)中读取一行数据,将其存储到变量line中
#然后通过echo $line输出这一行数据,直到文件中的所有行都被读取完
if [ -f "$file" ];then
  while read ip_address;do
    firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="'$ip_address'" port port="22" protocol="tcp" reject' --permanent
    firewall-cmd --reload
    echo "$ip_address:已取消禁用"             
  done < "$file"
else
  echo "文件不存在"
fi

判断服务器是否可以联网

#判断是否可以联网,如果不能联网,就退出操作
if ping -c 1 baidu.com &>/dev/null ; then    
echo -e "\e[32m连接互联网正常\e[0m"
else    
echo -e "\e[5;31m连接互联网失败\e[0m"    
exit
fi

判断当前用户是否是root用户

#判断当前用户是否是root用户,如果不是就退出操作
yonghuid=`id | awk '{print $1}' | awk -F "=" '{print $2}' | awk -F "(" '{print $1}'`
dangqianyonghu=`id | awk '{print $1}' | awk -F "(" '{print $2}' | awk -F ")" '{print $1}'`
if [[ 0 != $yonghuid ]];then	
	echo "你的当前的用户是【$dangqianyonghu】不是【root】用户,请切换用户后在操作"	
	break
else
	echo "++++++++当前是root用户,开始执行操作++++++++"
fi

查询IP访问情况

#查看nginx访问IP数
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /var/log/nginx/access.log |sort |uniq -c
#httpd
#查询IP的访问访问数量,提取前10个访问次数最多的IP
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/httpd/logs/ssl_access_log |sort |uniq -c | sort -rn | head -10
</code></pre>

查看系统账号情况

<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="shell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#/bin/bash#查询系统多少个账号zhanghao=`more /etc/passwd | wc -l`shellid=`more /etc/passwd | grep "/bin/bash" | wc -l`bunengid=`more /etc/passwd | grep -v "/bin/bash" | wc -l`wumima=`more /etc/passwd | grep "/bin/bash" | awk -F ":" '{print $1}'`mimabiao=`more /etc/shadow | awk -F ":" '{print $1}'`#echo $wumimac=`more /etc/shadow | grep "$wumima" | awk -F ":" '{print $2}' | grep "!!" | wc -l`echo "系统共有$zhanghao个账号;"echo "用于登录的账号有$shellid个;"echo "不能用于登录的账号有$bunengid个;"if [ $c = 0 ];then	echo "可以登录但是没有设置密码的账号有$c个,此处没有账号安全风险;"else	echo "可以登录但是没有设置密码的账号有$c个,此处存在安全风险;"fi</code></pre>

执行结果

[root@localhost ~]# sh id.sh 系统共有23个账号;用于登录的账号有3个;不能用于登录的账号有20个;可以登录但是没有设置密码的账号有1个,此处存在安全风险;</code></pre>

随机点名

该脚本,需要提前准备一个user.txt的文件
#文件中一行一个姓名
while : 
do
  line=`cat user.txt | wc -l`
  num=$[RANDOM%line+1]
  sed -n "${num}p" user.txt
  sleep 0.2
  clear
done
</code></pre>

主机是否存活

Network=$1
for Host in $(seq 120 130)
	do
		ping -c 1 $Network.$Host &gt; /dev/null &amp;&amp; result=0 || result=1
		if [ "$result" == 0 ];then
  			echo -e "\033[32;1m$Network.$Host is up \033[0m"
  			echo "$Network.$Host" &gt;&gt; /tmp/up.txt
		else
  			echo -e "\033[;31m$Network.$Host is down \033[0m"
  			echo "$Network.$Host" &gt;&gt; /tmp/down.txt
		fi
	done</code></pre>

执行结果

[root@localhost ~]# sh 1.sh 192.168.67
192.168.67.120 is down 
192.168.67.121 is down 
192.168.67.122 is down 
192.168.67.123 is down 
192.168.67.124 is down 
192.168.67.125 is down 
192.168.67.126 is down 
192.168.67.127 is down 
192.168.67.128 is down</code></pre>

每10秒循环判断用户是否登录系统

USERS="wj"
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</code></pre>

速查表定时任务

[root@hcss-ecs-7aee ~]# more SuChaBiao.sh 
#!/bin/bash
#速查表定时获取最新版本脚本
#查找容器
rongqiid=$(docker ps | awk 'NR!=1{print }' | awk '{print $1}')
#停止容器
docker stop "$rongqiid"
#查看所有容器
rongqiids=$(docker ps -qa)
docker rm "$rongqiids"
#查找镜像删除
JiangXiangId=$(docker images | awk 'NR!=1{print }' | awk '{print $3}')
docker rmi -f "$JiangXiangId"
#下载镜像并启动容器
docker pull wcjiang/reference
docker run --name reference --rm -d -p 9667:3000 wcjiang/reference:latest

服务器运行情况

#!/bin/bash
# 获取 CPU、内存、磁盘使用率

# 1. 获取 CPU 使用率(基于 /proc/stat 两次采样)
get_cpu_usage() {
    # 第一次采样
    cpu1=$(grep '^cpu ' /proc/stat)
    sleep 0.5
    # 第二次采样
    cpu2=$(grep '^cpu ' /proc/stat)

    # 将时间字段转为数组
    c1=($cpu1)
    c2=($cpu2)

    # 计算总时间差(user + nice + system + idle + iowait + irq + softirq + steal)
    total_diff=$(( (c2[1]+c2[2]+c2[3]+c2[4]+c2[5]+c2[6]+c2[7]) - (c1[1]+c1[2]+c1[3]+c1[4]+c1[5]+c1[6]+c1[7]) ))
    # 空闲时间差(idle)
    idle_diff=$(( c2[4] - c1[4] ))

    # 使用率 = (总时间 - 空闲) / 总时间 * 100
    usage=$(( 100 * (total_diff - idle_diff) / total_diff ))
    echo "$usage"
}

cpu_usage=$(get_cpu_usage)

# 2. 获取内存使用率(基于 available 计算实际可用内存)
mem_total=$(free -m | awk '/Mem/ {print $2}')
mem_avail=$(free -m | awk '/Mem/ {print $7}')
mem_usage=$(( 100 - (mem_avail * 100 / mem_total) ))

# 3. 获取磁盘使用率(根分区 /)
disk_usage=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')

# 输出结果
echo "CPU Usage:    ${cpu_usage}%"
echo "Memory Usage: ${mem_usage}%"
echo "Disk Usage:   ${disk_usage}%"

swap

新增 swap 空间

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

© 版权声明
THE END
点赞15 分享