Shell脚本系列(三)
目录
-
Shell脚本系列(一)
-
Shell脚本系列(二)
-
Shell脚本系列(三)
-
Shell脚本系列(四)
-
Shell脚本系列(五)
-
Shell脚本系列(六)
-
Shell脚本系列(七)
-
Shell脚本系列(八)
1、运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
1.0、expr命令
1.0.1、expr命令的注意点
1)expr 命令是一个用于对表达式进行求值并输出相应结果的命令行工具。它同样只支持整数运算,不支持浮点运算。
2)与 let 命令相反,使用 expr 命令时,表达式中的运算符左右必须包含空格,如果不包含空格,将会输出表达式本身。
3)使用 expr 命令时,对于某些运算符,还需要我们使用符号“\”进行转义,否则就会提示语法错误。
4)完整的表达式要被``包含,注意这个字符不是常用的单引号,在 Esc 键下边。
1.0.2、expr命令的等价写法
1)`expr $a + $b`;
2)$(($a+$b));
3)$[ $a + $b ]
当然了这里的变量替换成常量也是没有问题的。比如 $(($a+1))
1.1、算术运算符
eg:下文中“echo -e 是为了换行”
#!/usr/bin/env bash sum=`expr 2 + 2`; echo "两数之和是${sum}"; echo -e; a=20; b=10; c=0; d=20; echo "${a} + ${b} = `expr ${a} + ${b}`"; echo "${a} - ${b} = `expr ${a} - ${b}`"; echo "${a} * ${b} = `expr ${a} \* ${b}`"; echo "${a} / ${b} = `expr ${a} / ${b}`"; echo "${a} / ${c} = `expr ${a} / ${c}`"; echo "${a} % ${b} = `expr ${a} % ${b}`"; # 条件表达式要放在方括号之间,并且要有空格, # 例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。 if [ $a == $b ] then echo "${a} = ${b}"; else echo "${a} != ${b}"; fi echo -e; if [ $a != $c ] then echo "${a} != ${c}"; else echo "${a} = ${c}"; fi echo -e; if [ $a != $d ] then echo "${a} != ${d}"; else echo "${a} = ${d}"; fi echo -e;
1.2、关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
EQ 就是 EQUAL等于
NE 就是 NOT EQUAL不等于
GT 就是 GREATER THAN大于
LT 就是 LESS THAN小于
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于
eg:
#!/usr/bin/env bash # -eq :相等 # -ne :不相等 # -gt :左边大于右边 # -lt :左边小于右边 # -ge :左边大于等于右边 # -le :左边小于等于右边 a=30 b=40 c=35 if [ $a -ge $b ] then echo "大于" else echo "小于" fi
1.3、布尔运算符
eg:
#!/usr/bin/env bash # ! 非 # -o 或 # -a 与 readonly a=10; readonly b=20; if [ $a != $b ] then echo "$a != $b: a 不等于 b"; else echo "$a == $b: a 等于 b"; fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小于 100 且 $b 大于 15:返回true"; else echo "$a 小于 100 且 $b 大于 15:返回false"; fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小于 100 或 $b 大于 100:返回true"; else echo "$a 小于 100 或 $b 大于 100:返回false"; fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a 小于 5 或 $b 大于 100 :返回true"; else echo "$a 小于 5 或 $b 大于 100 :返回false"; fi if [ $a -eq $b ] then echo "$a = $b"; else echo "$a != $b"; fi if [ ! $a -eq $b ] then echo "$a != $b"; else echo "$a == $b"; fi
1.4、逻辑运算符
eg:
#!/usr/bin/env bash # && 逻辑and # || 逻辑or readonly a=10; readonly b=20; if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
1.5、字符串运算符
eg:
#!/usr/bin/env bash # = 检查两个字符串是否相等 # != 检查两个字符串是否不相等 # -z 检查字符串长度是否为0,为0返回true # -n 检查字符串长度是否不为0,不为0返回true # $ 检查字符串是否为空,不为空返回true readonly a="abc"; readonly b="efg"; if [ $a = $b ] then echo "${a}等于${b}"; else echo "${a}不等于${b}"; fi if [ $a != $b ] then echo "${a}不等于${b}"; else echo "${a}等于${b}"; fi if [ -z $a ] then echo "${a}的长度为0"; else echo "${a}的长度不为0"; fi if [ -n $b ] then echo "${b}的长度不为0"; else echo "${b}的长度为0"; fi if [ $a ] then echo "${a}不为空"; else echo "${a}为空"; fi
1.6、文件测试运算符
eg:
#!/usr/bin/env bash # 下面这些属性需要掌握 # TODO # -d file 检测文件是否是目录,如果是,则返回 true。 # -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 # -s file 检测文件是否不为空(文件大小是否大于0),不为空返回 true。 # -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 # -r file 检测文件是否可读,如果是,则返回 true。 # -w file 检测文件是否可写,如果是,则返回 true。 # -x file 检测文件是否可执行,如果是,则返回 true。 file="/var/ggtest/test.txt"; file1="/var/ggtest"; file_notExist="/var/ggtest/123.txt"; if [ -e $file ] then echo "${file}该文件存在"; else echo "${file}该文件不存在"; fi if [ -e $file_notExist ] then echo "${file_notExist}该文件存在!"; else echo "${file_notExist}该文件不存在!"; fi if [ -s $file ] then echo "${file}该文件不为空"; else echo "${file}该文件为空"; fi if [ -f $file ] then echo "${file}该文件是一个普通文件"; else echo "${file}该文件不是一个普通文件"; fi if [ -d $file ] then echo "${file}是一个目录"; else echo "${file}不是一个目录"; fi if [ -d $file1 ] then echo "${file1}是一个目录"; else echo "${file1}不是一个目录"; fi if [ -r $file ] then echo "${file}该文件可读!"; else echo "${file}该文件不可读!"; fi if [ -w $file ] then echo "${file}该文件可写!"; else echo "${file}该文件不可写!"; fi if [ -x $file ] then echo "${file}该文件可执行!"; else echo "${file}该文件不可执行!"; fi
2、其他
2.1、总结一下Shell里面的空格,啥时要有啥时不能有
1)=两边不能加空格;
2)if语句的方括号与判断条件之间一定要是两边都有空格;
3)除了等号之外,其他运算符左右两侧都要有空格;
参考:https://www.runoob.com/linux/linux-shell.html
在全栈的道路上,积极向上、成熟稳重、谦虚好学、怀着炽热的心向前方的走得更远。