Shell的运算符

假设a为10 ,b为20
expr $a + $b #必须要有空格
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

算数运算符

运算符

说明举例
+加法`expr $a + $b` 结果为 30。
-减法`expr $a - $b` 结果为 -10。
*乘法`expr $a \* $b` 结果为  200。
/除法`expr $b / $a` 结果为 2。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

关系运算符

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

布尔运算符

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。

逻辑运算符

运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符 #假设a为"abc" 、b为"efg"

运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否不为 0,不为 0 返回 true。[ -n "$a" ] 返回 true。
$检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。

 文件测试运算符

操作符说明举例
-b file检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
-c file检测文件是否是字符设备文件,如果是,则返回 true。[ -c $file ] 返回 false。
-d file检测文件是否是目录,如果是,则返回 true。[ -d $file ] 返回 false。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ] 返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ] 返回 false。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。[ -k $file ] 返回 false。
-p file检测文件是否是有名管道,如果是,则返回 true。[ -p $file ] 返回 false。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。[ -u $file ] 返回 false。
-r file检测文件是否可读,如果是,则返回 true。[ -r $file ] 返回 true。
-w file检测文件是否可写,如果是,则返回 true。[ -w $file ] 返回 true。
-x file检测文件是否可执行,如果是,则返回 true。[ -x $file ] 返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ] 返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true。

其他检查符:

  • -S: 判断某文件是否 socket。
  • -L: 检测文件是否存在并且是一个符号链接。
  • -h:判断对象是否存在,并且为软连接
  • -O:判断对象是否存在,并且属于当前用户
  • -G:判断对象是否存在,并且属于当前组
  • -nt:判断file1是否比file2新 #[ "/data/file1" -nt "/data/file2" ]
  • -ot:判断file1是否比file2旧 #[ "/data/file1" -ot "/data/file2" ]

转载: https://www.runoob.com/linux/linux-shell-basic-operators.html

<think>好的,用户想了解Linux Shell中的运算符及其用法。首先,我需要回忆Shell支持的运算符类型,比如算术运算符、关系运算符、字符串运算符、文件测试运算符等。 首先,算术运算符Shell中算术运算可以用$(( ))或者let命令,比如$a + $b。要注意的是,等号两边不能有空格,比如赋值的时候写成a=$((b+c))。可能还需要提到expr,不过它比较老旧,推荐使用双括号或者let。 接下来是关系运算符,用于数值比较。比如-eq、-ne、-gt这些。这里要注意,关系运算符只能用于整数,不能用于字符串。如果用大于号>的话,在双括号里可以用,但如果是test命令的话需要用-gt。例如if [ $a -gt $b ]。 然后是字符串运算符,比如=判断相等,!=不等,-z检查空字符串,-n非空。要注意字符串比较时变量最好用双引号括起来,避免空值导致语法错误。比如if [ "$str" = "hello" ]。 文件测试运算符也很重要,比如-e检查存在,-f是普通文件,-d是目录。例如if [ -f "file.txt" ]; then ...。这些在写脚本处理文件时常用到。 还有逻辑运算符,比如&&、||、!,在Shell中可以用-a(与)、-o(或)在test表达式里,但更推荐使用双括号[[ ]]来支持更自然的逻辑操作符。例如if [[ $a > 1 && $a < 10 ]]。 然后要举一些例子,比如计算算术运算的例子,比较数字的例子,字符串操作的例子,文件检查的例子。代码示例需要正确,并且符合用户提到的格式,比如行内数学表达式用$...$,独立公式用$$...$$,不过Shell脚本中可能用不到数学公式,但如果有的话需要注意。 另外,用户给的引用中提到了脚本的声明,比如#!/bin/bash,所以可能在示例中需要包含shebang。引用中的内容如果有相关的地方需要标注,比如文件测试运算符可能和引用3中的脚本申明有关联,但可能不需要直接引用。 然后要生成相关问题,可能涉及运算符的优先级、不同运算符的区别、常见错误处理等。比如Shell中如何比较浮点数?或者如何处理字符串中的空格问题? 需要注意用户提到的系统级指令,比如回答用中文,结构清晰,分步骤说明,正确使用LaTeX。但Shell中的运算符可能不需要数学公式,所以可能涉及较少LaTeX,如果有变量的话用$var$形式。 最后检查是否有遗漏的运算符类型,比如位运算符、赋值运算符等,或者Shell中的数组操作符,不过可能基础教程里主要涵盖算术、关系、字符串、文件、逻辑这些。 可能用户容易混淆的地方是数值比较和字符串比较的不同运算符,比如-eq和=的区别,需要特别说明。另外,双括号和单括号的使用区别,比如[[ ]]和[ ]的不同特性,比如[[支持模式匹配,而[是更传统的test命令。 总结回答的结构:先分类介绍各类运算符,给出语法和示例,然后提供综合示例,最后生成相关问题。确保每个部分都有代码示例,并且正确标注引用来源,如果有的话。现在根据这些思路组织内容。</think>### Linux Shell 运算符使用指南 #### 一、算术运算符 Shell 中支持基础算术运算,需用 `$(( ))` 或 `let` 命令实现: ```bash a=10 b=3 echo $((a + b)) # 加法 → 13 echo $((a % b)) # 取模 → 1 let "c=a*b" # 赋值乘法 → c=30 ``` **注意**: - 运算符包含 `+ - * / %`,其中除法结果为整数(如 `$((10/3))` 输出 `3`) - 赋值运算符(`+= -= *= /=`)需配合 `let` 使用: ```bash let "a += 5" # 等价于 a=$((a+5)) ``` #### 二、关系运算符 用于数值比较,需搭配 `test` 或 `[ ]` 使用: | 运算符 | 说明 | 示例 | |--------|--------------|-------------------| | `-eq` | 等于 | `[ $a -eq $b ]` | | `-ne` | 不等于 | `[ $a -ne 5 ]` | | `-gt` | 大于 | `test $a -gt $b` | ```bash if [ $a -lt 20 ]; then echo "a小于20" fi ``` #### 三、字符串运算符 | 运算符 | 说明 | 示例 | |--------|------------------------|--------------------------| | `=` | 字符串相等 | `[ "$s1" = "hello" ]` | | `!=` | 字符串不等 | `[[ $s2 != "world" ]]` | | `-z` | 字符串长度为0 | `[ -z "$s3" ]` | | `-n` | 字符串长度非0 | `test -n "$s4"` | ```bash name="Alice" [ -n "$name" ] && echo "姓名非空" # 变量需加引号防止空值报错 ``` #### 四、文件测试运算符 用于检查文件属性,常见操作符: | 运算符 | 说明 | 示例 | |--------|------------------------|--------------------------| | `-e` | 文件/目录存在 | `[ -e "/tmp/file" ]` | | `-f` | 是普通文件 | `[[ -f ~/doc.txt ]]` | | `-d` | 是目录 | `test -d /var/log` | | `-r` | 可读 | `[ -r "data.csv" ]` | ```bash if [ -x "/usr/bin/python" ]; then echo "Python可执行" fi ``` #### 五、逻辑运算符 1. **与或非**: - `-a`(AND)、`-o`(OR)、`!`(NOT)用于 `[ ]`: ```bash [ $a -gt 5 -a $a -lt 15 ] ``` - `&&`、`||` 用于 `[[ ]]` 或命令连接: ```bash [[ $x != "" && -f $x ]] && echo "文件存在" ``` #### 六、综合示例 ```bash #!/bin/bash # 脚本解释器声明[^3] num=15 str="Shell" # 算术与逻辑组合 if [[ $num -ge 10 && "$str" == "Shell" ]]; then echo "条件满足" fi # 文件检查与字符串操作 [ -d "/tmp" -a ! -z "$str" ] && echo "目录存在且字符串非空" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值