一 IF
- 语法
(1) 使用
- shell和C语言有点小区别, 都是条件判断为真时候执行, shell为0的时候才会执行(shell为0为真)
- 条件判断只能测试普通shell命令的退出状态(这样子也好), 测试其他命令需要使用test测试, 并且test也有很大的局限性
- test可以测试: 数值比较 字符串比较 文件比较 (三种比较的退出状态)
(2) 双分支
if [ 条件判断]
then
命令1
else
命令2
fi
(3) 多分支
if 条件测试命令
then
命令1
elif 条件测试
命令
then
命令2
fi
- ex
#!/bin/bash
#多分支只能执行一次
if date1
then
echo "hello"
elif date
then
echo "date"
fi
9e1c5cbd-fe4e-4e7e-a5dd-d9f8203c4b9a.png
- 普通命令直接使用即可, 不需要在加其他符号,特别是`` 符号, 加上就是错误
- 每一个测试条件都必须有IF 命令 then 执行语句
elif 而不是else IF - then和else之间必须存在命令, 否则运行错误
(4) 语法特点
- C语言和shell 比对, 在she'll里面, then和 fi 就相当于花括号
if 条件测试命令
then
命令
fi
// C语言
if 条件{
代码块;
}
- test
(1) 作用
- 测试特定的表达式是否成立, 成立则执行条件
(2) 语法
#格式一
test 条件表达式
#格式二,注意条件表达式两边加上空格
[ 条件表达式 ]
(3) 测试文件状态
- -d 测试是否存在并且为目录,
- -e 测试目录或者文件是否存在,存在则为真
- -f 测试是存在否为文件,是则为真
- -nt file1 -nt file2 :file1 比file2新,则为真
- -r 测试当前用户是否有读取权限
- -w 测试是否有写的权限
(4) 例
#!/bin/bash
#多分支只能执行一次
if [ -d /media/wenguang/homework ] ;
then
echo "U盘homework已被挂载"
else
echo "U盘homework未被挂载"
fi
96facc4c-9ed4-44d6-bfd7-6484234c4840.png
(4) 数值比较
- n1 -eq n2 等于
- n1 -gt n2 大于
- n1 -lt n2 小于
- n1 -ge n2 大于等于
- n1 le n2 小于等于
(5) 字符串比较
Str1 = Str2
Str1 != Str2
Str1 > Str2
Str1 < Str2
-n Str2 : 长度是否非0
-z Str2 : 长度是否为0
- 注: 使用大于小于号使用转义字符, 否则会被解释为重定向
(6) 字符串比较
使用-z和-n比较变量时候, 变量需要加上双引号
其他字符串比较则可以不用加上双引号
(7) 复合条件
-a 或 && :与
-o 或 || :非
注: 这个与C语言一样, 最外层不需要加括号了
#!/bin/bash
# IF 测试复合语句
i=1
if [ $i -eq 1 ] && [ $i -gt 0 ]
then
echo " i==1 && i>0 "
else
echo " not "
fi
- 高级特性
(1) (()) 可以执行数学运算符
算数运算符 比较运算符
++ --(常量无法++ i)
(2) 例子: 比较两个数的大小
#!/bin/bash
#测试if数学比较
#测试使用
i=1
if (( ++i >= 2 ))
then
echo "yes"
else
echo "no"
fi