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

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时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布…...

安全算法 - 加密算法

加密算法是一种在信息安全领域中广泛应用的算法,能够将数据进行加密转换,以保证数据的保密性和安全性。 它具有保密性、对称加密和非对称加密、密钥管理、数据完整性和认证等重要特点和应用。 加密算法可以分为对称加密和非对称加密两种类型&#xff1…...

安全算法 - 国密算法

国密算法是中国自主研发的密码算法体系,包括对称加密算法、非对称加密算法和哈希算法。其中,国密算法采用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 满足下列条件&#xff0c;就说它是 斐波那契式 的&#xff1a; n > 3对于所有 i 2 < n&#x…...

病毒循环Viral Loop是什么?为何能实现指数增长

一、什么是病毒循环&#xff08;Viral Loop&#xff09;&#xff1f; 病毒循环&#xff08;Viral Loop&#xff09;是一种机制&#xff0c;它推动连续的推荐以实现持续增长。 它会促使你现有的客户推荐其他人&#xff0c;去认识你的品牌&#xff0c;然后让这些新客户进一步告诉…...

下载huggingface中数据集/模型(保存到本地指定路径)

一. snapshot_download # 1.安装huggingface_hub # pip install huggingface_hubimport osfrom huggingface_hub import snapshot_downloadprint(downloading entire files...) # 注意&#xff0c;这种方式仍然保存在cache_dir中 snapshot_download(repo_id"ibrahimhamam…...

HarmonyOS实战开发-使用List组件实现导航与内容联动的效果。

1 卡片介绍 使用ArkTS语言&#xff0c;实现一个导航与内容二级联动的效果。 2 标题 二级联动&#xff08;ArkTS&#xff09; 3 介绍 本篇Codelab是主要介绍了如何基于List组件实现一个导航和内容的二级联动效果。样例主要包含以下功能&#xff1a; 切换左侧导航&#xff…...

ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序

Arcgis10.2、Arcgis Engine10.2与Microsoft Visual Studio 2012的版本进行安装 1、推荐教程与安装包2、安装顺序3、安装成功测试VS新建项目可以创建ArcGIS项目&#xff0c;并且在VS中拖拽ArcGIS工具 4、搭建第一个简单的ArcGIS Engine 程序 ArcEngine和VS版本是有对应的&#x…...

Oracle 19c 高可用部署实战系列之Data Guard理论与实战

课程介绍 Oracle Data Guard确保企业数据的高可用性、数据保护和灾难恢复。 Oracle Data Guard提供了一组全面的服务&#xff0c;用于创建、维护、管理和监视一个或多个备用数据库&#xff0c;使生产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 中&#xff0c;软连接&#xff08;Symbolic Link&#xff0c;也称为符号链接或软链接&#xff09;是一…...

顺序表专题

文章目录 目录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&#xff08;一&#xff09;之简易版SpringBoot 手写SpringBoot&#xff08;二&#xff09;之动态切换Servlet容器 手写SpringBoot&#xff08;三&#xff09;之自动配置 手写SpringBoot&#xff08;四&#xff09;之bean动态加载 手写SpringBoot…...

vitepress builld报错

问题&#xff1a;build时报错&#xff1a;document/window is not defined。 背景&#xff1a;使用vitepress展示自定义的组件&#xff0c;之前build是没有问题了&#xff0c;由于新增了qr-code以及quill富文本组件&#xff0c;导致打包时报错。 原因&#xff1a;vitepress官…...

redis分布式锁-----基于Redis的SETNX命令的简单分布式锁实现

Redis的SETNX命令的简单分布式锁实现的Java示例 首先&#xff0c;确保你已经引入了Jedis这个Java Redis客户端库。你可以通过Maven或Gradle来添加依赖。 1、Maven依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifact…...

HTTP请求头中的Host表示是什么?

表示处理请求的服务器地址&#xff0c;由于一台服务器可能部署多个网站&#xff0c;如果通过域名访问&#xff0c;host就是域名...

apk被play protect blocked的解决方案(ADB+Appium+webdriverio)

起因:公司有海外项目&#xff0c;需要推广apk &#xff0c;数量多&#xff0c;但是由于被play protect阻止安装&#xff0c;初版解决方案 apk加固、换签名、垃圾代码、修改资源文件的MD5&#xff0c;但是由于原生代码标记过于严重&#xff0c;推广成本高&#xff0c;又换了一种…...

【BlossomRPC】手把手教你写一个RPC协议

文章目录 新的开始什么是RPC?设计一个RPC需要些什么&#xff1f; 新的开始 经常会遇到一些项目&#xff0c;看着看着就发现看不懂文档了&#xff0c;也就是会出现一些跳过讲解的文章&#xff0c;使得自己很难了解某种中间件的开发全貌&#xff0c;所以想着自己先设计一个比较…...

算法之美:堆排序原理剖析及应用案例分解实现

这段时间持续更新关于“二叉树”的专栏文章&#xff0c;关心的小伙伴们对于二叉树的基本原理已经有了初步的了解。接下来&#xff0c;我将会更深入地探究二叉树的原理&#xff0c;并且展示如何将这些原理应用到更广泛的场景中去。文章将延续前面文章的风格&#xff0c;尽量精炼…...

Net8 ABP VNext完美集成FreeSql、SqlSugar,实现聚合根增删改查,完全去掉EFCore

没有基础的&#xff0c;请参考上一篇 彩蛋到最后一张图里找 参考链接 结果直接上图&#xff0c;没有任何业务代码 启动后&#xff0c;已经有了基本的CRUD功能&#xff0c;还扩展了批量删除&#xff0c;与动态查询 动态查询截图&#xff0c;支持分页&#xff0c;排序 实现原理…...

yolov8直接调用zed相机实现三维测距(python)

yolov8直接调用zed相机实现三维测距&#xff08;python&#xff09; 1. 相关配置2. 版本一2.1 相关代码2.2 实验结果 3. 版本二3.1 相关代码3.2 实验结果 相关链接 此项目直接调用zed相机实现三维测距&#xff0c;无需标定&#xff0c;相关内容如下&#xff1a; 1.yolov5直接调…...

element跑马灯/轮播图,第一页隐藏左边按钮,最后一页隐藏右边按钮(vue 开箱即用)

图示&#xff1a; 第一步&#xff1a; <el-carousel :class"changeIndex0?leftBtnNone:changeIndeximgDataList.length-1? rightBtnNone:" height"546px" :autoplay"false" change"changeNext"><el-carousel-item v-for…...

下载及安装PHP,composer,phpstudy,thinkPHP6.0框架

文章目录 目录 文章目录 前言 一、下载PHP 二、下载composer 三、下载PHPstudy 四、下载think PHP 1.下载 2.多应用开发 前言 thinkPHP是一款开源的PHP框架&#xff0c;它是基于MVC&#xff08;Model-View-Controller&#xff09;设计模式构建的。thinkPHP提供了丰富的…...

前端会员中心wordpress/杭州百度开户

【算法分析】 简单而言&#xff0c;将中缀表达式转换为后缀表达式的算法需要注意以下两点。 ● 操作数始终入操作数栈。 ● 操作符入操作符栈时&#xff0c;比较与操作符栈的栈顶元素的优先级&#xff0c;然后选择入操作符栈还是入操作数栈。直至将操作符栈的所有元素入操作数栈…...

wordpress仿微信底部菜单css/宁波优化关键词首页排名

Linux 入侵检测小结 0x00 审计命令 在linux中有5个用于审计的命令&#xff1a; last&#xff1a;这个命令可用于查看我们系统的成功登录、关机、重启等情况&#xff1b;这个命令就是将/var/log/wtmp文件格式化输出。lastb&#xff1a;这个命令用于查看登录失败的情况&#xff…...

wordpress 访客/广州全网推广

目录 一.静态代理 二.动态代理&#xff1a; 一.静态代理 1&#xff09;静态代理角色分析&#xff1a; a&#xff1a;抽象角色&#xff1a;一般使用接口 或者 抽象类来实现。 b&#xff1a;真实角色&#xff1a;被代…...

c2c网站开发/如何做网站搜索引擎优化

第一部分 WEB层均衡负载.net平台下&#xff0c;我目前部署过的均衡负载有两种方式(iis7和Nginx)&#xff0c;以下以Nginx为例讲解web层的均衡负载. 简介&#xff1a;Nginx 超越 Apache 的高性能和稳定性&#xff0c;使得国内使用 Nginx 作为 Web 服务器的网站也越来越多&#x…...

wordpress一栏主题/阿里巴巴推广

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于用户的协同过滤推荐&#xff08;User-based CF&#xff09;的原理假设&#xff1a;跟你喜好相似的人…...

做外贸门户网站/seo免费优化网站

基本字符IVXLCDM相应的阿拉伯数字表示为1510501005001000相同的数字连写、所表示的数等于这些数字相加得到的数、如&#xff1a;Ⅲ3&#xff1b;小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如&#xff1a;Ⅷ8、Ⅻ12&#xff1b;小的数字&#xff08;限于…...