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

news2024/11/15 21:34:21

一、简介

  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.coloradmin.cn/o/1915089.html

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

相关文章

利用原生JavaScript实现匹配搜索结果的网页内容高亮

昨天在用Anki的时候&#xff0c;复习笔记时想在笔记的解析里快速查找内容&#xff0c;于是探索了一下将匹配的搜索结果高亮。开始想不用第三方库直接实现&#xff0c;结果匹配的文本被HTML标签隔断时不能成功匹配&#xff0c;后来用到了jquery的mark.js库才简单实现。事后我想看…

vue中v-if与v-show的区别

在 Vue.js 中&#xff0c;v-if 和 v-show 都是用来控制元素显示与隐藏的指令&#xff0c;但它们之间有几个关键的区别&#xff1a; 直接上图 一. 条件渲染方式不同 v-if&#xff1a; 真正的条件渲染&#xff1a;v-if 指令会根据表达式的真假来销毁或重新创建 DOM 元素及其…

拟合衰减振动模型,估算阻尼比和阻尼系数

拟合衰减振动模型&#xff0c;估算阻尼比和阻尼系数 flyfish 衰减振动模型 在自由振动系统中&#xff0c;阻尼振动可以用以下公式描述&#xff1a; x ( t ) x 0 e − ζ ω n t cos ⁡ ( ω d t ϕ ) x(t) x_0 e^{-\zeta \omega_n t} \cos(\omega_d t \phi) x(t)x0​e−…

数据结构与算法-动态规划-三角形最小路径和

三角形最小路径和 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正位于当前行的下标 i &…

JUC并发编程-05:线程高级部分-源码解读

线程高级部分-源码解读 多线程高并发底层锁机制与优化最佳实践深入JDK源码理解LongAdder的分段CAS优化机制 公平锁和非公平锁原理解析 多线程高并发底层锁机制与优化最佳实践 深入JDK源码理解LongAdder的分段CAS优化机制 多个线程进入&#xff0c;为了防止空转&#xff0c;所…

Android11 窗口动画

窗口进入动画 应用端窗口绘制完成之后&#xff0c;调用finshDraw告知WMS&#xff0c;WMS这边最后就会调用WindowSurfacePlacer的performSurfacePlacement方法&#xff0c;最终调用到 WindowStateAnimator的commitFinishDrawingLocked方法 //frameworks/base/services/core/jav…

基于Transformer的端到端的目标检测 | 读论文

本文正在参加 人工智能创作者扶持计划 提及到计算机视觉的目标检测&#xff0c;我们一般会最先想到卷积神经网络&#xff08;CNN&#xff09;&#xff0c;因为这算是目标检测领域的开山之作了&#xff0c;在很长的一段时间里人们都折服于卷积神经网络在图像处理领域的优势&…

Redis 主从复制,集群与高可用

虽然Redis可以实现单机的数据持久化&#xff0c;但无论是RDB也好或者AOF也好&#xff0c;都解决不了单点宕机问题&#xff0c;即一旦单台 redis服务器本身出现系统故障、硬件故障等问题后&#xff0c;就会直接造成数据的丢失 此外,单机的性能也是有极限的,因此需要使用另外的技…

数字安全护航技术能力全景图 | 亚信安全实力占据75领域

近日&#xff0c;2024全球数字经济大会——数字安全生态建设专题论坛在北京成功举办。会上&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;正式发布了《数字安全护航技术能力全景图》&#xff0c;亚信安全凭借全面的产品技术能力&#xff0c;成功入…

蓝卓创始人褚健:工业软件是数字化转型的灵魂和核心驱动力

如果把“工业3.0”简单理解为就是“自动化”&#xff0c;“工业4.0”理解为是“智能化”&#xff0c;那么“智能化”的实现一定要有软件。如同今天的移动互联网&#xff0c;是因为有大量的APP&#xff0c;所以让人们进入了智能时代。映射到工业、制造业领域&#xff0c;就是要依…

[GICv3] 4. 中断分发和路由(Distribution and Routing)

&#x1f4a1;介绍如何将中断分发和路由到目标PE&#xff0c;以及中断号的分配。 分发和重分发&#xff08;The disributor an Redistributors&#xff09; 分配器为SPI提供路由配置&#xff0c;并持有所有相关的路由和优先级信息。重新分配器提供PPI和SGI的配置设置。 重新分…

京东速运|通过python查询快递单号API

本次讲解如何使用快递聚合供应商来实现查询京东速运快递物流轨迹&#xff0c;首先&#xff0c;我们需要准备的资源。 平台的密钥key&#xff1a;登录后在个人中心查看 测试接口的链接&#xff1a;在下方文档处查看 其中&#xff0c;KEY为用户后台我的api页面展示的API密钥, 代…

《米小圈漫画历史》:历史启蒙,看漫画书就可以啦!

在当今信息爆炸的时代&#xff0c;如何让孩子在娱乐中学习&#xff0c;一直是许多家长关心的问题。《米小圈漫画历史》系列作为一部集合了趣味性和教育性的漫画书&#xff0c;以其独特的视角和精彩的故事情节&#xff0c;成为了许多家庭历史启蒙的首选。本文将通过探索漫画书的…

MT3046 愤怒的象棚

思路&#xff1a; a[]存愤怒值&#xff1b;b[i]存以i结尾的&#xff0c;窗口里的最大值&#xff1b;c[i]存以i结尾的&#xff0c;窗口里面包含✳的最大值。 &#xff08;✳为新大象的位置&#xff09; 例&#xff1a;1 2 3 4 ✳ 5 6 7 8 9 则ans的计算公式b3b4c4c5c6b7b8b9…

探索AI大模型(LLM)减少幻觉的三种策略

大型语言模型&#xff08;LLM&#xff09;在生成文本方面具有令人瞩目的能力&#xff0c;但在面对陌生概念和查询时&#xff0c;它们有时会输出看似合理却实际错误的信息&#xff0c;这种现象被称为“幻觉”。近期的研究发现&#xff0c;通过策略性微调和情境学习、检索增强等方…

Linux基础指令解析+项目部署环境

文章目录 前言基础指令部署项目环境总结 前言 Linux的魅力在于其强大的可定制性和灵活性&#xff0c;这使得它成为了众多开发者和运维人员的首选工具。然而&#xff0c;Linux的指令系统庞大而复杂&#xff0c;初学者往往容易迷失其中。因此&#xff0c;本文将带领大家走进Linu…

一键换衣,这个AI可以让你实现穿衣自由

基于图像的虚拟穿衣是一种流行且前景广阔的图像合成技术&#xff0c;能够显著改善消费者的购物体验&#xff0c;并降低服装商家的广告成本。顾名思义&#xff0c;虚拟穿衣任务旨在生成目标人穿着给定服装的图像。 OOTDiffusion简述 图1 虚拟换衣 基于图像的虚拟穿衣目前面临两…

解决linux服务器下微信公众号授权和业务接口授权失败的问题

我们的公众号web站点代码在Windows服务器IIS下运行没有问题&#xff0c;迁移到linux 服务器的nginx下之后&#xff0c;出现了微信授权和接口授权无法通过引起的问题。如下图所示&#xff1a; 经过排查&#xff0c;发现是因为nginx配置默认对 http 配置节下的 underscores_in_he…

MySQL黑马教学对应视屏笔记分享之聚合函数,以及排序语句的讲解笔记

聚合函数 注意&#xff1a;null值不参与聚合函数的计算。 分组查询 2.where与having的区别 执行时机不同&#xff1a;where是在分组之前进行过滤&#xff0c;不满足where条件&#xff0c;不参与分组&#xff1b;而having是分组之后对结果进行过滤。判断条件不同&#xff1a;w…

3,区块链加密(react+区块链实战)

3&#xff0c;区块链加密&#xff08;react区块链实战&#xff09; 3.1 哈希3.2 pow-pos-dpos3.3非对称加密&#xff08;1&#xff09;对称加密AES&#xff08;2&#xff09;非对称加密RSA 3.4 拜占庭将军3.5 P2P网络3.6 区块链 3.1 哈希 密码学&#xff0c;区块链的技术名词 …