侧边栏壁纸
博主头像
虹梦缝隙博主等级

行动起来,活在当下

  • 累计撰写 4 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Shell运算符

言
2024-08-02 / 0 评论 / 0 点赞 / 8 阅读 / 4084 字
温馨提示:
本文最后更新于 2024-08-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在 shell 脚本中,也存在着多种运算符,例如算数运算符、关系运算符、布尔运算符等。原生 bash 不支持简单的数学运算,但是可以通过其他指令来实现,例如 awk 和 expr,expr 命令最常用。expr 命令是一个手工命令行计数器,用于在 Linux 中求表达式变量的值,一般用于整数值,也可用于字符串。

expr 命令格式如下:expr [表达式]

表达式说明:
用空格隔开每个项;
对包含空格和其他特殊字符的字符串要用引号括起来

例如获取字符串长度:expr length 'hello,world' 输出 11

1.基本语法

  1. $((运算式))或$[运算式]或者使用expr m + n

  2. 注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``(反引号)

  3. expr \* (乘法),expr /(除法),expr %(取余)

#!/bin/bash
#乘法操作
echo `expr 10*2`
#除法操作
echo `expr 10/2`
#取余操作
C=`expr 15 % 5`
echo C=$c

应用案例

计算 (2+7)x 8 的值,注意在使用expr时要分两步进行运算

#计算(2+7)x8的值
resultl=$(((2+7)*8))
result2=$[(2+7)*8]
temp='expr 2+7'
result3='expr $temp * 8'
echo "resultl: $resultl"
echo "result2: $result2"
echo "result3: $result3"

2.位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

其参数解释如下:

  • $n (n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

  • $* (代表命令行中所有的参数,$*把所有的参数看成一个整体)

  • $@ (代表命令行中所有的参数,不过$@把每个参数区分对待)

  • $# (代表命令行中所有参数的个数)

比如执行sh position.sh 10 20,这个就是一个执行shell的命令行,可以在position脚本中获取到参数信息

#!/bin/bash
echo "$0 $1 $2"
echo "全部参数=$*"
echo "使用@获取所有参数=$@"
echo "参数的个数=$#"
#利用位置参数进行计算
echo "位置参数变量相加= 'expr $l + $2'"
echo "位置参数变量相减= 'expr $l - $2'"

3.关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。有以下几种常用的关系运算符:

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

例如下列的例子,其中的流程判断会在之后的文章中介绍

#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi

#输出 10 -eq 20: a 不等于 b

4.布尔运算符

! : 非运算,表达式为true返回false,否则返回true。
-o : 或运算,有一个表达式为true则返回true (一真则真)。
-a :与运算,两个表达式都为true才返回true (一假则假)。
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a == $b: a 等于 b"
fi
#输出 10 != 20 : a 不等于 b

5.字符串运算符

= :检测两个字符串是否相等,相等返回 true
!= :检测两个字符串是否不相等,不相等返回 true
-z :检测字符串长度是否为0,为0返回 true。
-n :检测字符串长度是否不为 0,不为 0 返回 true。
#!/bin/bash
a="abc"
b="def"
if [ $a = $b ]
then
   echo "$a = $b : a字符串与b字符串相等"
else
   echo "$a = $b: a字符串与b字符串不相等"
fi
#输出 abc = def: a字符串与b字符串不相等

6.文件测试运算符

该运算符用于检测文件的各种属性,这里列举几个常用的相关运算符

-r file	检测文件是否可读,如果是,则返回 true。
-w file	检测文件是否可写,如果是,则返回 true。
-x file	检测文件是否可执行,如果是,则返回 true。

-d file	检测文件是否是目录,如果是,则返回 true。
-e file	检测文件(包括目录)是否存在,如果是,则返回 true。
-f file	检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。

已知/usr/local/test.sh文件具有rwx权限,使用下列的文件测试运算符:

#!/bin/bash
file="/usr/local/test.sh"
if [ -r $file ]
then
   echo "该文件可读"
else
   echo "该文件不可读"
fi

if [ -f $file ]
then
   echo "该文件是普通文件"
else
   echo "该文件是特殊文件"
fi
#输出 
#该文件可读
#该文件是普通文件

0

评论区