在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