蒙珣的博客

活好当下,做好今天该做的事情。

0%

shell 基本运算符

shell 基本运算符

算数运算符

算数运算符 说明
+
-
*
/
% 取余
= 赋值
== 相等
!= 不相等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $a / $b`
echo "a / b : $val"

val=`expr $a % $b`
echo "a % b : $val"

if [ $a == $b ]; then echo "a == b" ; fi

if [ $a != $b ]; then echo "a != b" ; fi

关系运算符

运算符 说明
-eq 检测两个数是否相等,相等返回true
-ne 检测两数是否相等,不相等返回true
-gt 检测左边的数是否大于右边的,大于返回true
-lt 检测左边的数是否小于右边的,小于返回true
-ge 检测左边的数是否大于等于右边的,大于等于返回true
-le 检测左边的数是否小于等于右边的,小于等于返回true

逻辑运算符

运算符 说明
&& 逻辑与 AND
|| 逻辑或 OR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "return ture"
else
echo "return false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "return true"
else
echo "return false"
fi

字符串运算符

运算符 说明
= 检测两个字符串是否相等,相等返回true
!= 检测两个字符串是否相等,不相等返回true
-z 检测字符串长度是否为0,为0返回true
-n 检测字符串长度是否为0,不为0返回true
str 检测字符串是否为空,不为空返回true

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash

a="bac"
b="fef"

if [ $a = $b ]
then
echo "$a = $b : a == b"
else
echo "$a = $b : a != b"
fi

if [ -n $a ]
then
echo "-n $a : The string length is not 0"
else
echo "-n $a : The string length is 0"
fi

if [ $a ]
then
echo "$a : The string length is not empty"
else
echo "$a : The string length is empty"
fi

文件测试运算符

操作符 说明
-e 文件存在
-a 文件存在,这个选项的效果与-e相同。但它已经被“弃用”,并且不鼓励使用
-f 表示这个文件是一个一般文件(并不是目录或设备文件)
-s 文件大小不为零
-d 表示这是一个目录
-b 表示这是一个设备(光驱,软盘等)
-c 表示这是一个字符设备(键盘,modem,声卡等)
-p 这个文件是一个管道
-h 这是一个符号链接
-L 这是一个符号链接
-S 表示这是一个socket
-t 文件(描述符)被关联到一个终端设备上,这个测试选项一般被用来检测脚本中的stdin([ -t 0 ])或者stdout([ -t 1 ])是否来自一个终端
-r 文件是否有可读读权限(指的是正在运行这个测试命令的用户是否有可读权限)
-w 文件是否有可读写权限(指的是正在运行这个测试命令的用户是否有可写权限)
-x 文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否有可执行权限)
-g set-group-id(sgid)标记被设置到文件或目录上
-k 设置粘贴位
-O 判断你是否是文件的拥有者
-G 文件的group-id是否与你相同
-N 从文件上一次被读取到现在为止,文件是否被修改过
f1 -nt f2 文件 f1 比 f2 新
f1 -ot f2 文件 f1 比 f2 旧
f1 -ef f2 文件 f1 和文件 f2 是相同文件的硬链接
! “非”,反转上边所有测试结果(如果没给出条件,那么返回真)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

file="/home/william/DYJ/test/test.sh"

if [ -r $file ]
then
echo "The file is readable"
else
echo "The file is not readable"
fi

if [ -e $file ]
then
echo "File exists"
else
echo "File not exists"
fi

结果:

1
2
The file is readable
File exists

思考:浮点运算,比如实现求圆的面积和周长。

expr 只能用于整数计算,可以使用 bc 或者 awk 进行浮点数运算。scale保留小数点,但对乘法无效


1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

pi=3.141592

radius=2.5

area=$(echo "scale=4; $pi * $radius * $radius" | bc)

girth=$(echo "scale=4; $pi * $radius *2" | bc)

echo "area=$area"

echo "girth=$girth"