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,我就踩了这个坑…

  • 30
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在地球迷路的怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值