Shell教程三----运算符,条件判断
Posted Z小旋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell教程三----运算符,条件判断相关的知识,希望对你有一定的参考价值。
算数运算符
Shell支持多种运算符
基本语法:
可以用
“$((运算式))”
或
“$[运算式]”
来进行加减乘除计算
echo "$[2+2]"
echo "$((2+2))"
输出:
来进行运算式计算
或者使用expr命令
ecpr 2 + 2
注意:
- 表达式和运算符之间要有空格, 2+2 是不对的,必须写成 2 + 2,
- 完整的表达式要被 ` `反引号 括住
例: 计算(2+3)X4的值
expr `expr 2 + 3` \\* 4
输出:
例: 计算2+2的值
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
输出: 两数之和为 : 4
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b` 结果为 30 |
- | 减法 | `expr $a - $b` 结果为 -10 |
* | 乘法 | `expr $a * $b` 结果为 200 |
/ | 除法 | `expr $b / $a` 结果为 2 |
% | 取余 | `expr $b % $a` 结果为 0 |
= | 赋值 | a=$b 把变量 b 的值赋给 a |
= | 赋值 | a=$b 把变量 b 的值赋给 a |
== | 相等,用于比较两个数字,相同则返回 true | [ $a == $b ] 必须要有空格! |
!= | 不相等,用于比较两个数字,不相同则返回 true | [ $a != $b ] |
注意: 在乘法中,系统默认号问一个符号,而不是乘号,所以需要使用转义符号 \\ 来帮助系统识别这里是一个乘号
格式 a \\ b
测试:
#!/bin/bash
a=10
b=20
result=`expr $a + $b`
echo "a + b = $result"
result=`expr $a - $b`
echo "a - b = $result"
result=`expr $a \\* $b`
echo "a * b = $result"
result=`expr $b / $a`
echo "b / a = $result"
result=`expr $b % $a`
echo "b % a = $result"
输出:
关系运算符
运算符 | 说明 | 举例 |
---|---|---|
-eq | == equal的缩写,相等 | [ $a -eq $b ] |
-ne | != not equal的缩写,不相等 | [ $a -nq $b ] |
-gt | > greater thanl的缩写,大于,如果左边大于右边,返回true,否则返回false | [ $a -gt $b ] |
-lt | < little thanl的缩写,小于,如果左边小于右边,返回true,否则返回false | [ $a -lt $b ] |
-ge | >= 大于等于,如果左边大于等于右边,返回true,否则返回false | [ $a -ge $b ] |
-le | <= 小于等于,如果左边小于等于右边,返回true,否则返回false | [ $a -le $b ] |
注意:
- 注意两侧留空格,[ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]
- 只支持整数比较 shell中定义整数: declare -i xxx
#!/bin/bash
a=20
b=10
if [ $a -eq $b ]
then
echo "eq 关系运算结果: a等于b"
else
echo "eq 关系运算结果: a不等于b"
fi
if [ $a -ne $b ]
then
echo "ne 关系运算结果: a不等于b"
else
echo "ne 关系运算结果: a等于b"
fi
if [ $a -gt $b ]
then
echo "gt 关系运算结果: a大于b"
else
echo "gt 关系运算结果: a小于等于b"
fi
if [ $a -lt $b ]
then
echo "lt 关系运算结果:a小于b"
else
echo "lt 关系运算结果:a大于等于b"
fi
if [ $a -ge $b ]
then
echo "ge 关系运算结果:a大于等于b"
else
echo "ge 关系运算结果:a小于b"
fi
if [ $a -le $b ]
then
echo "le 关系运算结果:a小于等于b"
else
echo "le 关系运算结果:a大于b"
fi
输出:
逻辑运算符
运算符 | 说明 | 举例 |
---|---|---|
-a | && 与运算,两个表达式都为true,才返回true | [ $a -a $b ] |
-o | || 或运算,有一个表达式都为true,则返回true | [ $a -o $b ] |
! | ! 非运算,表达式为true,则返回false 为false ,则返回true | [ ! $a ] |
如果是两个[[ ]] 括起来,则可以使用&& 和||
也就是:
- [ ]中用 -a,-o, !
- [[ ]]中用 &&,||, !
测试:
#!/bin/bash
a=20
b=10
c=10
if [ $a = $b -a $b = $c ]
then
echo "a,b,c 相等"
else
echo "a,b,c 不相等"
fi
if [ $a = $b -o $b = $c ]
then
echo "a等于b 或 b等于c "
else
echo "a,b,c 不相等"
fi
输出:
测试:
#!/bin/bash
a=20
b=10
c=10
if [[ $a = $b && $b = $c ]]
then
echo "a,b,c 相等"
else
echo "a,b,c 不相等"
fi
if [[ $a = $b || $b = $c ]]
then
echo "a等于b 或 b等于c "
else
echo "a,b,c 不相等"
fi
输出:
字符串运算符
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true | [ $a = $b ] |
!= | 检测两个字符串是否不相等,不相等返回 true | [ $a != $b ] |
-z | 检测字符串长度是否为0,为0返回 true | [ -z $a ] |
-n | 检测字符串长度是否空字符串,不是空字符串返回 true | [ -n “$a” ] |
文件测试运算符
文件权限判断
运算符 | 说明 | 举例 |
---|---|---|
-r | read 文件是否可读 如果是,则返回true | [ -r $file ] |
-w | 检测文件是否可写,如果是,则返回true | [ -w $file ] |
-x | 检测文件是否有执行的权限,如果有,则返回true | [ -x $file ] |
测试:
#!/bin/bash
if [ -r hello.c ]
then
echo "当前用户可读此文件"
else
echo "当前用户没有读此文件的权限"
fi
if [ -w hello.c ]
then
echo "当前用户可写此文件"
else
echo "当前用户没有写此文件的权限"
fi
if [ -x hello.c ]
then
echo "当前用户可以执行此文件"
else
echo "当前用户没有执行此文件的权限"
fi
输出:
测试:
文件类型判断
运算符 | 说明 | 举例 |
---|---|---|
-e | 检测文件(包括目录)是否存在,如果是,则返回 true | [ -e $file ] |
-s | 检测文件是否为空,不为空返回 true | [ -s $file ] |
-d | 检测文件是否是目录,如果是,则返回 true | [ -d $file ] |
-f | 检测文件是否是存在且为普通文件(既不是目录,也不是设备文件),如果是,则返回 true | [ -f $file ] |
#!/bin/bash
if [ -e hello.c ]
then
echo "文件已经存在"
else
echo "文件不存在"
fi
if [ -s hello.c ]
then
echo "此文件大小不为0"
else
echo "此文件大小为0,即文件内容为空"
fi
if [ -d hello.c ]
then
echo "是目录"
else
echo "不是目录"
fi
if [ -f hello.c ]
then
echo "该文件是普通文件"
else
echo "该文件不是普通文件"
fi
输出:
以上是关于Shell教程三----运算符,条件判断的主要内容,如果未能解决你的问题,请参考以下文章