1. shell中的运算
1.1 数学比较运算
-eq
等于
-ne
不等于
-lt
小于
-gt
大于
-le
小于等于
-ge
大于等于
浮点数的比较建议将数字等比放大至整数进行比较,例如
#比较1.5和2的大小
test `echo 1.5*10|bc|awk -F "." '{print $1}'` -lt $((2*10))
1.1.1 借助expr判断是否是整数
expr 1 + $NUM
[ $? - ne 0 ] && echo "$NUM 不是整数"
1.2 多整数比较
-a
and
-o
or
#与
[ 10 -eq 10 -a 10 -gt 100 ] ; echo $?
1
#或
[ 10 -eq 10 -o 10 -gt 100 ] ; echo $?
0
1.3 文件比较运算
-d
检查目录是否存在
-e
检查文件或目录是否存在
-f
检查文件是否存在
-r
检查文件是否存在且可读
-s
检查文件是否存在且不为空
-w
检查文件是否存在且可写
-x
检查文件是否存在且可执行
-O
检查文件是否存在且被当前用户拥有
-G
检查文件是否存在且默认组为当前组
file1 -nt file2
检查file1是否比file2新,比较mtime
file1 -ot file2
检查file1是否比file2旧,比较mtime
file1 -ef file2
检查file1是否比file2是否有相同的inode
常用案例:
#先判断文件存在,再进行调用
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
#先判断目录是否存在,再新建目录
[ -d /backup ] || mkdir /backup
1.4 字符串比较运算
==
等于
!=
不等于
-n
(not zero)检查字符串是否不为空
-z
(zero)检查字符串是否为空
# 判断变量a是否为空
if [ -z $a ]
1.5 逻辑运算
&&
逻辑与运算
||
逻辑或运算
!
逻辑非运算
1.6 正则比较
正则比较需要使用[[ ]]
符号
=~
正则匹配
!
取反,需要放在整体表达式前面
[[ ! $USER =~ ^b ]] ;echo $?
正则匹配常用于判断是否是整数:
[[ $INPUT =~ ^[0-9]+$ ]]
2. if语句
[ condition ]可以由多个条件使用||
或&&
拼接
例如:
#只要一个条件为真就行
if [ $var1 -lt 1 ] || [ $var2 -gt 2 ]
#必须所有条件为真
if [ $var1 -lt 1 ] && [ $var2 -gt 2 ] && [ $var3 -lt 10 ]
[ condition ]还可以是一段命令,如果命令执行成功为true,否则为false
例如:
#如果php安装成功就执行后面语句
if yum -y install php 1>/dev/null;then
#如果php安装不成功就执行后面语句
if ! (yum -y install php 1>/dev/null);then
2.1 单if语句
适用范围:只需一步判断,条件返回真干什么
语法:
if [ condition ] #condition为true或false,[]与condition中间有空格
then
command
fi
例子:
#如果/tmp/abc目录不存在,就创建目录
#!/bin/bash
if [ ! -d /tmp/abc ]
then
mkdir /tmp/abc
echo "create dir /tmp/abc"
fi
2.2 if-then-else语句
适用范围:两步判断,条件为真干什么,条件为假干什么
if [ condition ]
then
command1
else
command2
fi
例子:
#如果用户是root,输出"管理员,你好",否则输出"Guest,你好"
#!/bin/bash
if [ $USER == 'root' ]
then
echo "管理员,你好"
else
echo 'Guest,你好'
fi
2.3 if-then-elif-then-else语句
适用范围:多于两个以上的判断结果
if [ condition1 ]
then
command1
elif [ condition2 ]
then
command2
......
else
commandx
fi
例子:
#给脚本传入两个整数,输出比较结果
#!/bin/bash
if [ $1 -gt $2 ]
then
echo "$1>$2"
elif [ $1 -eq $2 ]
then
echo "$1=$2"
else
echo "$1<$2"
fi
3. if高级应用
3.1 条件符号使用(( ))植入数学表达式
在数学表达式中,使用的是传统的比较运算符 >、>=、==、<、<=、!=
例子:
#判断(5+4)*10>89
#!/bin/bash
if (( (5+4)*10>89 ))
then
echo "yes"
else
echo "no"
fi
3.2 条件符号使用[[ ]]在条件中使用通配符
例子:
#打印r开头的字符串
#!/bin/bash
for var in r1 r2 a ab c
do
if [[ $var == r* ]]
then
echo $var
fi
done
网友评论