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匹配工具

正则表达式:

小测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

翻译 《The Old New Thing》 - Why is a registry file called a “hive“?

Why is a registry file called a “hive“?https://devblogs.microsoft.com/oldnewthing/20030808-00/?p42943 为什么注册表文件被称为‘蜂巢’? Raymond Chen 2003年8月8日 分享一个没用的知识: 话说有一位 Windows NT 的开发者十分讨厌蜜蜂。于是&a…

sectigo 单IP证书360元

IP数字证书使用了强大的加密功能,能够有效保护网站和用户数据在传输过程中的安全。由Sectigo颁发的各种数字证书兼容性高,可以支持几乎所有主流浏览器,在用户访问时不会出现“不安全”提示,Sectigo旗下的IP证书可以为只有公网IP地…

HAProxy + Vitess负载均衡

一、环境搭建 Vitess环境搭建: 具体vitess安装不再赘述,主要是需要启动3个vtgate(官方推荐vtgate和vtablet数量一致) 操作: 在vitess/examples/common/scripts目录中,修改vtgate-up.sh文件,…

Python之Opencv教程(4):识别图片中多张人脸

1、识别代码 导入必要的库 import cv2加载人脸识别器 face_detector cv.CascadeClassifier("data//haarcascade_frontalface_alt.xml")这里使用了OpenCV自带的人脸识别分类器,路径为cv2.data.haarcascades ‘haarcascade_frontalface_default.xml’。你…

pytorch | torch.contiguous()方法

torch.contiguous()方法语义上是“连续的”,经常与torch.permute()、torch.transpose()、torch.view()方法一起使用,要理解这样使用的缘由,得从pytorch多维数组的低层存储开始说起: touch.view()方法对张量改变“形状”其实并没有…

Linux-3 yum和vim

目录 本节目标: Linux 软件包管理器 yum 什么是软件包 1.yum是什么?软件包? 2.Linux(centos)的生态 3.yum的相关操作 我怎么知道我应该安装什么软件? 4.yum的本地配置 关于 rzsz 查看软件包 Linux编辑器-vim使用 1.v…

开源知识库平台Raneto--使用Docker部署Raneto

文章目录 一、Raneto介绍1.1 Raneto简介1.2 知识库介绍 二、阿里云环境2.1 环境规划2.2 部署介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Raneto镜像五、部署Raneto知识库平台5.1 创建挂载目录5.2 编辑config.js文件5.…

MySQL InnoDB 之 多版本并发控制(MVCC)

多版本并发控制(MVCC,Multi-Version Concurrency Control)是数据库管理系统中用于提供高并发性和在事务处理中实现隔离级别的一种技术。MVCC 允许系统在不完全锁定数据库资源的情况下,处理多个并发事务,从而提高了数据…

Datacom HCIP笔记-OSPF协议 之二

链路:路由器之间的相连的链路 状态:链路上的参数在某一时刻的状态 单边邻居 one way? 收到对端发来的hello报文,其中没有自己的router id LSA类型: 1类LSA:描述路由器自身加入到ospf进程中的直连链路的状态…

大数据-TXT文本重复行计数工具

支持系统类型:Windows 64位系统 Linux 64位系统 苹果64位系统 硬盘要求:固态硬盘(有效剩余磁盘空间大小最低3倍于大数据文件的大小) 内存要求:最低8G(例如只有几百G数据) 如果处理TB级大数据文…

STM32 软件I2C方式读取AS5600磁编码器获取角度例程

STM32 软件I2C方式读取AS5600磁编码器获取角度例程 🔖本例程使用正点原子例程作为工程模板创建。 📘 硬件电路部分 🌿原理图部分: 🌿PCB布线和电路 ✨注意事项:有些硬件需要I2C上拉,否则检…

校园局域网钓鱼实例

Hello ! 我是"我是小恒不会java" 本文仅作为针对普通同学眼中的网络安全,设计的钓鱼案例也是怎么简陋怎么来 注:本文不会外传代码,后端已停止使用,仅作为学习使用 基本原理 内网主机扫描DNS劫持前端模拟后端…

【2023】kafka入门学习与使用(kafka-2)

目录💻 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型: 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

大模型与数据分析:探索Text-to-SQL

当今大模型如此火热,作为一名数据同学,持续在关注LLM是如何应用在数据分析中的,也关注到很多公司推出了AI数智助手的产品,比如火山引擎数智平台VeDI—AI助手、 Kyligence Copilot AI数智助理、ThoughtSpot等,通过接入人…

Node.js的Event Loop:六个阶段详解

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

括号生成(回溯+剪枝)

22. 括号生成 - 力扣(LeetCode) 题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 样例输入 示例 1: 输入:n 3 输出:["((()))&q…

五年前端的面试之旅

哈喽我是树酱,最近整理了下前端面试相关的知识题库,借此分享给各位小伙伴,帮助小伙伴早日拿到钟意的offer! 前言 最近就业市场不景气,跟大环境较差也有关,确实给我们也会带来一定的挑战。在招聘网站投简历的…

python批量转化pdf图片为jpg图片

1.把pdf图片批量转为jpg;需要注意的是,需要先安装poppler这个软件,具体安装教程放在下面代码中了 2.代码 #poppler安装教程参考:https://blog.csdn.net/wy01415/article/details/110257130 #windows上poppler下载链接&#xff1a…

从零开始机器学习(机器学习 监督学习之线性回归 损失函数及可视化 梯度下降 线性回归的平方误差损失函数 lab实验)

文章目录 机器学习定义监督学习之线性回归损失函数及可视化梯度下降线性回归的平方误差损失函数lab实验 机器学习定义 机器学习就是机器通过不断训练数据集从逐渐知道正确的结果 机器学习包括监督学习和非监督学习 监督学习:需要输入数据和结果数据来不断训练学习…

linux0.11中jmpi 0,8解析

系统在执行该行代码时已经为保护模式, jmpi 0,8会将段选择子(selector)载入cs段寄存器,并计算出逻辑地址。 段选择子的结构如下: 段选择子包括三部分:描述符索引(index)、TI、请求特权级(RPL)。…