Linux基础知识(十六)shell脚本编程

一、简介

  1. 用户通过shell向计算机发送指令
  2. 计算机通过shell给用户返回指令的执行结果

1.1 通过shell编程可以达到的效果

  • 提高工作效率
  • 可以实现自动化

1.2 需要学习的内容

  • Linux
  • shell的语法规范

1.3 编写shell的流程

  • 第一步:用vi/vim创建一个.sh的文件
  • 第二步:在文件中进行开发
  • 第三步:给文件赋予可执行权限
  • 第四步:执行脚本

二、变量

2.1 变量分类

  • 本地变量
  • 局部变量
  • 环境变量
  • 位置变量
  • 特殊变量

2.2 本地变量

  • 定义变量:Var_Name="Value"  变量名=变量值
  • 引用变量:${Var_Name}  [{}可以省略不写]
  • 撤销变量:unset Var_Name

本地变量适合在终端使用,新开一个终端或关闭后就会消失

例:

本地变量在哪里都可以用,文件和终端不在一个环境内

2.3 局部变量

定义:local Var_Name="Value"

  • 局部变量只在函数内部生效

例:

a{
    name=张三
    echo
}
b{
    name=李四
    echo
}

只在内部有效,出了花括号没用

2.4 环境变量

  • 定义:expot Var_Name="Value"   【最好不要自己随便定义,环境变量都是大写的】
  • set命令可以显示当前系统上的所有变量
  • export、env命令可以显示环境变量

常用的环境变量

  • PS1                       #命令提示符
  • HOSTNAME         #存放主机名的
  • LANG                   #语言
  • ...

2.5 位置变量

主要用于橡胶板中传递参数

表示方法:$1,$2,$3,..$n

例:    ./1.sh 1 5 9 (传入的参数)

2.6 特殊变量

  • $0         #脚本自身的名称
  • $?         #上个命令的执行状态
  • $#         #参数列表

2.7 变量命名要求:

  • 只能使用数字、字母和组成
  • 不能以数字开头
  • 不能使用程序中的关键字

2.8 变量名的默认规则:

  • 见名知意
  • 自定义变量小写
  • 环境变量大写

三、重定向

3.1 什么是重定向?

重定向就是修改指令发送给计算机的途径,计算机将指令执行结果返回给用户的途径

3.2 重定向的分类

  • 输出重定向
  • 标准输出重定向
  • 错误输出重定向
3.2.1 输入
  • 标准输入:键盘
  • 输入重定向:<
3.2.2 输出
  • 标准输出:终端
  • 标准错误输出:终端
  • 标准输出重定向:>     >>
  • 标准错误输出重定向:2>     2>>

将结果保存到文件、屏蔽输出结果

3.3 特殊文件

  • /dev/null
  • /dev/zero

dd if=/dev/zero of=zeros.bin bs=1G count=100000   

 #读0,用来测试的,不显示内容但会占用内存

3.4 管道符

  • |
  • 仅仅用于传递命令的执行结果给另一个命令

四、bash条件判断基础

4.1 判断的作用:

  • 判断后续操作的前提条件是否满足
  • 如果满足执行一种指令,不满足则执行另一种指令

4.2 条件测试类型

  • 整型测试
  • 字符测试
  • 文件测试

4.3 逻辑运算

4.3.1 与运算   &&
  • 真&&真=真
  • 真&&假=假
  • 假&&假=假
  • 假&&真=假
4.3.2 或运算   ||
  • 真||真=真
  • 真||假=真
  • 假||真=真
  • 假||假=假
4.3.3 非运算   !
  • !真=假
  • !假=真

4.4 操作符

  • -gt         大于
  • -lt          小于
  • -ge        大于等于
  • -le         小于等于
  • -ne        不等于
  • -eq        等于

4.5 判断方式

test EXPRESSION

  例:test 3 -gt 4

[EXPRSSION]

例: [ 3 -gt 4 ]

[[ EXPRESSION ]]

例:[[ 2 -gt 1 ]]

用命令执行状态来作为判断条件

查看脚本的执行过程:

bash -x 脚本名

4.6 bash 条件判断语法格式

if判断的三种格式

4.6.1 单分支
if 条件;then
    分支1
fi
4.6.2 双分支
if 条件;then
    分支1
else
    分支2
fi
4.6.3 多分支
if 条件;then
    分支1
elif
    分支2
elif 
    分支3
...
else
    分支
fi

例:成绩大于90,则输出成绩A;成绩大于80,则输出成绩B;成绩大于70,则输出成绩C;成绩大于60,则输出成绩D;0分以上则输出E

例:让用户指定一个文件,判断如果有空白行,就显示空白行数,没有则提示"no"

4.7 整型测试方法:

整型测试通常都是二元测试

格式是:num1 oprand num2

4.8 用户和脚本进行交互

位置变量

read命令

read -p "参数" 变量名

例:

read -p "请输入第一个数字:" num

例题:

让用户通过键盘输入一个用户,如果用户存在就显示其用户的用户名和uid,否则就显示用户不存在

4.9 字符测试法

双目测试

比较两个字符串

  • ==   等于,等值比较
  • !=    不等于
  • =~    匹配是否在范围

单目测试

  • -n $stringVar:字符串是否为空,不空为真,空则假
  • -z $stringVar:字符串是否为空,空则为真,不空为假

 例:

  • -a:用于逻辑与的操作
  • -e:检查文件是否存在

例:

  • -f:检查文件是否为普通文件

  • -d:检查文件是否为目录文件

  • -r:检查文件是否可读

  • -w:检查文件是否可写

  • -x:检查文件是否可执行

例:让用户输入一个用户名,先判定用户是否存在,不存在以7为退出码;

判断用户的shell是否为/bin/bash,如果是则显示"bash user",退出码为0,否则则显示为"not bash user" 退出码为1

  • -b:判断是否存在且是一个块特殊文件

例:1.显示如下菜单

cpu)    show cpu info;

mem) sowmemory info;

quit)   quit

请输入你的选择:

2.如果用户选择了cpu则显示文件/proc/cpuinfo的信息;

3..如果用户选择了mem则显示文件/proc/meminfo的信息;

4.如果用户选择了quit则退出且状态码为5;

5.如果用户输入其他其他字符,则显示未知选项请重新执行脚本,退出码为6;

4.10 位置参数轮替

#!/bin/bash
echo "参数列表:$#"
echo "参数列表:$@"
echo " "
shift 2
echo "参数列表:$#"
echo "参数列表:$@"
echo " "
shift 2
echo "参数列表:$#"
echo "参数列表:$@"

说明:shift在这里就是起到了一个轮替的作用,2表示一次轮替2个参数

在下一次echo的时候,参数会从轮替后的数字开始计算

例:使用形式如下:username u username[v{1|2}]

-u选项用于指定用户名;脚本显示用户的uid,gid

如果同时使用-v选项,v后面值是1,显示用户的家目录

v后面的值是2,显示用户的家目录和shell类型

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 重载运算符 addition (+), subtraction (-) and multiplication (*)

C 重载运算符 addition , subtraction - and multiplication * 1. Operator Overloading (运算符重载)2. Developing an Operator Overloading Example2.1. Adding an Addition Operator (添加加法运算符)2.2. Overloading Restrictions (重载限制)2.3. 重载运算符 - 和 * Refe…

特征融合篇 | YOLOv10改进之在Neck网络中添加加权双向特征金字塔BiFPN

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。在计算机视觉任务中&#xff0c;特征金字塔网络&#xff08;FPN&#xff09;是一种常用的方法&#xff0c;它通过构建不同尺度的特征图来捕获不同尺度的目标。然而&#xff0c;传统的FPN存在一些缺点&#xff0c;如特征融合…

05STM32EXIT外部中断中断系统

STM32EXIT外部中断&中断系统 中断系统中断触发条件&#xff1a;中断处理流程和用途&#xff1a; STM32中断NVIC嵌套中断向量控制器基本结构 中断系统 中断触发条件&#xff1a; 对外部中断来说&#xff0c;可以是引脚发生了电平跳变 对定时器来说&#xff0c;可以是定时的…

【最强八股文 -- 计算机网络】【快速版】WWW 构建技术 (3 项)

1.HTML(HyperText Markup Language):作为页面的文本标记语言 2.HTTP(HyperTextTransfer Protocol):文档传递协议 3.URL(Uniform Resource Locator):指定文档所在地址 HTTPS 和 HTTP 的区别: HTTP: 以明文的方式在网络中传输数据&#xff0c;HTTPS 解决了HTTP 不安全的缺陷&…

.NET周刊【7月第1期 2024-07-07】

国内文章 学习.NET 8 MiniApis入门 https://www.cnblogs.com/hejiale010426/p/18280441 MiniApis是ASP.NET Core中的轻量级框架&#xff0c;用最少的代码和配置创建HTTP API。其特点包括简洁明了、性能卓越、灵活多变、易于学习使用&#xff0c;并与ASP.NET Core生态系统完美…

matlab仿真 模拟调制(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; 1.幅度调制 clear all ts0.0025; %信号抽样时间间隔 t0:ts:10-ts;%时间矢量 fs1/ts;%抽样频率 dffs/length(t); %fft的频率分…

ApiFox或postman怎么用params类型传输json或集合+json的String类型

你是否碰见过这样的接口? post请求然后传输的参数都要和查询时一样以param形式传参数,那String什么的都好说,传就直接进后台了,那json呢,集合呢,是不是直接给你返400呢. 1.传json如何处理 那我们看看怎么实现,如果你要传json数据,那需要将特殊字符转义,也叫url转码,否则传不…

JRT打印药敏报告

最近没写jrt系列博客&#xff0c;不是中途而废了。而是在写微生物系统。今天终于把微生物大体完成了&#xff0c;伴随着业务的实现&#xff0c;框架趋于完善和稳定。构建一套完美而强大的打印体系一直是我的理想&#xff0c;从最开始C#的winform打印控件到刚接触bs时候用js打印…

R包:reticulate R对python的接口包

介绍1 R和python是两种不同的编程语言&#xff0c;前者是统计学家发明并且服务数学统计计算&#xff0c;后者则是最万能的胶水语言。随着大数据时代的到来&#xff0c;两者在数据分析领域存在越来越多的共同点且可以相互使用&#xff0c;为了破解二者的编程壁垒&#xff0c;CR…

✅小程序申请+备案教程

##red## &#x1f534; 大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff0c;雄雄的小课堂。 零、注意事项 需要特别注意的是&#xff0c;如果公司主体的微信公众号已经交过300块钱的认证费了的话&#xff0c;注册小程序通过公众号来注册&#xff0c;可以免…

OpenCV 寻找棋盘格角点及绘制

目录 一、概念 二、代码 2.1实现步骤 2.2完整代码 三、实现效果 一、概念 寻找棋盘格角点&#xff08;Checkerboard Corners&#xff09;是计算机视觉中相机标定&#xff08;Camera Calibration&#xff09;过程的重要步骤。 OpenCV 提供了函数 cv2.findChessboardCorners…

【Python】 已解决:ModuleNotFoundError: No module named…

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ModuleNotFoundError: No module named… 一、分析问题背景 在使用Python进行开发时&#xff0c;有时会遇到“ModuleNotFoundError: No module named…”这样的…

做突破交易时,需要注意的进场细节有哪些?

突破交易揭示了市场未来的走向。 在这种情况下&#xff0c;面对市场时我们应该如何入场操作呢&#xff1f;接下来&#xff0c;让我们来细化一下实施的具体步骤。 01. 在交易中&#xff0c;周期的考量比价格突破更为关键。 当价格突破发生时&#xff0c;市场的平静被打破&#x…

非线性系列(三)—— 非线性求解器算法分类

1. 总体认知 CAE中的非线性方程组求解主要依赖牛顿法&#xff08;及牛顿法的变体&#xff09;&#xff0c;步骤如下 以线搜索方法为例&#xff0c;流程如下: 2. 方法分类 适用范围大类小类描述牛顿法雅可比矩阵难获取拟牛顿法 Broyden&#xff08;Secant method&#xff09;、…

评估测试用例有效性 5个方面

评估测试用例的有效性是确保软件测试活动能够达到预期目标的关键步骤&#xff0c;有助于测试团队优化测试计划&#xff0c;提高测试效率&#xff0c;减少返工&#xff0c;节省成本。如果缺乏对测试用例的有效性评估&#xff0c;可能会导致测试用例无法覆盖关键功能点&#xff0…

客户​青海地区图像识别,云拍产品实施安装#数采物联

客户青海地区图像识别&#xff0c;云拍产品实施安装。#数采物联。 客户青海地区图像识别&#xff0c;云拍产品实施安装。#数采物联。

系统服务综合作业

首先配置自动挂载 服务器的/rhce 自动挂载在客服端的/nfs/rhce 首先在服务器进行配置 dnf install nfs-utils -y [rootlocalhost ~]# vim /etc/exports [rootlocalhost ~]# firewall-cmd --permanent --add-servicenfs success [rootlocalhost ~]# firewall-cmd --permanen…

【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

​​​​​​​ 目录 一、引言 二、pipeline库 2.1 概述 2.2 使用task实例化pipeline对象 2.2.1 基于task实例化“自动语音识别” 2.2.2 task列表 2.2.3 task默认模型 2.3 使用model实例化pipeline对象 2.3.1 基于model实例化“自动语音识别” 2.3.2 查看model与task…

数据结构——约瑟夫环C语言链表实现

约瑟夫环问题由古罗马史学家约瑟夫&#xff08;Josephus&#xff09;提出&#xff0c;他参加并记录了公元66—70年犹太人反抗罗马的起义。在城市沦陷之后&#xff0c;他和40名死硬的将士在附近的一个洞穴中避难。起义者表示“宁为玉碎不为瓦全”&#xff0c;约瑟夫则想“留得青…