在Linux Shell编程中,if、for、while、case等条件流程控制语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。下面将逐个来讲解具体的用法:
If条件判断语句
If (表达式) #if ( Variable in Array )
语句1
else
语句2
fi
案例一,测试数字大小
#!/bin/sh
NUM=100
if (( $NUM > 4 )) ;then
echo “this num is $NUM greater 4 !”
fi
案例二,测试目录是否存在,不存在则新建(注意,中括号之间必须要空格)
#!/bin/sh
#judge dir exist
if [ ! -d /data/20140515 ];then
mkdir -p /data/20140515
else
echo “This DIR is exist,Please exit …..”
fi
逻辑运算符解析:
-f 判断文件是否存在 eg: if [ -f filename ]
-d 判断目录是否存在 eg: if [ -d dir ]
-eq 等于 应用于:整型比较
-ne 不等于 应用于:整型比较
-lt 小于 应用于:整型比较
-gt 大于 应用于:整型比较
-le 小于或等于 应用于:整型比较
-ge 大于或等于 应用于:整型比较
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式
-z 空字符串
案例三,多个条件测试判断
#!/bin/sh
scores=80;
if [[ $scores -gt 85 ]]; then
echo "very good!";
elif [[ $scores -gt 75 ]]; then
echo "good!";
elif [[ $scores -gt 60 ]]; then
echo "pass!";
else
echo "no pass!";
fi;
循环语句for
For 变量 in 字符串
do
语句1
done
案例一,打印seq多个数
#!/bin/sh
for i in `seq 15`
do
echo “NUM is $i”
done
案例二,找到相关log,然后批量打包
#!/bin/sh
for i in `find /var/log -name “*.log”`
do
tar –czf 2014log.tgz $i
done
循环语句while
while 条件语句
do
语句1
done
案例一,while条件判断数字
#!/bin/sh
i=1;
while [[ $i -lt 10 ]];do
echo $i;
((i++));
done;
案例二,while逐行读取某个文件
#!/bin/sh
while read line
do
echo $line;
done < /etc/hosts
Until循环语句
until 条件
do
action
done
直到满足条件,才退出。否则执行action。
案例一,条件判断数字
#!/bin/sh
a=10;
until [[ $a -lt 0 ]];do
echo $a;
((a--));
done;
Case选择语句
case $arg in
pattern1)
语句1
;;
pattern2)
语句2
;;
*)
语句3
;;
esac
案例一,创建选择参数脚本
#!/bin/sh
case $1 in
monitor_log)
monitor_log
;;
archive_log)
archive_log
;;
* )
echo "Usage:{$0 monitor_log | archive_log |help }"
;;
esac
select选择语句
#!/bin/sh
PS3="What you like most of the open source system?"
select i in CentOS RedHat Ubuntu
do
echo "Your Select System: "$i
done