shell总结一

"本文详细介绍了Shell脚本中常用的文件和字符串判断操作,包括-e、-d、-f等参数判断文件存在性及类型,以及整数和字符串的比较。还讲解了字符串的拼接、截取方法,以及如何通过${#string_name}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell学习
常用判断
-e 参数判断对象是否存在,文件或目录都可以做判断
在这里插入图片描述
-d 参数判断文件夹是否存在
在这里插入图片描述
等同于下面
在这里插入图片描述
-f 判断文件是否存在
在这里插入图片描述
在这里插入图片描述

文件比较符
-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新 [ “/data/file1” -nt “/data/file2” ]
-ot 判断file1是否比file2旧 [ “/data/file1” -ot “/data/file2” ]

前面加叹号表示非的意思
整数比较
-eq 等于,如:if [ “ a " − e q " a" -eq " a"eq"b” ]
-ne 不等于,如:if [ “ a " − n e " a" -ne " a"ne"b” ]
-gt 大于,如:if [ “ a " − g t " a" -gt " a"gt"b” ]
-ge 大于等于,如:if [ “ a " − g e " a" -ge " a"ge"b” ]
-lt 小于,如:if [ “ a " − l t " a" -lt " a"lt"b” ]
-le 小于等于,如:if [ “ a " − l e " a" -le " a"le"b” ]
注意:整数的比较不能使用“==,>=”等。(实际上,在某些情况下可以,不必了解)
整数的比较可以不加引号。
在这里插入图片描述
字符串比较
== 等于,如:if [ “ a " = = " a" == " a"=="b” ]
!= 不等于,如:if [ “ a " ! = " a" != " a"!="b” ]
< 小于,在ASCII字母顺序下.如:
if [ “KaTeX parse error: Undefined control sequence: \< at position 4: a" \̲<̲ "b” ]
注意:在[]结构中"<"需要被转义.

  大于,在ASCII字母顺序下.如:
	if [ "$a" \> "$b" ]
	注意:在[]结构中">"需要被转义.

下面两个可以用来判断字符串为空:
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"

注意:字符串的比较需要把字符串使用双引号引用,这是好习惯。
字符串的比较使用“=,>”等符号,字符串没有大于等于这样的用法。
在这里插入图片描述

  1. 由单引号’ '包围的字符串:
    任何字符都会原样输出,在其中使用变量是无效的。
    字符串中不能出现单引号,即使对单引号进行转义也不行。
  2. 由双引号" "包围的字符串:
    如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
    字符串中可以出现双引号,只要它被转义了就行。
  3. 不被引号包围的字符串
    不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
    字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。
    获取字符串的长度
    ${#string_name}:string_name 表示字符串名字
    在这里插入图片描述
    字符串的拼接
    在这里插入图片描述
    字符串的截取
    这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串。
    从指定位置开始截取
    从字符串左边开始计数:从 0 开始计数
    在这里插入图片描述
    省略后面的长度,会截取到字符串末尾
    在这里插入图片描述
    从字符串右边开始计数:从1开始计数
    在这里插入图片描述
    省略后面的长度,会截取到字符串末尾
    在这里插入图片描述

从指定字符串开始截取
这种截取方式无法指定字符串长度,只能从指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右边的所有字符,也可以截取左边的所有字符。

使用 # 号截取右边字符

${string#*chars}

其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*是通配符的一种,表示任意长度的字符串。chars连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取)。
在这里插入图片描述
在这里插入图片描述如果不需要忽略chars左边的字符,也可以不写
,如下图:
在这里插入图片描述
如果希直到最后一个指定字符(子字符串)在匹配结束,可以使用##
在这里插入图片描述
使用 % 截取左边字符

${string%chars*}

请注意的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以应该位于 chars 的右侧。其他方面%和#的用法相同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
判断的进阶写法
“&&”
“&&”连接两个或多个命令(判断也是命令),如果前一个命令成功或者返回true,那么下一个命令继续执行,如果第一个命令执行不成功,后面的命令也不会执行,“与”的意思。
在这里插入图片描述
“||”
“||”连接两个或多个命令,如果前一个命令执行成功,立即退出,不再执行之后的命令;如果前一个命令执行失败,继续向后执行,直到有执行成功的命令为止,“或”的意思。
在这里插入图片描述
替代if写法
在这里插入图片描述
替代if…else写法
在这里插入图片描述
替代elif的写法
注意事项:
1.不建议多层级使用,不易理解;
2.一对括号可以改变&&和||的执行顺序
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值