算术运算
expr
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
- 变量和运算符之间,要用空格隔开。
- 用反斜杠 \ 放在 shell 特定的字符前面;
- 对包含空格和其他特殊字符的字符串要用引号括起来
bc
Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。
- 支持交互式和非交互式两种方式。
- 使用scale=n可以指定精度,即小数点后的位数。要写在算术表达式之前。
- 非交互式运算,使用 echo "算术表达式" | bc。 多个算术表达式之间用分号隔开,例如:echo '1+1;2+2" | bc。
交互式
非交互式
变量的自增和自减
简写 等同于
| 表达式 | 意义 |
|---|---|
| let i++ | i=i+1] |
| let i-- | i=i-1] |
| let i+=2 | i=i+2] |
| let i-=2 | i=i-2] |
| let i*=2 | i=i*2] |
| let i/=2 | i=i/2] |
| let i%=2 | i=i%2] |
生成随机数
使用 echo $[RANDOM%n] 可以生成随机数,n为正整数。 对 n 取余数的范围是 [0,n-1]。
- echo $[RANDOM%10]生成的随机数范围为 [0,9]
- 如果希望包含10的话,可以echo $[RANDOM%11],则随机数范围为 [0,10]。
- 如果希望随机数范围都为正整数,即不包含0的话,可以echo $[RANDOM%10+1],此时随机数范围为[1,10]。
条件语句
条件测试
文件测试
文件测试格式:
- test 操作符 表达式
- [ 操作符 表达式 ]
文件测试操作符
| 操作符 | 作用 |
|---|---|
| -d | 测试是否为目录(Directory) |
| -e | 测试目录或文件是否存在(Exist) |
| -a | 测试目录或文件是否存在(Exist) |
| -f | 测试是否为文件(File) |
| -r | 测试当前用户是否有权限读取(Read) |
| -w | 测试当前用户是否有权限写入(Write) |
| -x | 测试当前用户是否有权限执行(eXcute) |
| -L | 测试是否为软连接文件 |
属性测试
| 操作符 | 作用 |
|---|---|
| -s FILE | 是否存在且非空 |
| -t fd | fd 文件描述符是否在某终端已经打开 |
| -N FILE | 文件自从上一次被读取之后是否被修改过 |
| -O FILE | 当前有效用户是否为文件属主 |
| -G FILE | 当前有效用户是否为文件属组 |
整数测试
- [ 整数变量1 操作符 整数变量2 ]
- test 整数变量1 操作符 整数变量2
| 操作符 | 含义 |
|---|---|
| -eq | 等于 |
| -ne | 不等于 |
| -gt | 大于 |
| -lt | 小于 |
| -le | 小于或等于 |
| -ge | 大于或等于 |
字符串测试
- [ "字符串1" = "字符串2" ] //测试字符串1和字符串2的内容是否相同
- [ "字符串1" != "字符串2” ] //测试字符串1和字符串2的内容是否不同
- [ -z "字符串" ] //测试字符串是否为空,或者指定的变量是否为空值。(测试字符串的长度是否为零)
- [ -n "字符串" ] //测试字符串是否存在,即是否不为空。(测试字符串的长度是否非零)
| 操作符 | 含义 |
|---|---|
| = | 字符串内容相同 |
| != | 字符串内容不同,! 号表示相反的意思 |
| -z | 字符串内容为空 |
| -n | 字符是否存在 |
逻辑测试
逻辑测试用于连接多个测试条件,并返回整个表达式的值。 逻辑测试主要有"逻辑与","逻辑或","逻辑否"三种。
- [ 表达式1 ] 逻辑运算符 [ 表达式2 ] ...
- 命令1 逻辑运算符 命令2 ...
逻辑运算符:
- -a或&& :逻辑与,“而且”的意思,全真才为真。
- -o或|| :逻辑或,“或者”的意思,一真即为真。
- ! :逻辑否。
短路与 &&
CMD1 && CMD2
- 全真才为真,一假即为假。
- 第一个CMD1结果为真 ,第二个CMD2必须要参与运算,才能得到最终的结果。
- 第一个CMD1结果为假 ,总的结果必定为假,因此不需要执行CMD2。
- 同时满足命令1 和命令2 的要求,才会返回正确。
短路或 ||
CMD1 || CMD2
- 一真即为真
- 第一个CMD1结果为真,总的结果必定为真,因此不需要执行CMD2。
- 第一个CMD1结果为假,第二个CMD2必须要参与运算,才能得到最终的结果。
if 语句
if 判断条件
then 条件成立的分支代码
else 条件不成立的分支代码
fi
简例
磁盘空间若超过80%,则提示尽快清理空间,否则提示正常
case
case 变量引用 in
模式1)
命令分支1
;;
模式2)
命令分支2
;;
...
*)
默认命令分支
esac
简例