Shell编程基础进阶(4)

加 减
< <= > >= 比较符号
== != 等于 不等于
<< >> 左移 右移
& | ^ 按位与 按位或 按位异或
&& || 逻辑与 逻辑或
= += -= *= /= %= &= |= ^= <<= >>= 各种赋值运算符
** 幂运算

算术运算(整数) ** [] test **** (()) [[]] **
-eq   == 或 =  
-ne   !=  
-gt   >  
-ge   >=  
-lt   <  
-le   <=  

自增/自减
ping.sh

#!/bin/bash IP=223.5.5.5 i=1 while((i<=4)) do if ping $IP -c 1 &> /dev/null;then echo "ping $IP is ok!" else echo "ping $IP is faild..." fi let i++ done 表达式符号

[ ]
[[ ]]
(( )) 仅用于整数

((1<2&&1>3)) ((1<2||1>3)) 算术运算-bc

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命令

选择(分支) if if 条件表达式;then 命令 fi #/bin/bash http="ss -lntup|grep nginx &> /dev/null" if eval $http then echo 1 else echo 0 fi

流程图

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/189721ecd4cb9ca7dabc34afde2ff454.html