Shell基础概览(中)
一、运算符
1.概览
-
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
-文件测试运算符
-
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如
awk
和expr
,expr 最常用。 -
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 `而不是单引号 '):
#!/bin/bash val=`expr 2 + 2` #注意不能写成 2+2 加号两边要用空格分隔 echo "两数之和: ${val}"
两点注意:
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被
包含,注意这个字符不是常用的单引号,在 Esc 键下边。
2.算术运算
-
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
注意:条件表达式要放在方括号之间,并且要有空格,例如:[$a==$b]
是错误的,必须写成[ $a == $b ]
。 -
实例:
#!/bin/bash a=10 b=20 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
运行结果:
10 + 20 = 30 a * b : 200 a 不等于 b
注意:
- 乘号
*
前边必须加反斜杠\
才能实现乘法运算; - if…then…fi 是条件语句,后续将会讲解。
- 在 MAC 中 shell 的 expr 语法是:
$((表达式))
,此处表达式中的"*"
不需要转义符号"\"
。
- 乘号
3.关系运算符
- 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
4.布尔运算符
- 下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
a=10 b=20 if [ $a -lt 100 -o $b -gt 15 ] then echo "$a 小于 100 或 $b 大于 100 : 返回 true" else echo "$a 小于 100 或 $b 大于 100 : 返回 false" fi #输出结果: 10 小于 100 或 20 大于 100 : 返回 true
5.逻辑运算符
- 以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
6.字符串运算符
- 下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
执行结果#!/bin/bash a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a等于b" else echo "$a = $b : a不等于b" fi if [ -z $a ] then echo "-z $a : 字符串长度为0" else echo "-z $a : 字符串长度不为0" fi
abc = efg : a不等于b -z abc : 字符串长度不为0
7.文件测试运算符
- 文件测试运算符用于检测 Unix 文件的各种属性。属性检测描述如下:
https://www.runoob.com/linux/linux-command-manual.html
二、echo命令
1.基础用法:
- Shell 的 echo 指令字符串的输出。命令格式:
echo string
您可以使用echo实现更复杂的输出格式控制。
2.显示普通字符串:
echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
echo It is a test
3.显示转义字符
echo "\"It is a test\""
结果将是:
"It is a test"
同样,双引号也可以省略
4.显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh
read name
echo "$name It is a test"
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh
OK #标准输入
OK It is a test #输出
5.显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
#输出结果:
OK!
It is a test
6.显示不换行
#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
输出结果:
OK! It is a test
7.显示结果定向至文件
echo "It is a test" > myfile
8.原样输出字符串
不进行转义或取变量(用单引号)
echo '$name\"'
输出结果:
$name\"
8.显示命令执行结果
echo `date`
# 结果将显示当前日期
Thu Jul 24 10:08:46 CST 2014
注意: 这里使用的是反引号 `, 而不是单引号 '。
三、printf命令
TODO
四、test命令
TODO