Shell运算符

运算符的分类

算术运算符

✦ expr是一款表达式计算工具,使用它完成表达式的求值操作。

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

val=`expr $a + $b`
echo $val // 30

val=`expr $a - $b`
val=`expr $a \* $b`
val=`expr $b / $a`
val=`expr $b % $a`

if[$a == $b]
then
echo "a等于b"
fi

if[$a != $b]
then
echo "a不等于b"
fi

关系运算符

✦ 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

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
26
27
28
29
30
31
32
33
#! /bin/bash
a=10
b=20

if[$a -eq $b] // equal
then
echo "a等于b"
fi

if[$a -ne $b] // not equal
then
echo "a不等于b"
fi

if[$a -gt $b] // greater than
then
echo "a大于b"
fi

if[$a -lt $b] // less than
then
echo "a小于b"
fi

if[$a -ge $b] // greater equal
then
echo "a大于或等于b"
fi

if[$a -lt $b] // less equal
then
echo "a小于或等于b"
fi

布尔运算符

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 != $b]
then
echo "a不等于b"
fi

if[$a -lt 100 -a $b -gt 15]
then
echo "a小于100且b大于15,返回true"
fi

if[$a -lt 100 -a $b -gt 100]
then
echo "a小于100或b大于100,返回true"
fi

逻辑运算符

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

if[[$a -lt 100 && $b -gt 100]]
then
echo "a小于100且b大于100,返回true"
fi

if[[$a -lt 100 || $b -gt 100]]
then
echo "a小于100或b大于100,返回true"
fi

字符串运算符

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
26
27
28
#! /bin/bash
a="abc"
b="efg"

if[$a = $b]
then
echo "a等于b"
fi

if[$a != $b]
then
echo "a不等于b"
fi

if[-z $a]
then
echo "字符串长度为0,返回true"
fi

if[-n $a]
then
echo "字符串长度不为0,返回true"
fi

if[$a]
then
echo "字符串不为空,返回true"
fi

文件测试运算符

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
26
27
28
29
30
31
32
33
34
35
36
37
#! /bin/bash
file="var/node/test.sh"

if[-r $file]
then
echo "文件可读"
fi

if[-w $file]
then
echo "文件可写"
fi

if[-x $file]
then
echo "文件可执行"
fi

if[-f $file]
then
echo "文件为普通文件"
fi

if[-d $file]
then
echo "文件为目录"
fi

if[-s $file]
then
echo "文件不为空"
fi

if[-e $file]
then
echo "文件存在"
fi

Shell流程控制

👉 if

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a=10
b=20
if [$a == $b]
then
echo "a等于b"
elif [$a -gt $b]
then
echo "a大于b"
elif [$a -lt $b]
then
echo "a小于b"
else
echo "没有符合的条件"
fi

👉 case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo '输入1到4之间的数字:'
echo '你输入的数字为:'
read num
case $num in
1) echo '你选择了1'
;;
2) echo '你选择了2'
;;
3) echo '你选择了3'
;;
4) echo '你选择了4'
;;
*) echo '你选择了其他数字'
;;
esac

👉 for

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
####运行结果####
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5
###############
for str in 'This is a string' 'Hello world'
do
echo $str
done
#####运行结果#####
This is a string
Hello world
#################

👉 while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i=1
while(($i<=5))
do
echo "i = $i"
let "i++"
done
#运行结果#
i = 1
i = 2
i = 3
i = 4
i = 5
#########

无限循环:while(true)

👉 break

1
2
3
4
5
6
7
8
9
10
11
12
while :
do
echo -n "输入1到5之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为:$aNum"
;;
*) echo "你输入的数字不是1到5之间的数字"
break
;;
esac
done

👉 continue

1
2
3
4
5
6
7
8
9
10
11
12
13
while :
do
echo -n "输入1到5之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为:$aNum"
;;
*) echo "你输入的数字不是1到5之间的数字"
continue
echo "结束"
;;
esac
done

Shell函数

✦ Linux Shell可以用户定义函数,然后在shell脚本中随意调用。
✦ 可以带function fun()定义,也可以直接fun()定义,不带任何参数。
✦ 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果作为返回值。return后面跟数值0-255。

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
26
27
28
29
30
31
32
33
#! /bin/bash
#########第一个函数#########
demoFun(){
echo "这是我的第一个shell函数"
}
echo "=====函数开始执行====="
demoFun
echo "=====函数执行完毕====="

#########函数返回值#########
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算"
echo "输入第一个数字"
read aNum
echo "输入第二个数字"
read anotherNum
echo "两个数字分别为 $aNum$anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
# 函数返回值会在调用该函数后通过$?来获得
echo "输入的两个数字之和为 $? !"

#########函数参数#########
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第六个参数为 ${6} !"
echo "第七个参数为 ${7} !"
echo "参数共有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9