Linux课程____shell脚本应用
:一、认识shell
常用解释器 Bash , ksh , csh
登陆后默认使用shell,一般为/bin/bash,不同的指令,运行的环境也不同
二、 编写简单脚本并使用
# vim /frist.sh //编写脚本文件,简单内容
#!/bin/bash //脚本声明,时间和作者
#This is my first Shell-Script. //注释信息
cd /boot/
pwd
ls -lh vml*# chmod +x first.sh //赋予执行命令*只有赋值才能执行
方法1# . /frist.sh //执行脚本文件
方法2# sh /first.sh
方法3# source /first.sh

1.重定向

2.管道案例
[root@localhost ~]# grep “bash$” /etc/passwd | awk -F: ‘{print $1,$7}’
root /bin/bash
teacher /bin/bash
test=test2
三、变量
1.定义变量

“this is s test” 输出 this is s test
"this is a $test" 输出 this is a test2"this is a \$test" 输出 this is s \$test
2.设置全局变量

3.整数变量的运算

4.位置变量

案例
[root@hfj ~]# vi /myprog.sh#!/bin/bash
echo "first is:"
echo "$1"
echo "second is:"
echo "$2"
echo "three is:"
echo "$3"
echo "all number is:"
echo "$#"
echo "this process is:"
echo "$0"[root localhost ~]# ./myprog.sh one two three four five sixirst is:
one
second is:
two
three is:
three
all number is:
4
this process is:
./myprog.sh
5.赋值时使用引号:
“”双引号,允许通过$符号引用其他变量值
‘’单引号,在双引号按键的下方。禁止引用其他变量值,$视为普通字符
、、反撇号,在?按键的下方。命令替换,提取命令执行后的输出结果
6.预定义变量
$#:命令行中位置变量的个数
$*:所有位置变量的内容
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出 错
$0:当前执行的进程/程序名
四、小实验
写欢迎脚本,显示IP地址,时间,当前用户、系统运行时间和负载、系统版本信息。
任务命令分析如下:
ifconfig -a ens160 、date 、whoami 、uptime 、uname -a
# vim /aaa
cho " Welcome to my computer"
echo "查看160端口信息"
ifconfig -a ens160 | awk 'NR==2 {print $2; exit}'
echo "查看日期"
date
echo "查看主机名称"
whoami
echo "查看运行时间"
uptime |awk '{print $1}'
echo "查看版本号"
uname -a | awk '{print $3}'
#vim .bash_profile //写入开机文件
方法2
#!/bin/bash
# 变量定义
date=$(date)
user=$(whoami)
uptime=$(uptime)
version=$(uname -a)
ip=$(ifconfig -a ens160|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}')red='\033[31m' // 红色
blue='\033[34m' //蓝色#显示信息
echo -e " "
echo -e "${blue}本机IP: ${red}"$ip
echo -e "${blue}时间: ${red}"$date
echo -e "${blue}当前用户: ${red}"$user
echo -e "${blue}系统运行时间: ${red}"$uptime
echo -e "${blue}版本信息: ${red}"$version
echo -e " "
五、文件测试
test
[ ] :有空格
1.常用操作符,文件比较

2.数值比较

3.字符串比较

4.逻辑测试

注意:
最后输入 echo $? 才可输出结果:结果为0 表示真确,为其他数字表示错误
六、if语句
单分支,双分支,多分支
单分支 if then(成立结果) fi结束



1.单分支实验
#!/bin/bash
MOUNT_DIR="/mnt/cdrom/"
if [ ! -d $MOUNT_DIR ]
thenmkdir -p $MOUNT_DIR
fi
当脚本可以执行时echo $?输出为0,脚本文件错误时(和执行后错误无关)显示非0
2.多分支实验
pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
thenecho "Host $1 is up."
elseecho "Host $1 is down."
fi
备注:
-c 发送包数量
-i 间隔时间
-W最长等待时间
实验
编写监控脚本sysmon.sh
监控CPU使用率、内存使用率、根分区/的占用率
百分比精确到个位,如7%、12%
出现以下情况时告警:磁盘占用率超过90%、CPU使用率超过80%、内存使用率超过90%。
报警记录到日志文件/var/log/use.log。
结合计划任务,每半小时检查一次
30分钟。
分析命令:
mpstat 先安装工具包:yum install sysstat
free 查看内存占有率
df -h 文件系统使用率
if条件分支。
# vim /a3
//#!/bin/bash
//# 磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%发送报警记录
disk=$(df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}')
CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $13}' | awk -F. '{print $1}'))
mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
A=/var/log/use.log
if [ $disk -ge 90 ]
then echo "磁盘占有率超过90%" >> $A
elseecho "磁盘占有率:$disk%"
fi
if [ $CPU -ge 80 ]
then echo "CPU使用率超过80%" >> $A
elseecho "CPU使用率:$CPU%"
fi
if [ $mem -ge 90 ]
then echo "内存使用率超过90%" >> $A
elseecho "内存使用率:$mem%"fi
# crontab -e
*/30 * * * * . /a3
七、awk工具
1.选项


八、for语句
for 变量名 in 取值列表
do
命令序列
done
1.实验
批量添加用户
用户名存放在users.txt文件中,每行一个
初始密码均设为123456
验证脚本
1、编写用户列表:
[root@hfj ~]# cat userlist.txt
wangxin
anxin
jinhu
yangying
2、编写脚本
vi useradd.sh
#!/bin/bash
#add users
a=$(cat /root/userlist.txt)for b in $a
douseradd ${b}echo "123456" | passwd --stdin ${b} &> /dev/null
done3、删除用户的脚本
#!/bin/bash
a=$(cat /root/userlist.txt)
for b in $a
douserdel -r ${b} &> /dev/null
done
十、while语句
while循环语句语法:
while 条件测试操作
do
命令序列
done
1.实验
批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户,即stu1、stu2、……、stu20
初始密码均设为123456
#!/bin/bash
name="stu"
i=1
while [ $i -le 20 ]
douseradd ${name}$iecho "123456" | passwd --stdin ${name}$i &> /dev/nulllet i++
done
2.实验
猜商品价格游戏;通过变量RANDOM获得随机数;提示用户猜测并记录次数,猜中后退出循环
#我这里还加了if语句填了一点其他元素。
#!/bin/bash
#
a=$(expr ${RANDOM} % 1000) //取余
i=0
while true
doread -p "猜猜看我想的是哪个数,范围在0~999。" shulet i++if [ $shu -eq $a ];thenif [ $i -lt 10 ];thenecho "太强了,你猜了$i 次就猜中了,可惜没得奖励。"elseecho "猜了$i 次才猜中,你还差的远呢"fibreakelif [ $shu -lt $a ];thenif [ $(expr $a - $shu) -le 5 ] ;thenecho "虽然数小了,但已经很近了,你在想想"elseecho "不好意思,猜的太小了"fielse
if [ $(expr $shu - $a) -le 5 ];thenecho "虽然数大了,但已经很近了,你在考虑考虑"elseecho "不好意思,猜大了,数再小点"fifi
done
十一、case语句
case 条件 in
条件1)
执行语句
;;
条件2)
执行语句
;;
*) //其余条件
执行语句
;;
esac
erad -p “从屏幕输入” 变量名
1.小实验
击键类型识别
·提示用户输入一个字符判断出该字符是字母、数字或者其他字符
#!/bin/bash
read -p "请在键盘输入一个 字符 :" KEY
case $KEY in
[a-z]|[A-Z])
echo "这是字母"
;;
[0-9])
echo "这是数字"
;;
*)
echo "这是其他符号"
esac
2.位置参数实验
命令后的第一个字段是$1 依次向后叠加
编写系统服务脚本
使用start、stop、restart等参数来控制服务服务控制指令通过位置变量$1传入
#!/bin/bash
case $1 instart )systemctl start $2echo "开启 $2";;stop )systemctl stop $2echo "关闭 $2";;status )systemctl status $2echo "查询 $2";;*)systemctl restart $2echo "重启 $2";;
esac

十二、egrep匹配工具
正则表达式:


小测试
重生归来,不甘心再被欺辱的你决定一雪前耻,改写命运,改写命运第一步,写出满足以下条件的正则表达式


相关文章:
Linux课程____shell脚本应用
:一、认识shell 常用解释器 Bash , ksh , csh 登陆后默认使用shell,一般为/bin/bash,不同的指令,运行的环境也不同 二、 编写简单脚本并使用 # vim /frist.sh //编写脚本文件,简单内容 #!/bin/bash …...
设计模式12--组合模式
定义 案例一 案例二 优缺点...
【微服务】软件架构的演变之路
目录 单体式架构的时代单体式架构(Monolithic)优点缺点适用场景单体式架构面临诸多问题1.宽带提速,网民增多2.Web2.0时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布…...
安全算法 - 加密算法
加密算法是一种在信息安全领域中广泛应用的算法,能够将数据进行加密转换,以保证数据的保密性和安全性。 它具有保密性、对称加密和非对称加密、密钥管理、数据完整性和认证等重要特点和应用。 加密算法可以分为对称加密和非对称加密两种类型࿱…...
安全算法 - 国密算法
国密算法是中国自主研发的密码算法体系,包括对称加密算法、非对称加密算法和哈希算法。其中,国密算法采用SM4作为对称加密算法,SM2作为非对称加密算法,以及SM3作为哈希算法。国密算法在信息安全领域具有重要意义和广泛应用&#x…...
蓝桥杯2014年第十三届省赛真题-武功秘籍
一、题目 武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。 小明只想练习该书的第81页到第92页的…...
Could not initialize class java.awt.Font
项目场景: 项目场景:java项目在web端导出Excel、Word、PDF等文档 问题描述 在Windows系统中开发以及运行文件导出正常,单机部署到Linux中或者使用docker部署后,导出报错。 异常: eleasing transactional SqlSession…...
Mysql or与in的区别
创建一个表格 内涵一千万条数据 这张表中,只有id有建立索引,且其余都没有 测试1:使用or的情况下,根据主键进行查询 可以看到根据主键id进行or查询 花费了30-114毫秒,后面30多毫秒可能是因为Mysql的Buffer Pool缓冲池的…...
STM32——USART
一、通信 1.1通信是什么; 通信是将一个设备的数据发送到另一个设备中,从而实现硬件的扩展; 1.2通信的目的是什么; 实现硬件的扩展-在STM32中集成了很多功能,例如PWM输出,AD采集,定时器等&am…...
WebCopilot:一款功能强大的子域名枚举和安全漏洞扫描工具
关于WebCopilot WebCopilot是一款功能强大的子域名枚举和安全漏洞扫描工具,该工具能够枚举目标域名下的子域名,并使用不同的开源工具检测目标存在的安全漏洞。 工具运行机制 WebCopilot首先会使用assetsfinder、submaster、subfinder、accumt、finddom…...
HarmonyOS实战开发-如何实现一个支持加减乘除混合运算的计算器。
介绍 本篇Codelab基于基础组件、容器组件,实现一个支持加减乘除混合运算的计算器。 说明: 由于数字都是双精度浮点数,在计算机中是二进制存储数据的,因此小数和非安全整数(超过整数的安全范围[-Math.pow(2, 53)&#…...
每日OJ题_子序列dp⑥_力扣873. 最长的斐波那契子序列的长度
目录 力扣873. 最长的斐波那契子序列的长度 解析代码 力扣873. 最长的斐波那契子序列的长度 873. 最长的斐波那契子序列的长度 难度 中等 如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n > 3对于所有 i 2 < n&#x…...
病毒循环Viral Loop是什么?为何能实现指数增长
一、什么是病毒循环(Viral Loop)? 病毒循环(Viral Loop)是一种机制,它推动连续的推荐以实现持续增长。 它会促使你现有的客户推荐其他人,去认识你的品牌,然后让这些新客户进一步告诉…...
下载huggingface中数据集/模型(保存到本地指定路径)
一. snapshot_download # 1.安装huggingface_hub # pip install huggingface_hubimport osfrom huggingface_hub import snapshot_downloadprint(downloading entire files...) # 注意,这种方式仍然保存在cache_dir中 snapshot_download(repo_id"ibrahimhamam…...
HarmonyOS实战开发-使用List组件实现导航与内容联动的效果。
1 卡片介绍 使用ArkTS语言,实现一个导航与内容二级联动的效果。 2 标题 二级联动(ArkTS) 3 介绍 本篇Codelab是主要介绍了如何基于List组件实现一个导航和内容的二级联动效果。样例主要包含以下功能: 切换左侧导航ÿ…...
ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序
Arcgis10.2、Arcgis Engine10.2与Microsoft Visual Studio 2012的版本进行安装 1、推荐教程与安装包2、安装顺序3、安装成功测试VS新建项目可以创建ArcGIS项目,并且在VS中拖拽ArcGIS工具 4、搭建第一个简单的ArcGIS Engine 程序 ArcEngine和VS版本是有对应的&#x…...
Oracle 19c 高可用部署实战系列之Data Guard理论与实战
课程介绍 Oracle Data Guard确保企业数据的高可用性、数据保护和灾难恢复。 Oracle Data Guard提供了一组全面的服务,用于创建、维护、管理和监视一个或多个备用数据库,使生产Oracle数据库能够在灾难和数据损坏中幸存下来。Oracle Data Guard将这些备用…...
ubuntu常用记录
常用命令 ps aux |grep ... pip show pkgname nvidia-smi -l du -sh * df -h head -n 10 file.txt htop sudo apt install package_name kill process_id 软链接 在 Linux 中,软连接(Symbolic Link,也称为符号链接或软链接)是一…...
顺序表专题
文章目录 目录1. 数据结构相关概念1.1 什么是数据结构1.2 为什么需要数据结构 2. 顺序表的概念及结构3. 顺序表分类4. 实现动态顺序表4.1 初始化4.2 顺序表的尾部插入4.3 打印顺序表4.4 顺序表的头部插入4.5 顺序表的尾部删除4.6 顺序表的头部删除4.7 指定位置之前插入数据4.8 …...
手写SpringBoot(三)之自动配置
系列文章目录 手写SpringBoot(一)之简易版SpringBoot 手写SpringBoot(二)之动态切换Servlet容器 手写SpringBoot(三)之自动配置 手写SpringBoot(四)之bean动态加载 手写SpringBoot…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
