18 个常用 Shell 脚本!!(上)

ubuntu及shell脚本常用命令入门 一、Shell命令 二、ubuntu软件安装方法 三、Ubuntu文件系统结构 四、ubuntu磁盘文件 五、Linux下常用的压缩格式 六、linux用户和用户组 七、Ubuntu/Linux文件权限 八、linux连接文件 九、vim编辑器 十、linux C编程 十一、Makefile的基本语法 十二、shell脚本入门 一、Shell命令 查看命令详细信息 命令 --help 1、目录信息查看命令ls ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的 ls -l 显示文 阅读详情

1、检测两台服务器指定目录下的文件一致性

#!/bin/bash
#####################################
#检测两台服务器指定目录下的文件一致性
#####################################
#通过对比两台服务器上文件的md5值,达到检测一致性的目的
dir=/data/web
b_ip=192.168.88.10
#将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中
find $dir -type f|xargs md5sum > /tmp/md5_a.txt
ssh $b_ip "find $dir -type f|xargs md5sum > /tmp/md5_b.txt"
scp $b_ip:/tmp/md5_b.txt /tmp
#将文件名作为遍历对象进行一一比对
for f in `awk '{print 2} /tmp/md5_a.txt'`
do
    #以a机器为标准,当b机器不存在遍历对象中的文件时直接输出不存在的结果
    if grep -qw "$f" /tmp/md5_b.txt
    then
        md5_a=`grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'`
        md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'`
        #当文件存在时,如果md5值不一致则输出文件改变的结果
        if [ $md5_a != $md5_b ]
        then
            echo "$f changed."
        fi
    else
        echo "$f deleted."
    fi
done

2、定时清空文件内容,定时记录文件大小

#!/bin/bash
################################################################
#每小时执行一次脚本(任务计划),当时间为0点或12点时,将目标目录下的所有文件内
#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件
################################################################
logfile=/tmp/`date +%H-%F`.log
n=`date +%H`
if [ $n -eq 00 ] || [ $n -eq 12 ]
then
    #通过for循环,以find命令作为遍历条件,将目标目录下的所有文件进行遍历并做相应操作
    for i in `find /data/log/ -type f`
    do
        true > $i
    done
else
    for i in `find /data/log/ -type f`
    do
        du -sh $i >> $logfile
    done
fi

3、检测网卡流量,并按规定格式记录在日志中

#!/bin/bash
#######################################################
#检测网卡流量,并按规定格式记录在日志中
#规定一分钟记录一次
#日志格式如下所示:
#2019-08-12 20:40
#ens33 input: 1234bps
#ens33 output: 1235bps
######################################################3
while :
do
    #设置语言为英文,保障输出结果是英文,否则会出现bug
    LANG=en
    logfile=/tmp/`date +%d`.log
    #将下面执行的命令结果输出重定向到logfile日志中
    exec >> $logfile
    date +"%F %H:%M"
    #sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8
    sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"\t","input:","\t",$5*1000*8,"bps","\n",$2,"\t","output:","\t",$6*1000*8,"bps"}'
    echo "####################"
    #因为执行sar命令需要59秒,因此不需要sleep
done

4、计算文档每行出现的数字个数,并计算整个文档的数字总数

#!/bin/bash
#########################################################
#计算文档每行出现的数字个数,并计算整个文档的数字总数
########################################################
#使用awk只输出文档行数(截取第一段)
n=`wc -l a.txt|awk '{print $1}'`
sum=0
#文档中每一行可能存在空格,因此不能直接用文档内容进行遍历
for i in `seq 1 $n`
do
    #输出的行用变量表示时,需要用双引号
    line=`sed -n "$i"p a.txt`
    #wc -L选项,统计最长行的长度
    n_n=`echo $line|sed s'/[^0-9]//'g|wc -L`
    echo $n_n
    sum=$[$sum+$n_n]
done
echo "sum:$sum"

杀死所有脚本

#!/bin/bash
if [ $# -ne 1 ]; then
    echo "Usage: $0 filename"
fi
dir=$(dirname $1)
file=$(basename $1)
ftp -n -v << EOF   # -n 自动登录
open 192.168.1.10  # ftp服务器
user admin password
binary   # 设置ftp传输模式为二进制,避免MD5值不同或.tar.gz压缩包格式错误
cd $dir
get "$file"
EOF

5、从 FTP 服务器下载文件

#!/bin/bash  
if [ $# -ne 1 ]; then  
    echo "Usage: $0 filename"  
fi  
dir=$(dirname $1)  
file=$(basename $1)  
ftp -n -v << EOF   # -n 自动登录  
open 192.168.1.10  # ftp服务器  
user admin password  
binary   # 设置ftp传输模式为二进制,避免MD5值不同或.tar.gz压缩包格式错误  
cd $dir  
get "$file"  
EOF

6、连续输入5个100以内的数字,统计和、最小和最大

#!/bin/bash
COUNT=1
SUM=0
MIN=0
MAX=100
while [ $COUNT -le 5 ]; do
    read -p "请输入1-10个整数:" INT
    if [[ ! $INT =~ ^[0-9]+$ ]]; then
        echo "输入必须是整数!"
        exit 1
        elif [[ $INT -gt 100 ]]; then
        echo "输入必须是100以内!"
        exit 1
    fi
    SUM=$(($SUM+$INT))
    [ $MIN -lt $INT ] && MIN=$INT
    [ $MAX -gt $INT ] && MAX=$INT
    let COUNT++
done
echo "SUM: $SUM"
echo "MIN: $MIN"
echo "MAX: $MAX"

用户猜数字

#!/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,猜小了"
    fi
done

7、监测 Nginx 访问日志 502 情况,并做相应动作

假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。

#场景:
#1.访问日志文件的路径:/data/log/access.log
#2.脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现502的比例不低于10%(30条)则需要重启php-fpm服务
#3.重启命令为:/etc/init.d/php-fpm restart
#!/bin/bash
###########################################################
#监测Nginx访问日志502情况,并做相应动作
###########################################################
log=/data/log/access.log
N=30 #设定阈值
while :
do
    #查看访问日志的最新300条,并统计502的次数
    err=`tail -n 300 $log |grep -c '502" '`
    if [ $err -ge $N ]
    then
        /etc/init.d/php-fpm restart 2> /dev/null
        #设定60s延迟防止脚本bug导致无限重启php-fpm服务
        sleep 60
    fi
    sleep 10
done

8、将结果分别赋值给变量

应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。

方法1:

for i in $(echo "4 5 6"); do
    eval a$i=$i
done
echo $a4 $a5 $a6

方法2:将位置参数192.168.1.1{1,2}拆分为到每个变量

num=0
for i in $(eval echo $*);do   #eval将{1,2}分解为1 2
    let num+=1
    eval node${num}="$i"
done
echo $node1 $node2 $node3
# bash a.sh 192.168.1.1{1,2}
192.168.1.11 192.168.1.12

方法3:

arr=(4 5 6)
INDEX1=$(echo ${arr[0]})
INDEX2=$(echo ${arr[1]})
INDEX3=$(echo ${arr[2]})

9、批量修改文件名

示例:

# touch article_{1..3}.html  
# lsarticle_1.html  article_2.html  article_3.html

方法1:

for file in $(ls *html); do  
    mv $file bbs_${file#*_}  
    # mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/')  
    # mv $file $(echo $file |echo bbs_$(cut -d_ -f2)

方法2:

for file in $(find . -maxdepth 1 -name "*html"); do  
     mv $file bbs_${file#*_}done

方法3:

# rename article bbs *.html

把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母

1)准备测试文件,文件名为2.txt

第1行1234567不包含字母  
第2行56789BBBBBB  
第3行67890CCCCCCCC  
第4行78asdfDDDDDDDDD  
第5行123456EEEEEEEE  
第6行1234567ASDF  
第7行56789ASDF  
第8行67890ASDF  
第9行78asdfADSF  
第10行123456AAAA  
第11行67890ASDF  
第12行78asdfADSF  
第13行123456AAAA

2)脚本如下:

#!/bin/bash  
###############################################################  
把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母  
##############################################################  
sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'d  
sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'g  
sed -n '11,$'p 2.txt  
#最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项
Shell进阶脚本70个练习 1.数组的基本脚本 #!/bin/bash name[0]="jacob" # 定义一个数组 name[1]="Rose" # 附加数组 name[2]="Rick" # 附加数组 name[3+3]="TinTin" # 追加数组,相当与在第6位追加 echo ${name[0]} # 打印数组第一个内容 echo ${name[1]} # 打印数组第二个内容 echo ${name[6]} # 打印数组第四个内容或e... 阅读详情

相关推荐

一线工作中常用 Shell 脚本: Jar包部署为linux系统服务; 恶意访问,安全防范; SSH 免交互执行命令;

当要使用多个不同的private key登录不同的主机时,我们可以在ssh命令里面用-i参数指定每次使用的private key文件。需求: 通过脚本自动化部署(自动远程登录、远程复制本地资源到服务器,远程执行部署相关命令。之间,remotessh可以随便修改成其他形式的字符串。可以利用~/.ssh/config文件,在让ssh自动为我们决定应该使用哪个key。在文本中搜索指定的内容——grep命令的常用选项。远程执行的命令内容较多,使用脚本方式实现。方法2:通过TCP建立的连接。

专注于计算机研发知识和资讯分享 705

运维常用脚本(持续更新~)

1.获取deployment下所有podready状态,并将结果发送到企业微信。2/批量ping脚本(python/shell)3.检测当前用户是否是超级管理员(root)2.1 python批量ping。2.2 shell批量ping。

Habo_的博客 1462

运维:18工作中常用 Shell 脚本, 强烈推荐

GitHub 地址:https://github.com/weiwosuoai/WeBlog。GitHub 地址:https://github.com/weiwosuoai/WeBlog。GitHub 地址:https://github.com/weiwosuoai/WeBlog。Gitee 地址:https://gitee.com/AllenJiang/WeBlog。Gitee 地址:https://gitee.com/AllenJiang/WeBlog。方法1:EOF标准输出作为expect标准输入。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 482

运维常用的脚本

1、检测两台服务器指定目录下的文件一致性 #!/bin/bash ###################################### 检测两台服务器指定目录下的文件一致性 ##################################### #通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir=/data/web b_ip=192.168.88.10 #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中 find $d

Sunny的专栏 2354

vc mfc listctrl使用虚拟列表 虚拟列表用法

note 虚拟列表可有效加载大量数据 需要处理listctrl的 LVN_GETDISPINFO 消息 使用虚拟列表 不能 使用 insert的方法插入数据,而是告诉listctrl 当前要显示多少行 使用SetItemCount函数告诉listctrl当前显示多少行 使用虚拟列表需要自己维护数据源 使用 添加list ctrl 控件 将其Owner Data 属性 设置为 True 添加...

知其所以然 398

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

qq_45634989的博客 2880

七个常用shell运维脚本

常用shell脚本

qq_41890240的博客 3576

【MFiX后处理】MFiX中使用des_usr_var输出颗粒的传热量(2020-11-27更新变更输出变量名方法)

参考之前Yin的那一篇博客 https://www.cnblogs.com/Jay-CFD/p/10621274.html 输出一下颗粒传热量 使用的算例是fluid_bed_dem_2d 打开des scalar tracking 前面都和Yin那篇一样,打开enable user scalar tracking 输入2 因为第一个用来测试Y加速度了 第二个输出传热量 然后在output vtk中勾选好 更改源代码 源代码为des_thermo_newvalues.f 在mfix-GUI自带的ed

beidou111的博客 1533

10个脚本让你的运维超神 !零基础入门到精通,收藏这篇就够了

在运维工作中,日志处理是一项至关重要的任务,它涉及到监控系统状态、排查故障以及性能调优等多个方面。以下是15个常用的日志处理脚本,这些脚本可以帮助运维人员高效地管理和分析日志数据。:该脚本能够实时监控日志文件,一旦检测到特定的错误关键字,就会发送报警邮件。:模拟logrotate功能,每天将旧日志重命名并创建新日志。:从多个服务器的日志文件中收集错误日志,并聚合分析。:将日志文件中的时间戳从UNIX时间戳转换为可读的日期格式。:统计日志文件中访问者的IP地址及其出现次数,并排序输出。

喜欢Python编程的程序员柚柚呀 1207

基于深度强化学习的无地图移动机器人导航:让机器人在未知环境中智能前行

虽然仍然面临sim-to-real差距、安全性保证等挑战,但随着算法的不断改进和计算能力的提升,基于DRL的无地图导航技术将在服务机器人、工业自动化、太空探索等领域发挥越来越重要的作用,为人类生产和生活带来更大便利和价值。对于复杂环境下的动态目标导航问题,研究人员提出了多智能体协同控制算法(如Teamwork-Net算法),通过多个智能体分别控制机器人的运动速度与运动方向,协同实现更高效、更稳定的导航性能。深度强化学习结合了深度学习的感知能力和强化学习的决策能力,非常适合解决无地图导航问题。

weixin_45131592的博客 903

NVIDIA Isaac GR00T N1 人形机器人强化学习入门教程(二)详细步骤

LeRobot 格式 1.1 加载数据集 要加载数据集,我们需要定义以下 3 项内容: 在数据中显示图像帧 我们还可以对 LeRobotSingleDataset 类中的数据进行一系列转换。下面展示了如何对数据进行转换。 现在看看应用转换后的数据有何不同。 例如,对状态和操作进行规范化和串联,对视频图像进行裁剪、调整大小和颜色抖动。 二、GR00T 推断 本教程介绍如何使用 GR00

2506_90492529的博客 3014

18个一线工作中常用Shell脚本(纯干货)

点击上方终端研发部,选择设为星标每天9:30点,干货准时奉上!1、检测两台服务器指定目录下的文件一致性#!/bin/bash #############################...

这个时代,作为程序员可能要学习小程序 1581

【Mode】FDE 求解器工作流程

Lumerical---FDE(Finite Difference Eigenmode) Solver

u011699626的博客 4944

18个工作中常用Shell脚本

假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中。Expect是一个自动交互式应用程序的工具,如telnet,ftp,passwd等。加个死循环,如果IP可用就退出,不可用提示继续输入,并使用awk判断。方法2:通过TCP建立的连接。场景:恶意访问,安全防范。

wangwcy的博客 1017

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 292

9.6华为OD机试真题 新系统【仓储货物有序出库】

华为OD机试真题 新系统【仓储货物有序出库】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【仓储货物有序出库】多语言题解。

qq_45776114的博客 896

SHELL脚本及常用命令

SHELL脚本和常用命令 什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。 常见的脚本: JavaScript(JS,前端),VBScript, ASP,JSP,PHP(后端),SQL(数据库操作语言),Perl,Shell,python,Ruby,JavaFX, Lua等。 为什么要学习和使用shell? Shell属于内置的脚本 程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理) 语法简单,代码写起来比较

zljuser的博客 1443

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Shell脚本调用的三种方法

软硬件环境ubuntu 18.04 64bitshell简介linux系统中,在一个shell脚本中去调用另一个shell脚本,这种需求还是蛮常见的,本文就来分享几种实现脚本调用的方法。...

3829

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux 常用Shell脚本,后端开发必备

Linux 常用Shell脚本,后端开发必备 文章目录Linux 常用Shell脚本,后端开发必备1用户猜数字2查看有多少远程的 IP 在连接本机3helloworld4打印 tomcat 的pid5脚本编写 剪刀 、 石头、布游戏6九九乘法表7脚本用源码来安装 memcached 服务器8检测本机当前用户是否为超级管理员9if 运算表达式11脚本 杀掉 tomcat 进程并重新启动12打印国际象棋棋盘13统计当前 Linux 系统中可以登录计算机的账户有多少个14备份 MySQL 表数据15使用死循环

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 3006

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

18个超实用Shell脚本技巧

假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。#3.如果启动成功,则等待1分钟后再次检测httpd进程数,若进程数正常,则恢复正常检测(10s一次),否则放弃重启并向管理员发送告警邮件,并退出检测。#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件。

cleveryangguang的博客 725

shell 脚本的编写学习

学习编写 Shell 脚本是 Linux/Unix 系统管理和自动化的一个非常有用的技能。Shell 脚本是一些 Shell 命令的集合,用户可以用它来自动执行任务、简化工作流程、管理系统等。

qq_40708522的博客 1245

shell脚本

人和计算机内核之间的中介。

Wthzdq的博客 2072

shell脚本入门

Shell变量; $?、$*、$#的脚本; 给输出的内容加上颜色; shell编程之if、for、while、Until、Case、select语句; mysql备份脚本模板; shell编程之LAMP一键安装脚本; shell求和1-100的值; Shell数组编程; sed、grep、awk、find;

东风麦芽糖 1307

常用Shell脚本总结

常用Shell脚本总结

一份耕耘,一分收获 823

18 个一线工作中常用 Shell 脚本

来源:XAMPP中文用户组???? 欢迎加入小哈的星球,你将获得:专属的项目实战 /1v1 提问/Java 学习路线 /学习打卡/每月赠书/社群讨论新项目:《从零手撸:仿小红书(微服务架构)》正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍;《从零手撸:前后端分离博客项目(全栈开发)》2期...

犬小哈 410

shell脚本简介及常用文本编辑命令

什么是脚本? 脚本简单地说是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的,可以通过记事本打开和编辑 为什么要学习和使用shell shell属于内置脚本 程序开发的效率非常高,依赖于功能强大的命令可以迅速的完成开发任务(批处理) 语法简单,代码写起来比较轻送,简单易学 shell简介 shell是一个C语言编写的脚本语言,它是用户与linux的桥梁,用户输入命令...

weixin_33778778的博客 509
上一篇: SandDance——微软开源的可视化工具!
下一篇: 18 个常用 Shell 脚本!!(下)
架构文摘JGWZ
博客等级 码龄5年 8808粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值