Bash最基本的语法
循环和条件判断—Bash
Vim快捷键
运算符----Bash
数组----Bash
字符串—Bash
变量----Bash
基本运算符
一般都有哪些运算符?
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
巨人的肩膀:
算数运算符
Bash
不支持简单的数学运算,比如a=2+2
,这是不对的。但是,可以通过其他的命令来实现,比如awk
和expr
。
expr
是一款表达式计算工具,使用它能完成表达式的求值操作。
注意使用的是反引号`,不是单引号,也不是双引号,也不需要{}、()
#!/bin/bash
var=`expr 2 + 2`
echo "两数之和:$val"
#输出
4
#expr与运算之间要有空格的,注意看上述代码
接下来就好说喽。+-*/
最基本的
运算法 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b |
- | 减法 | |
* | 乘法 | |
/ | 除法 | |
% | 取余 | expr $a % $b |
** | 指数 |
还有++、--
,这种自增/减运算
运算符 | 说明 | 举例 |
---|---|---|
++ | 自增运算(前缀或后缀) | expr ==$a |
– | 自减运算(前缀或后缀) | echo $((a–)) |
进一步,取余,赋值,相等,不相等。可以观察发现,赋值、比较并不需要expr
条件表达式要放在方括号之间
运算法 | 说明 | 举例 |
---|---|---|
= | 赋值 | a=$b |
== | 比较是否相等 | [$a == $b] |
!= | 比较是否不相等 | [$a != $b] |
#!/bin/bash
#author:xxxx
#url:xxxx
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a \* $b` #这里需要转义字符\
echo "a * b : $val"
当然也可以不适用expr
,可以((...))
;比如((foo=5+5))
关系运算符
关系运算符与算数运算符,怎么说呢?算数运算符有加减乘除取余,甚至有等于不等于,但是没有大于小于,不大于,不小于。所以呢,关系可以是算数运算符的补充。
关系运算符只支持数字,不支持字符串,除非字符串是数字**
相等不相等、大于等于小于,不大于,不小于
比如a=10,b=20
运算符 | 说明 | 举例 |
---|---|---|
-eq | 比如两数是否相等,相等返回ture | [$a -eq $b] |
-ne | 比较两数是否不相等,不相等返回ture | [$a -ne $b] |
-gt | t表示比较大小;g表示great;左边是否大于右边,是返回ture | [$a -gt $b] |
-lt | l表示little;左边是否小于右边,是返回ture | [$a -lt $b] |
-ge | g表示great;e表示equal;左边是否大于等于右边 | [$a -ge $b] |
-le | l表示little;e表示equal;左边是否小于等于右边 | [$a -le $b] |
布尔运算符
非运算---- !
或运算---- o (表示or)
与运算---- a (表示all)
逻辑运算符
&&
逻辑的 AND
||
逻辑的OR
字符串运算符
字符串主要是匹配字符串或是检测字符串是否为空啊
假定变量 a 为 “abc”,变量 b 为 “efg”
运算符 | 说明 | 举例 |
---|---|---|
= | 两个字符串是否相等 | |
!= | 两个字符串是否不相等 | |
-z | 检测字符串长度是否为0;z表示zero | [-z $a] |
-n | 检测字符串是否有值;n表示有值 | |
$ | 检测字符串是否为空 |
文件测试运算法
最容易记住的是权限,-r -w -x
,可读可写可执行
操作符 | 说明 | 举例 |
---|---|---|
-r file | 检测文件是否可读 | [-r $file] |
-w file | 检测文件是否可写 | [-w $file] |
-x file | 检测文件是否可执行 | [-x $file] |
-d -b -c
是否是目录文件、块设备文件、字符设备文件
操作符 | 说明 | 举例 |
---|---|---|
-d file | 检测是否是目录文件 | |
-b file | 检测是否是块设备 | |
-c file | 检测是否是字符设备 | |
-p file | 检测是否是有名管道 | [-p $file] |
检测文件是否为空,是否存在(包括目录)
操作符 | 说明 | 举例 |
---|---|---|
-e file | e表示exist | [-e $file] |
-s file | 检测是否为空 |
其他检查符:#这个用的时候可以查
- -S: 判断某文件是否 socket。
- -L: 检测文件是否存在并且是一个符号链接。