0

0

运维常用的 34 个 Linux Shell 脚本,一定能帮到你!

Linux中文社区

Linux中文社区

发布时间:2023-08-01 17:27:03

|

1173人浏览过

|

来源于Linux中文社区

转载

凡人网络购物系统 2010 免费版
凡人网络购物系统 2010 免费版

凡人网络购物系统是一套网上开店软件,可以帮助商家建立一个功能完善的网上销售网站,而商家无需任何专业技术知识;凡人网络购物系统自2003年发布,至今已经过8年10个版本的升级完善,系统功能强大、安全稳定,是您开店值得信赖的一个选择:特色功能介绍: 1) 32种模板选择:无论您做哪种类型的产品都可以找到适合的模板 2) 5种运费计算模板:使用常见的运输方式都可以找到合适的运费计算方式 3) 多种促销手

下载

运维常用的 34 个 Linux Shell 脚本,一定能帮到你!

作为一名 Linux 工程师,会写好的脚本不仅能提高工作效率,还能有更多的时间做自己的事。最近在网上冲浪的时候,也注意收集一些大佬写过的脚本,汇总整理一下,欢迎收藏,与君共勉!
(1)用户猜数字
#!/bin/bash# 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,# 猜小了或猜大了,直至用户猜对脚本结束。# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数# 使用取余算法将随机数变为 1‐100 的随机数num=$[RANDOM%100+1]echo "$num"# 使用 read 提示用户猜数字# 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),# ‐lt(小于),‐le(小于等于)while :do  read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai      if [ $cai -eq $num ]       then             echo "恭喜,猜对了"             exit       elif [ $cai -gt $num ]       then                   echo "Oops,猜大了"           else                  echo "Oops,猜小了"   fidone
(2)查看有多少远程的 IP 在连接本机
#!/bin/bash#!/bin/bash# 查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计) # 使用 netstat ‐atn 可以查看本机所有连接的状态,‐a 查看所有,# -t仅显示 tcp 连接的信息,‐n 数字格式显示# Local Address(第四列是本机的 IP 和端口信息)# Foreign Address(第五列是远程主机的 IP 和端口信息)# 使用 awk 命令仅显示第 5 列数据,再显示第 1 列 IP 地址的信息# sort 可以按数字大小排序,最后使用 uniq 将多余重复的删除,并统计重复的次数netstat -atn  |  awk  '{print $5}'  | awk  '{print $1}' | sort -nr  |  uniq -c
(3)helloworld
#!/bin/bashfunction example {echo "Hello world!"}example
(4)打印 tomcat 的pid
#!/bin/sh`v1="Hello"v2="world"v3=${v1}${v2}echo $v3pidlist=`ps -ef|grep apache-tomcat-7.0.75|grep -v "grep"|awk '{print $2}'`echo $pidlistecho "tomcat Id list :$pidlist"  //显示pid
(5)脚本编写 剪刀 、 石头、布游戏
#!/bin/bashgame=(石头 剪刀 布)num=$[RANDOM%3]computer=${game[$sum]}echo "请根据下列提示选择您的出拳手势"echo " 1. 石头"echo " 2. 剪刀"echo " 3. 布 "read -p "请选择 1-3 :" personcase $person in1)  if [ $num -eq 0 ]  then     echo "平局"    elif [ $num -eq 1 ]    then      echo "你赢"    else       echo "计算机赢"fi;;2) if [ $num -eq 0 ] then    echo "计算机赢"    elif [ $num -eq 1 ]     then     echo "平局"    else       echo "你赢"fi;;3) if [ $num -eq 0 ] then     echo "你赢"   elif [ $num -eq 1 ]   then      echo "计算机赢"   else       echo "平局"fi;;*)  echo "必须输入1-3 的数字"esac
(6)九九乘法表
#!/bin/bashfor i in `seq 9`do  for j in `seq $i` do  echo -n "$j*$i=$[i*j] " done    echodone
(7)脚本用源码来安装 memcached 服务器
#!/bin/bash# 一键部署 memcached # 脚本用源码来安装 memcached 服务器# 注意:如果软件的下载链接过期了,请更新 memcached 的下载链接wget http://www.memcached.org/files/memcached-1.5.1.tar.gzyum -y install gcctar -xf  memcached‐1.5.1.tar.gzcd memcached‐1.5.1./configuremakemake install
(8)检测本机当前用户是否为超级管理员。另外,搜索公众号编程技术圈后台回复“大礼包”,获取一份惊喜礼包。
#!/bin/bash# 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不# 是,则提示您非管理员(使用字串对比版本) if [ $USER == "root" ] then  yum -y install vsftpdelse  echo "您不是管理员,没有权限安装软件"fi
(9)if 运算表达式
#!/bin/bash -xvif [ $1 -eq 2 ] ;then echo "wo ai wenmin"elif [ $1 -eq 3 ] ;then  echo "wo ai wenxing "elif [ $1 -eq 4 ] ;then  echo "wo de xin "elif [ $1 -eq 5 ] ;then echo "wo de ai "fi
(10)脚本 杀掉 tomcat 进程并重新启动
#!/bin/bash#kill tomcat pidpidlist=`ps -ef|grep apache-tomcat-7.0.75|grep -v "grep"|awk '{print $2}'`  #找到tomcat的PID号echo "tomcat Id list :$pidlist"  //显示pidkill -9 $pidlist  #杀掉改进程echo "KILL $pidlist:" //提示进程以及被杀掉echo "service stop success"echo "start tomcat"cd /opt/apache-tomcat-7.0.75pwd rm -rf work/*cd bin./startup.sh #;tail -f ../logs/catalina.out
(11)打印国际象棋棋盘
#!/bin/bash# 打印国际象棋棋盘# 设置两个变量,i 和 j,一个代表行,一个代表列,国际象棋为 8*8 棋盘# i=1 是代表准备打印第一行棋盘,第 1 行棋盘有灰色和蓝色间隔输出,总共为 8 列# i=1,j=1 代表第 1 行的第 1 列;i=2,j=3 代表第 2 行的第 3 列# 棋盘的规律是 i+j 如果是偶数,就打印蓝色色块,如果是奇数就打印灰色色块# 使用 echo ‐ne 打印色块,并且打印完成色块后不自动换行,在同一行继续输出其他色块for i in {1..8}do   for j in {1..8}   do    sum=$[i+j]  if [  $[sum%2] -eq 0 ];then    echo -ne "\033[46m  \033[0m"  else   echo -ne "\033[47m  \033[0m"  fi   done   echodone
(12)统计当前 Linux 系统中可以登录计算机的账户有多少个
#!/bin/bash# 统计当前 Linux 系统中可以登录计算机的账户有多少个#方法 1:grep "bash$" /etc/passwd | wc -l#方法 2:awk -f : '/bash$/{x++}end{print x}' /etc/passwd
(13)备份 MySQL 表数据
#!/bin/shsource /etc/profiledbName=mysqltableName=dbecho [`date +'%Y-%m-%d %H:%M:%S'`]' start loading data...'mysql -uroot -proot -P3306 ${dbName} -e "LOAD DATA LOCAL INFILE '# /home/wenmin/wenxing.txt' INTO TABLE ${tableName} FIELDS TERMINATED BY ';'"echo [`date +'%Y-%m-%d %H:%M:%S'`]' end loading data...'exitEOF
(14)使用死循环实时显示 eth0 网卡发送的数据包流量
#!/bin/bash# 使用死循环实时显示 eth0 网卡发送的数据包流量 while :do  echo '本地网卡 ens33 流量信息如下:' ifconfig ens33 | grep "RX pack" | awk '{print $5}'     ifconfig ens33 | grep "TX pack" | awk '{print $5}' sleep 1done
(15)编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
#!/bin/bash# 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机# 状态(for 版本)for i in {1..254}do  # 每隔0.3秒ping一次,一共ping2次,并以1毫秒为单位设置ping的超时时间 ping -c 2 -i 0.3 -W 1 192.168.1.$i &>/dev/null     if [ $? -eq 0 ];then echo "192.168.1.$i is up" else  echo "192.168.1.$i is down" fidone
(16)编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户。另外,搜索公众号Linux就该这样学后台回复“Linux”,获取一份惊喜礼包。
#!/bin/bash# 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户# 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默# 认的 123456 作为默认密码。read -p "请输入用户名:" user#使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2#没有输入用户名脚本退出后,使用$?查看的返回码为 2if [ -z $user ]; then echo " 您不需要输入账户名"  exit 2fi #使用 stty ‐echo 关闭 shell 的回显功能#使用 stty  echo 打开 shell 的回显功能stty -echo read -p "请输入密码:" passstty echo pass=${pass:-123456}useradd "$user"echo "$pass" | passwd --stdin "$user"
(17)使用脚本对输入的三个整数进行排序
#!/bin/bash# 依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字read -p " 请输入一个整数:" num1read -p " 请输入一个整数:" num2read -p " 请输入一个整数:  " num3# 不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"# num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值# 如果输入的不是这样的顺序,则改变数的存储顺序,如:可以将 num1 和 num2 的值对调tmp=0# 如果 num1 大于 num2,就把 num1 和和 num2 的值对调,确保 num1 变量中存的是最小值if [ $num1 -gt $num2 ];then tmp=$num1 num1=$num2 num2=tmpfi# 如果 num1 大于 num3,就把 num1 和 num3 对调,确保 num1 变量中存的是最小值if [ $num1 -gt $num3 ];then tmp=$num1 num1=$num3 num3=$tmpfi# 如果 num2 大于 num3,就把 num2 和 num3 对调,确保 num2 变量中存的是最小值if [ $num2 -gt $num3 ];then tmp=$num2 num2=$num3 num3=$tmpfiecho "排序后数据(从小到大)为:$num1,$num2,$num3"
(18)根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动
#!/bin/bash# 根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动 # 00‐12 点为早晨,12‐18 点为下午,18‐24 点为晚上# 使用 date 命令获取时间后,if 判断时间的区间,确定问候语内容tm=$(date +%H)if [ $tm -le 12 ];then msg="Good Morning $USER"elif [ $tm -gt 12 -a $tm -le 18 ];then   msg="Good Afternoon $USER"else   msg="Good Night $USER"fiecho "当前时间是:$(date +"%Y‐%m‐%d %H:%M:%S")"echo -e "\033[34m$msg\033[0m"
(19)将 I lov cls 写入到 txt 文件中
#!/bin/bashcd /home/wenmin/touch wenxing.txtecho "I lov cls" >>wenxing.txt
(20)脚本编写 for 循环判断
#!/bin/bashs=0;for((i=1;i<100;i++))do  s=$[$s+$i]done echo $sr=0;a=0;b=0;for((x=1;x<9;x++))do  a=$[$a+$x] echo $xdonefor((y=1;y<9;y++))do  b=$[$b+$y]echo $ydoneecho $r=$[$a+$b]
(21)脚本编写 for 循环判断
#!/bin/bashfor i in "$*"do  echo "wenmin xihuan $i"donefor j in "$@"do  echo "wenmin xihuan $j"done
(22)脚本 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
#!/bin/bash# 每周 5 使用 tar 命令备份/var/log 下的所有日志文件# vim  /root/logbak.sh# 编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖# 注意 date 命令需要使用反引号括起来,反引号在键盘<tab>键上面tar -czf log-`date +%Y%m%d`.tar.gz /var/log # crontab -e #编写计划任务,执行备份脚本00 03 * * 5 /home/wenmin/datas/logbak.sh
(23)脚本编写 求和 函数运算 function xx()
牛逼啊!接私活必备的 N 个开源项目!赶快收藏
#!/bin/bash

function sum()
{
 s=0;
 s=$[$1+$2]
 echo $s
}
read -p "input your parameter " p1
read -p "input your parameter " p2

sum $p1 $p2

function multi()
{
 r=0;
 r=$[$1/$2]
 echo $r
}
read -p "input your parameter " x1
read -p "input your parameter " x2

multi $x1 $x2

v1=1
v2=2
let v3=$v1+$v2
echo $v3
(24)脚本编写 case — esac 分支结构表达式
#!/bin/bash 

case $1 in 
1) 
 echo "wenmin "
;;
2)
 echo "wenxing "
;; 
3)  
 echo "wemchang "
;;
4) 
 echo "yijun"
;;
5)
 echo "sinian"
;;
6)  
 echo "sikeng"
;;
7) 
 echo "yanna"
;;
*)
 echo "danlian"
;; 
esac
(25)# 定义要监控的页面地址,对 tomcat 状态进行重启或维护
#!/bin/sh  
# function:自动监控tomcat进程,挂了就执行重启操作  
# author:huanghong  
# DEFINE  

# 获取tomcat PPID  
TomcatID=$(ps -ef |grep tomcat |grep -w 'apache-tomcat-7.0.75'|grep -v 'grep'|awk '{print $2}')  

# tomcat_startup  
StartTomcat=/opt/apache-tomcat-7.0.75/bin/startup.sh  


#TomcatCache=/usr/apache-tomcat-5.5.23/work  

# 定义要监控的页面地址  
WebUrl=http://192.168.254.118:8080/

# 日志输出  
GetPageInfo=/dev/null  
TomcatMonitorLog=/tmp/TomcatMonitor.log  

Monitor()  
  {  
   echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"  
   if [ $TomcatID ]
 then  
      echo "[info]tomcat进程ID为:$TomcatID."  
      # 获取返回状态码  
      TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})  
      if [ $TomcatServiceCode -eq 200 ];then  
          echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,页面正常."  
      else  
          echo "[error]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"  
          echo "[error]开始重启tomcat"  
          kill -9 $TomcatID  # 杀掉原tomcat进程  
          sleep 3  
          #rm -rf $TomcatCache # 清理tomcat缓存  
          $StartTomcat  
      fi  
      else  
      echo "[error]进程不存在!tomcat自动重启..."  
      echo "[info]$StartTomcat,请稍候......"  
      #rm -rf $TomcatCache  
      $StartTomcat  
    fi  
    echo "------------------------------"  
   }  
   Monitor>>$TomcatMonitorLog
(26)通过位置变量创建 Linux 系统账户及密码
#!/bin/bash

# 通过位置变量创建Linux 系统账户及密码

# $1 是执行脚本的第一个参数,$2  是执行脚本的第二个参数

useradd "$1"
echo "$2" | passwd --stdin "$1"
(27)对变量的传入与获取个数及打印
#!/bin/bash
echo "$0 $1 $2 $3"  // 传入三个参数
echo $#    //获取传入参数的数量
echo $@    //打印获取传入参数
echo $*    //打印获取传入参数
(28)实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
#!/bin/bash

# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员

# 提取根分区剩余空间
disk_size=$(df / | awk '/\//{print $4}')

# 提取内存剩余空空间
mem_size=$(free | awk '/Mem/{print $4}')
while :
do 
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
then
    mail  ‐s  "Warning"  root  <<EOF
 Insufficient resources,资源不足
EOF
fi
done
(29)检查指定目录下是否存在 对应 文件
#!/bin/bash

if [ -f /home/wenmin/datas ]
then 
echo "File exists"
fi
(30)脚本定义while循环语句
#!/bin/bash

if [ -f /home/wenmin/datas ]
then 
echo "File exists"
fi

[root@rich datas]# cat while.sh 
#!/bin/bash

s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s + $i]
        i=$[$i + 1]
done

echo $s
echo $i
(31)一键部署 LNMP(RPM 包版本)
#!/bin/bash 

# 一键部署 LNMP(RPM 包版本)
# 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败
# 本脚本使用于 centos7.2 或 RHEL7.2
yum -y install httpd
yum -y install mariadb mariadb-devel mariadb-server
yum -y install php php-mysql

systemctl start httpd mariadb
systemctl enable httpd mariadb
(32)读取控制台传入参数
#!/bin/bash
read -t 7 -p "input your name " NAME
echo $NAME

read -t 11 -p "input you age " AGE
echo $AGE

read -t 15 -p "input your friend " FRIEND
echo $FRIEND

read -t 16 -p "input your love " LOVE
echo $LOVE
(33)脚本实现 复制
#!/bin/bash

cp $1 $2
(34)脚本实现文件存在与否的判断
#!/bin/bash

if [ -f file.txt ];then
 echo "文件存在"
else 
 echo "文件不存在"
fi

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

5

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

12

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

33

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

25

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

77

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

60

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

48

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

26

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

20

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.1万人学习

Git 教程
Git 教程

共21课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号