加 减
< <= > >= 比较符号
== != 等于 不等于
<< >> 左移 右移
& | ^ 按位与 按位或 按位异或
&& || 逻辑与 逻辑或
= += -= *= /= %= &= |= ^= <<= >>= 各种赋值运算符
** 幂运算
-eq == 或 =
-ne !=
-gt >
-ge >=
-lt <
-le <=
自增/自减
ping.sh
[ ]
[[ ]]
(( )) 仅用于整数
https://www.gnu.org/software/bc/manual/html_mono/bc.html
# a=1.2 # b=3 # echo "$a<$b" |bc 1 # echo "$a>$b" |bc 0 # echo "$a+$b" |bc 4.2 # x=$(echo "$a+$b" |bc) # echo $x 4.2 [root@VM_153_209_centos scripts]# a=9.8 [root@VM_153_209_centos scripts]# b=10.1 [root@VM_153_209_centos scripts]# echo "$a>$b" |bc 0 [root@VM_153_209_centos scripts]# echo "$a<$b" |bc 1 cat test.bc #!/bin/bc 1+2 quit bc -q test.bc 3 #!/bin/bc array[1]=1 array[2]=2 array[1]+array[2] quit bc -q test.bc 3 逻辑运算 ** [] test **** [[]] **** 说明 **-a && and 与
-o || or 或
! ! not 非
字符串运算 -z "str" 若串长度为0则真,-z 可以理解为zero -n "str" 若串长度不为0则真,-n可以理解为no zero "str1" = "str2" 若串1等于串2则真,可以使用 "==" 代替 "=" "str1" != "str2" 若串1不等于串2则真 "str1" =~ "pattern" 字符串匹配成功则为真 [[ ]] 文件测试 [ -f 文件 ] 文件存在且为普通文件则真,条件表达式成立 [ -d 目录 ] 目录存在且为目录文件则真,条件表达式成立 [ -s 文件 ] 文件存在且文件大小不为0则真,条件表达式成立 [ -e 文件 ] 文件存在则真,只要有文件就行 [ -r 文件 ] 文件存在且可读则真,条件表达式成立 [ -w 文件 ] 文件存在且可写则真,条件表达式成立 [ -L 文件 ] 文件存在且为链接文件则真,条件表达式成立 [ f1 -nt f2 ] 文件f1比文件f2新则真,条件表达式成立 [ f1 -ot f2 ] 文件f1比文件f2旧则真,条件表达式成立 流程控制
顺序 选择 循环
条件表达式条件表达式的值只有真(非0 | 非空 | 条件成立 | $?为0(此条shell特有))、假(0 | 空 | 条件不成立 | $?不为0(此条shell特有))此规则适用于所有的计算机高级语言
算术运算
逻辑运算
Linux命令
流程图
st=>start: Start op=>operation: 命令1 cond=>condition: 条件表达式为真? e=>end st->cond cond(yes)->op->e cond(no)->e if else if 条件表达式;then 命令1 else 命令2 fi st=>start: Start op=>operation: 命令1 op2=>operation: 命令2 cond=>condition: 条件表达式为真? e=>end st->cond cond(yes)->op->e cond(no)->op2->e if elif else if 条件表达式;then 命令1 elif 条件表达式2;then 命令2 else 命令3 fi st=>start: Start op=>operation: 命令1 op2=>operation: 命令2 op3=>operation: 命令3 cond=>condition: 条件表达式为真? cond2=>condition: 条件表达式2为真? e=>end st->cond cond(yes)->op->e cond(no)->cond2 cond2(yes)->op2->e cond2(no)->op3->e case case 模式名 in 模式1) 命令1 ;; 模式2) 命令2 ;; 模式3) 命令3 ;; *) 其它命令 esac st=>start: Start io=>inputoutput: 模式名 op=>operation: 命令1 op2=>operation: 命令2 op3=>operation: 命令3 op4=>operation: 其它命令 cond=>condition: 模式名==模式1 ? cond2=>condition: 模式名==模式2 ? cond3=>condition: 模式名==模式3 ? e=>end st->io->cond cond(yes)->op->e cond(no)->cond2 cond2(yes)->op2->e cond2(no)->cond3 cond3(yes)->op3->e cond3(no)->op4->e 循环 for for 变量名 in 取值列表 do 命令 done for ((expr1;expr2;expr3)) do 命令 done