shell编程值之shell流程控制(7)
条件判断式
1 按照文件类型判断(常用类型)
测试类型 | 作用 |
---|---|
-d 文件 | 判断该文件是否存在,并且是否为目录文件(是目录文件为真) |
-e 文件 | 判断该文件是否存在(存在为真) |
-f 文件 | 判断该文件是否存在,并且是否为普通文件(是普通文件为真) |
[-d /root] && echo 'yes' || 'no']
判断/root是否为一个目录,是打印yes不是打印no
2 两种判断格式
test -e /root/install.log
[-e /root/install.log]
2 两个文件之间进行比较
测试选项 | 作用 |
---|---|
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新(如果新为真) |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧(如果旧为真) |
文件1 -ef 文件2 | 判断文件1是否和文件2 的inode好一直,可以理解为两个文件是否为通一个文件。这个判断用于判断硬连接是很好的方法 |
2 两个整数之间的比较
测试选项 | 作用 |
---|---|
-eq | 是否相等 |
-ne | 是否不相等 |
-gt | 是否大于 |
-lt | 是否小于 |
-ge | 是否大于等于 |
-le | 是否小于等于 |
3 字符串的判断
测试选项 | 作用 |
---|---|
-z 字符串 | 判断字符串是否为空 |
-n 字符串 | 判断字符串是否为非空 |
== | 是否相等 |
!= | 不相等 |
4 多重条件判断
测试选项 | 作用 |
---|---|
判断1 -a 判断2 | 逻辑与,两个都为真,还为真 |
判断1 -o 判断2 | 逻辑或,有一个为真就为真 |
!判断 | 逻辑非,取反 |
单分支if语句
if [条件判断式]; then
程序
fi
或者
if [条件判断式]
then
程序
fi
判断登陆的用户是否root
#!/bin/bash
test=$(env | grep "USER" | cut -d "=" -f2)
if ["$test" == root]
then
echo 'user is root'
fi
双分支if语句
if [条件判断式]
then
成立
else
不成立
fi
多分支if语句
if [条件判断式]
then
成立
elif [条件判断式2]
then
else
不成立
fi
case语句
case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
"值3")
程序3
;;
esac
判断用户输入
#!/bin/bash
read -p 'please choose yes/no' -t 30 cho
case $cho in
'yes')
echo 'yes'
;;
'no')
echo 'no'
*)
echo $cho
;;
esac
for循环
语法1
for 变量 in 值1 值2 值3
do
done
语法2
for((初始值;循环控制条件;变量变化))
do
程序
done
批量解压缩文件
#!/bin/bash
cd /root/test
ls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i &>/dev/null
done
rm -rf /lamp/ls.log
从1加到100
#!/bin/bash
s=0
for((i=1;i<=100;i=i+1))
do
s=$(($s+$i))
done
while循环和util循环
从1加到100
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done