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.2 文件比较运算
-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
1.3 字符串比较运算
== 等于
!= 不等于
-n (not zero)检查字符串是否不为空
-z (zero)检查字符串是否为空
1.4 逻辑运算
&& 逻辑与运算
|| 逻辑或运算
! 逻辑非运算
2. if语句
[ condition ]可以由多个条件使用||或&&拼接
例如:
#只要一个条件为真就行
if [ $var1 -lt 1 ] || [ $var2 -gt 2 ]
#必须所有条件为真
if [ $var1 -lt 1 ] && [ $var2 -gt 2 ] && [ $var3 -lt 10 ]
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
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