Shell脚本学习(一):Shell内置命令与Shell运算符

Shell内置命令

理解内置命令的含义。

内置命令介绍

Shell内置命令,就是由Bash Shell自身提供的命令,而不是文件系统中的可执行文件。

使用type 可以用来确定一个命令是否是内置命令:

type 命令

演示:

在这里插入图片描述

对于上述演示的两个命令来说,cd就是内嵌的Shell命令,而ifconfig就是一个可执行文件。

通常来说,内置命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘I/O,还需要fork 出一个单独的进程来执行,执行完成后再退出。而执行内置命令相当于调用当前Shell进程的一个函数,还是在当前Shell环境进程内,减少了上下文切换。

常用的内置命令

alias介绍

alias用于给命令创建别名。

好处:可以将经常操作比较复杂的命令进行设置别名,通过别名的操作提高工作效率。

若该命令不带任何参数,则显示当前Shell进程中的所有别名列表。

在这里插入图片描述
上面的是系统为了方便命令操作系统默认将部分命令创建为别名ll 的命令与 ls -l 的效果一样,就是因为ll 是别名。

alias别名定义语法
alias 别名="命令"

这里使用单引号或者双引号都可以。

演示:

在这里插入图片描述

unalias别名删除语法

删除指定的别名:

unalias 别名

在这里插入图片描述

删除当前Shell环境中所有的别名:

unalias -a

演示是比较简单的,这里不再赘述。

注意:以上两种方式删除都是临时删除当前Shell的别名,如果想永久删除必须去配置文件中手动删除。

echo介绍

echo是一个Shell内置命令,用于在终端输出字符串,并在最后默认加上换行符。

echo输出语法

默认输出换行语法:

echo 字符串

输出不换行语法:

echo -n 字符串
演示:

编写一个脚本文件:
在这里插入图片描述

运行结果如下:

在这里插入图片描述

echo输出转义字符

比如 \n,用于echo输出字符串非结尾处的换行,但是默认echo无法解析\n转义字符。

在这里插入图片描述

这个时候可以使用 -e 参数,该参数用于解析转义字符:

echo -e "字符串中含有转义字符"

在这里插入图片描述

常用的转义字符除了上面的\n换行符之外,还有\c用来清除echo结尾的换行。

read介绍

read是Shell内置命令,用于从标准输入中读取数据并赋值给变量。如果没有进行从重定向,默认就是从终端控制台读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。

后续会讲解Shell重定向。

语法
read [-options] [var1 var2 ...]

options表示选项,如下表所示;var表示用来存储数据的变量,可以有一个,也可以有多个。
options和var都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 变量中。
$REPLY 保存read最后一个读入命令的数据。

演示一下:

在这里插入图片描述

options支持的参数:

在这里插入图片描述

需求示例

1、使用read命令给多个变量赋值:

在这里插入图片描述

运行效果如下:

在这里插入图片描述

2、从终端控制台只读取一个字符:
在这里插入图片描述

运行效果如下,注意这里要用bash命令执行,使用sh命令会报-n参数非法的错误,我也不知道为什么:

在这里插入图片描述

3、在终端控制台输入时,设置指定时间内输入密码:

在这里插入图片描述

运行效果如下:

在这里插入图片描述

exit介绍

exit用于退出当前Shell环境进程结束运行,并且可以返回一个状态码。一般使用 $? 可以获取退出状态码。

语法

正确退出语法:

exit # 默认返回状态码0,一般代表命令执行成功

错误退出语法

exit 非0数字 # 数字建议的范围0到255,一般代表命令执行失败
应用场景

1、结束当前Shell进程
2、当Shell进程执行出错退出时,可以返回不同的状态值代表不同的错误

比如打开一个文件时,可以返回1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。

需求示例

编写Shell脚本使用exit退出,退出时返回一个非0数字状态值,执行脚本文件并打印返回状态值。

在这里插入图片描述

执行效果如下:

在这里插入图片描述

declare介绍

declare命令用于声明Shell变量。可用来声明变量并设置变量的属性,也可用来显示Shell函数。若不加上任何参数,则会显示全部的Shell变量与函数(与执行set指令的效果相同)。

declare命令作用

1、设置变量的属性[重要]
2、查看全部Shell变量与函数
3、实现关联数组变量[重要]

declare设置变量的属性语法
declare [+/-] [aArxif] [变量名称=设置值]

在这里插入图片描述

需求示例

操作一个变量属性,设置为整形\取消整形\设置为只读等操作:

在这里插入图片描述

查看全部Shell变量与函数
declare -f 查询所有函数的定义
declare -F 查询所有函数的名称列表

关于函数后面还会说,这里先了解一下即可。

实现key-value关联数组变量语法

关联数组也称为"键值对(key-value)"数组,键(key)也即字符串形式的数组下标,值(value)也即元素值。

语法如下:

declare -A 关联数组变量名=([字符串key1]=值1 [字符串key2]=值2 ...)

declare 也可以用于定义普通索引数组,-a 参数创建普通或索引数组,-A 创建关联数组。
declare -a 索引数组变量名=(值1 值2 …)
declare -a 索引数组变量名=([0]=值1 [1]=值2 …)

获取指定key的值:

${关联数组变量名[key]}

获取所有值:

${关联数组变量名[*]} # 方式1
${关联数组变量名[@]} # 方式2

演示如下:
在这里插入图片描述

运行效果如下:

在这里插入图片描述

注意:之前学习的创建普通索引数组的方式也可以用来创建这种关联数组,但是获取值的时候是错误的,因此要创建关联数组只能使用declare!

Shell运算符

掌握算数运算符的使用。
掌握expr求值表达式命令。

expr 介绍

expr 是evaluate expressions的缩写,译为“求值表达式”。Shell expr是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等,后续讲解。

expr 语法

计算语法:

expr 算数运算符表达式

注意:运算表达式

获取计算结果赋值给新变量语法:

result=`expr 算数运算符表达式`

注意:上面用的是反引号不是单引号嗷。

演示:

在这里插入图片描述

注意:运算符表达式中每个数字与符号之间要有空格。

算数运算符介绍

下表列出了常用的算数运算符,假定变量 a 为 1,变量 b 为 2:

在这里插入图片描述

演示:

在这里插入图片描述

运行结果如下:

在这里插入图片描述

Shell运算符:比较运算符

了解有哪些比较运算符。
掌握推荐使用哪个比较运算符。

整数比较运算符

下表列出了常用的比较运算符,假定变量 a 为 1 ,变量 b 为 2:

在这里插入图片描述
在这里插入图片描述

以其中几个为例简单演示一下:
在这里插入图片描述

在这里插入图片描述

注意:

整数比较运算符只支持整数,不支持小数与字符串(字符串比较后续讲解),除非字符串的值是整数数字。
每个命令都有返回值,这个后面我们会讲解退出状态时再具体说明,返回0代表成功,返回1代表失败。

Shell运算符:字符串比较运算符

可以比较2个变量,变量的类型可以为数字(整数,小数)与字符串。

语法

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为"efg":

字符串比较可以使用 [[]] 和 [] 两种方式。

	运算符		:						说明									:			举例

在这里插入图片描述

纠正一下:上图中的 $ 运算符是检测字符串是否不为空,不为空返回 0 为空返回 1 。

注意:字符串比较没有 <= ,但可以通过 [[ “a” < “b” || “a” = “b” ]] 来实现。

依然是以其中几个为例演示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意:对于双方括号来说其内的特殊符号不需要进行转义,而单括号则需要。

[[]] 和 [] 的区别

区别1:word splitting 单词分隔

[ [ ] ] 不会有 word splitting 发生。

[ ] 会有 word splitting 发生。

word splitting 介绍

会将含有空格字符串进行分拆分割后比较。

演示:

在这里插入图片描述

区别2:转义字符

[ [ ] ] 对 < 不需要转义,格式为 [[ 字符串1 < 字符串2 ]]
[ ] 需要对 <,> 转义,格式为 [ 字符串1 < 字符串2 ]

演示之前已经提过,这里不再赘述。

结论

更推荐使用双方括号来进行字符串比较运算。

Shell运算符:布尔运算符

介绍

在这里插入图片描述

注意这里我们暂时还会用单方括号,但是后面就不会再用了,因为有test命令的存在。

演示:

在这里插入图片描述

Shell运算符:逻辑运算符

要理解逻辑运算符与布尔运算符区别。

逻辑运算符介绍:

在这里插入图片描述

演示如下:

在这里插入图片描述

Shell运算符:文件测试运算符

能够使用常用文件测试运算符检查文件。

如:文件是否存在、是否可读、是否可执行、是否为空、是否可写、是否是目录、是否是普通文件等。

Linux系统文件系统介绍

-:普通文件
d:目录文件
l:链接文件
b:块设备文件
c:字符设备文件
p:管道文件

演示:

块设备文件,比如在目录/dev下面的计算机硬盘文件:

在这里插入图片描述

设备文件都是对应计算机硬件的,不同的设备文件代表不同的传输数据方式。

文件测试运算符介绍

文件测试运算符用于检测文件的各种属性。

属性检测描述如下:

在这里插入图片描述
在这里插入图片描述

命令虽然有很多,但常用的比较重点的就黄色部分标出来的。

其他检查符:

-S: 判断某文件是否 socket。
-L: link, 检测文件是否存在并且是一个符号链接。

语法如下:

[ options 文件路径字符串 ][[ options 文件路径字符串 ]]

演示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

运行结果如下:

在这里插入图片描述

测试这个代码的时候要注意,文件的路径一定要写绝对路径嗷(也就是从文件根目录 / 的位置开始写),否则所有的判断都会走else,我就踩了这个坑…

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

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

相关文章

普乐蛙VR神州飞船设备VR太空舱体验馆VR博物馆

中国航天式浪漫知多少&#xff1f;千百年来古人对浩瀚宇宙有着无尽的浪漫想象&#xff0c;而在一代又一代中国航天事业奋斗者的努力中&#xff0c;远古神话不再是幻想&#xff0c;它终被照进现实——中国载人飞船“神舟”、中国载人空间站“天宫”、中国绕月人造卫星“嫦娥一号…

mybatis的一对多

业务&#xff1a;通常主表从表 查询&#xff0c;一对多关系&#xff0c;通常是先查主表&#xff0c;然后拿主表的 关联字段与从表关联。在代码中 通常用for 循环等方法给 从表的数据赋值&#xff0c;很麻烦&#xff0c;&#xff0c;&#xff0c;很麻烦。。。。 用mybatis的…

Linux 正则表达式及三剑客(awk、grep、sed)

原文&#xff1a;https://blog.iyatt.com/?p14465 1 前言 2024.4.8 昨天接了一个代写单子&#xff0c;要求用 Python 实现 sed 的部分功能。我用 Linux 也有几年了&#xff0c;基本的命令知道&#xff0c;但是几乎没有写涉及高级功能的 shell 脚本&#xff0c;所以对于正则表…

小米汽车值得去吗?最终拒了 offer。

车企选择 今天逛某职场 App 时&#xff0c;无意间看到一篇寻求 offer 抉择意见的帖子&#xff1a; 这位同学刚从加班闻名&#xff08;但 CEO 强调既学华为狼性&#xff0c;也学华为分配&#xff09;的理想汽车离职。 经过了 6 轮面试&#xff0c;收到了小米 offer&#xff0c;但…

QT文本操作

文本的操作 文本的读写流程 文本的读写流程 // 文本的读写流程// 1.打开文件》打到文本》QFileDialog::getOpenFileName返回的是// 一个字符串&#xff0c;包括了路径文件名字// open()方法打开文本// 2.读写文本// readAll(),readLine(),write()// 3.关闭文本 // close()使用…

2024年文化、历史与人文艺术与社会发展国际会议(CHHASD2024)

2024年文化、历史与人文艺术与社会发展国际会议(CHHASD2024) 会议简介 2024年国际文化、历史、人文、艺术与社会发展会议&#xff08;CHHASD2024&#xff09;将在中国武汉举行&#xff0c;主题为“文化、历史&#xff0c;人文、艺术和社会发展”。CHHASD2024汇集了来自世界各…

postman接口测试(入门到精通)

下载&#xff1a; postman官方地址 测试外部接口&#xff1a;测试被测系统和外部系统之间的接口。&#xff08;只需要测试正例即可&#xff09; 测试内部接口&#xff1a; 1.内部接口只提供给内部系统使用。&#xff08;只需要测试正例即可&#xff09; 2.内部接口提供给外…

0.25W 3KVDC 隔离单双输出DC/DC SMD型电源模块 ——TPAT-W2 系列

TPAT-W2系列是一款标准的表面贴装电源模块&#xff0c;完全实现采用全自动贴片机来组装和满足回流焊工艺&#xff0c;大大提高产能和人工费用&#xff0c;提供正负双输出&#xff0c;工业级环境温度。此系列产品小巧&#xff0c;效率高&#xff0c;低输出纹波及提供3000V以上的…

Eland上传bge-large-zh-v1.5向量化模型到ElasticSearch中

最近需要做一些向量检索&#xff0c;试试ES 一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 本地单机环境&#xff0c;无集群&#xff0c;也不基于Docker BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应…

模型预测控制MPC(2)—— 无约束线性MPC

前文&#xff1a;模型预测控制MPC&#xff08;1&#xff09;—— 基础概念参考&#xff1a;模型预测控制&#xff08;2022春&#xff09;本文从偏控制的角度介绍无约束线性MPC方法&#xff0c; x , u , J x,u,J x,u,J 分别代表状态、动作和代价函数 文章目录 1. 问题定义1.1 多…

低代码集成Java系列:高效构建自定义插件

前言 随着软件开发的快速发展和需求的不断增长&#xff0c;开发人员面临着更多的压力和挑战。传统的开发方法需要花费大量的时间和精力&#xff0c;而低代码开发平台的出现为开发人员提供了一种更加高效、快速的开发方式。今天小编就以构建命令插件为例&#xff0c;展示如何使…

kylin java.io.IOException: error=13, Permission denied

linux centos7.8 error13, Permission denied_linux open error13-CSDN博客 chmod -R 777 /home/zengwenfeng/kkFileView-4.2.1 2024-04-15 13:15:17.416 WARN 3400 --- [er-offprocmng-1] o.j.l.office.LocalOfficeProcessManager : An I/O error prevents us to determine…