Shell 基本运算符+条件测试
2018-03-01 20:48
295 查看
1、运算符
算数运算符:加+ 、减— 、乘 、除/ 、取余% 、赋值= 、 等于== 、不等于!
关系运算符:大于等于-ge、大于-gt、小于等于-le、小于-lt、等于-eq、不等于-ne
(关系运算符只支持数字并且是整数,不支持字符串,除非字符串的值是数字)
布尔运算符:与-a 、或-o 、非! 、异或^
逻辑运算符:与&&、或||
字符串运算符:字符串长度是0为真-z 、字符串长度不是0为真-n 、相等== 、不相等!=
文件测试运算符: 文件(包括目录)存在-e 、文件为空(文件大小为0)-s
普通文件(既不是目录,也不是设备文件)-f 、目录-d
块设备文件-b 、字符设备文件-c、文件是有名管道(pipe 或是 FIFO)-p
可读-r 、可写-w 、可执行-w
设置了SGID位-g 、设置了SUID位-u 、设置了粘着位(Sticky Bit)-k *
2、条件测试的表达式
— test 选项 参数
— [ 选项 参数 ] ----> [[ 选项 参数 ]]
所有字符与运算符直接用“空格”分开,不能连到一起。[[ ]] 支持正则。
test提供一种检测if-then语句中不同条件的方法,如果test命令中列出的条件评估值为true,test命令以0状态码退出。
条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 $?),所以可以在测试后查看变量$?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作)
3、使用运算符做条件测试
使用关系运算符(-ge -gt -lt -le -eq -ne),这里是不能使用大于>,小于<的。
在[ ]表达式中,shell会将他们当做重定向符号,若想使用,大于和小于符号一定要转义,加上转义符号\,即 \> 和 \<
而[[ ]]表达式,只是对[ ]的扩充,能够支持大于>、小于<运算,不需要转义
案例1:对数值10、数值20判断比较
[ 10 -lt 20 ] 或 [ 10 \< 20 ] 或 [[ 10 < 20 ]]
实际应用中,常用于给变量赋值,然后跟特定数值比较
案例2:监控本机内存剩余空间,判断剩余内存是否小于500M
mem_size=$(free |awk '/Mem/{print $4}') //提取内存剩余空间,赋值变量
if [ $men_size -le 512000 ] //内存提取的空间大小是以 Kb 为单位
then
echo "内存不足"
else
echo "内存充足"
fi
<2> 字符串比较
使用字符串运算符(==、 !=、 -z、 -n)
常用于检测变量是否与某字符串匹配,如环境变量$USER;检测变量是否设置-z等
案例1:检测本机当前用户是否为超级管理员
[ $USER == "root" ] //测试
echo $?
注意:=虽然有相等的意思,但是它一般表示赋值,所以判断尽量使用==
<3> 检测文件/目录的各种属性
使用文件测试运算符(-e -d -f -r -w -x 等)
案例1:测试备份目录是否存在,不存在则自动创建该目录
[ ! ‐d /mysqlbackup ] && mkdir /mysqlbackup
<4> 多个条件/操作的逻辑组合(与、或、非、异或)
与(-a、&&):当两边同为真的时候,结果为真
或(-o、 || ):当两边都为假的时候,结果为假。
非( ! ) :取反
异或( ^ ) :当左右都相同的时候,结果为假;当左右不相同的时候,结果为真
在[ ]表达式中,多条件的逻辑组合使用布尔运算符(!、-o、-a),不支持 && 、 ||
在[[ ]]表达式中,多条件的逻辑组合使用逻辑运算符(&& 、||),不支持 -a 、 -o
案例1:监控本机内存和硬盘剩余空间,判断剩余内存是否小于 125M、根分区剩余空间是否小于 1000M
disk_size=$(df / |awk '/\//{print $4}') //提取根分区剩余空间
mem_size=$(free |awk '/Mem/{print $4}') //提取内存剩余空间
if [ $disk_size ‐le 1024000 ‐a $mem_size ‐le 128000 ];then
echo "内存和硬盘剩余空间不足"
else
echo "一切OK"
fi
或 者使用双中括号 [[ ]]表达式进行条件测试
[[ $disk_size < 1024000 && $mem_size < 128000 ]]
算数运算符:加+ 、减— 、乘 、除/ 、取余% 、赋值= 、 等于== 、不等于!
关系运算符:大于等于-ge、大于-gt、小于等于-le、小于-lt、等于-eq、不等于-ne
(关系运算符只支持数字并且是整数,不支持字符串,除非字符串的值是数字)
布尔运算符:与-a 、或-o 、非! 、异或^
逻辑运算符:与&&、或||
字符串运算符:字符串长度是0为真-z 、字符串长度不是0为真-n 、相等== 、不相等!=
文件测试运算符: 文件(包括目录)存在-e 、文件为空(文件大小为0)-s
普通文件(既不是目录,也不是设备文件)-f 、目录-d
块设备文件-b 、字符设备文件-c、文件是有名管道(pipe 或是 FIFO)-p
可读-r 、可写-w 、可执行-w
设置了SGID位-g 、设置了SUID位-u 、设置了粘着位(Sticky Bit)-k *
2、条件测试的表达式
— test 选项 参数
— [ 选项 参数 ] ----> [[ 选项 参数 ]]
所有字符与运算符直接用“空格”分开,不能连到一起。[[ ]] 支持正则。
test提供一种检测if-then语句中不同条件的方法,如果test命令中列出的条件评估值为true,test命令以0状态码退出。
条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 $?),所以可以在测试后查看变量$?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作)
3、使用运算符做条件测试
<1> 整数值比较
使用关系运算符(-ge -gt -lt -le -eq -ne),这里是不能使用大于>,小于<的。
在[ ]表达式中,shell会将他们当做重定向符号,若想使用,大于和小于符号一定要转义,加上转义符号\,即 \> 和 \<
而[[ ]]表达式,只是对[ ]的扩充,能够支持大于>、小于<运算,不需要转义
案例1:对数值10、数值20判断比较
[ 10 -lt 20 ] 或 [ 10 \< 20 ] 或 [[ 10 < 20 ]]
实际应用中,常用于给变量赋值,然后跟特定数值比较
案例2:监控本机内存剩余空间,判断剩余内存是否小于500M
mem_size=$(free |awk '/Mem/{print $4}') //提取内存剩余空间,赋值变量
if [ $men_size -le 512000 ] //内存提取的空间大小是以 Kb 为单位
then
echo "内存不足"
else
echo "内存充足"
fi
<2> 字符串比较
使用字符串运算符(==、 !=、 -z、 -n)
常用于检测变量是否与某字符串匹配,如环境变量$USER;检测变量是否设置-z等
案例1:检测本机当前用户是否为超级管理员
[ $USER == "root" ] //测试
echo $?
注意:=虽然有相等的意思,但是它一般表示赋值,所以判断尽量使用==
<3> 检测文件/目录的各种属性
使用文件测试运算符(-e -d -f -r -w -x 等)
案例1:测试备份目录是否存在,不存在则自动创建该目录
[ ! ‐d /mysqlbackup ] && mkdir /mysqlbackup
<4> 多个条件/操作的逻辑组合(与、或、非、异或)
与(-a、&&):当两边同为真的时候,结果为真
或(-o、 || ):当两边都为假的时候,结果为假。
非( ! ) :取反
异或( ^ ) :当左右都相同的时候,结果为假;当左右不相同的时候,结果为真
在[ ]表达式中,多条件的逻辑组合使用布尔运算符(!、-o、-a),不支持 && 、 ||
在[[ ]]表达式中,多条件的逻辑组合使用逻辑运算符(&& 、||),不支持 -a 、 -o
案例1:监控本机内存和硬盘剩余空间,判断剩余内存是否小于 125M、根分区剩余空间是否小于 1000M
disk_size=$(df / |awk '/\//{print $4}') //提取根分区剩余空间
mem_size=$(free |awk '/Mem/{print $4}') //提取内存剩余空间
if [ $disk_size ‐le 1024000 ‐a $mem_size ‐le 128000 ];then
echo "内存和硬盘剩余空间不足"
else
echo "一切OK"
fi
或 者使用双中括号 [[ ]]表达式进行条件测试
[[ $disk_size < 1024000 && $mem_size < 128000 ]]
相关文章推荐
- 2、shell条件测试,运算符,选择结构,for循环结构
- [9-13]Shell系列5――条件测试和运算符
- shell运算符之 关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符
- shell脚本学习 之文件测试运算符
- shell脚本之条件测试与判断
- shell编程--shell脚本测试条件
- Shell学习笔记之条件测试
- leeboy的linux学习十五 shell中条件测试和简单的条件语句实例
- shell条件测试
- Shell 基本运算符(转)
- Shell条件与测试
- 《shell条件测试语句,字符串测试apache是否开启》
- Shell脚本编程——条件测试
- shell 条件测试
- shell中条件测试与整数运算以及脚本选项
- shell脚本编程之条件判断,算术运算,整数测试及特殊变量
- Shell条件测试
- Linux – Shell 条件测试
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符
- Hive基本操作,DDL操作(创建表,修改表,显示命令),DML操作(Load Insert Select),Hive Join,Hive Shell参数(内置运算符、内置函数)等