shell脚本编程学习笔记8(XDL)——流程控制和循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SiuKong_Ngau/article/details/79951594

shell脚本编程学习笔记8——流程控制和循环

1,if语句

1,框架

1,单分支:
    if [条件判断式] ;then
        program
    fi

    if [条件判断式]
        then
            program
    fi

    注意:
        if语句使用fi结尾,和一般语言使用大括 号结尾不同 
        [ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格 
        then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了 

双分支
    if [condition]
        then
            program
        else
            program
    fi

多分支
    if [condition]
        then
            program
    elif [condition]
        then 
            program
    ......
    else
        program
    fi

2,实例:

1,判断根分区使用率。根分区使用大于指定的值,则警告

    [root@iZwz9h901rvv69020rk7fsZ sh]# more dfh.sh 
    #!/bin/bash
    rate=$(df -h | grep '/dev/xvda1' | awk '{printf $5 }' | awk 'BEGIN{FS="%"}{printf $1}');
    if [ $rate -gt 80 ]
        then
            echo "warning,the used is $rate"
        fi
    [root@iZwz9h901rvv69020rk7fsZ sh]# 

2,判断apache是否启动成功

    [root@iZwz9h901rvv69020rk7fsZ sh]# more apache.sh 
    #!/bin/bash
    status=$(nmap -sT 127.0.0.1 | grep 'http' | grep 'tcp' | awk '{printf $2}')
    if [ "$status" == "open" ]
        then
            echo "$(date) httpd is ok" >>/root/log/httpd.log
        else
            /etc/rc.d/init.d/httpd start &> /dev/null
            echo "$(date) restart httpd" >> /root/log/httpd.log
        fi
    [root@iZwz9h901rvv69020rk7fsZ sh]# 

3,备份数据库

    [root@li1079-128 bash]# more backup_mysql.sh 
    #!/bin/bash
    ntpdate asia.pool.ntp.org &>/dev/null
    date=$(date)
    size=$(du -sh /usr/local/mysql/)
    if [ -d /tmp/dbbak ]
        then
            echo "Date:$date">>/tmp/dbbak/dbinfo.log
            echo "Size:$size">>/tmp/dbbak/dbinfo.log
            cd /tmp/dbbak/
            tar -zcvf mysql-lib-$date.tar.gz /usr/local/mysql/ &>/dev/null
        else
            mkdir /tmp/dbbak
            echo "Date:$date">>/tmp/dbbak/dbinfo.log
                    echo "Size:$size">>/tmp/dbbak/dbinfo.log
                    cd /tmp/dbbak/
                    tar -zcvf mysql-lib-$date.tar.gz /usr/local/mysql/ &>/dev/null
        fi
    [root@li1079-128 bash]# 

4,判断去什么地方

    [root@iZwz9h901rvv69020rk7fsZ sh]# more duo.sh 
    #!/bin/bash
    read -p "if you to guangzhou,please1\n
        if you go to shanghai,please2\n
        if you go to shenzhen,please3:" where
    if [ "$where" -eq 1 ]
        then
            echo "guangzhou"
        elif [ "$where" -eq 2 ]
        then
            echo "shanghai"
        else
            echo "shenzhen"
        fi
    [root@iZwz9h901rvv69020rk7fsZ sh]# 

2,case语句

case语句和if…elif…else语句一样都是多 分支条件语句,不过和if多分支条件语句
不同的是,case语句只能判断一种条件关 系,而if语句可以判断多种条件关系


case $var in
    "val1")
        program
        ;;
    "val2")
        program
        ;;
    ......
    *)
        program
        ;;
esac


#!/bin/bash 
#判断用户输入
read -p "Please choose yes/no: " -t 30 cho 
case $cho in         
"yes")                 
echo "Your choose is yes!"                 
;;         
"no")                 
echo "Your choose is no!"                 
;;         
*)                 
echo "Your choose is error!"                 
;; 
esac 

3,for循环

1,语法

for 变量 in 值1 值2 值3…  
    do   
        程序  
    done



for (( 初始值;循环控制条件;变量变化 ))  
    do   
        程序  
    done

2,实例

#!/bin/bash 
#打印时间
for time in morning noon afternoon evening         
    do                 
        echo "This time is $time!"         
    done



#!/bin/bash 
#批量解压缩脚本 
cd /lamp 
ls *.tar.gz > ls.log 
for i in $(cat ls.log)         
    do                 
        tar -zxf $i &>/dev/null         
    done 
rm -rf /lamp/ls.log


#!/bin/bash 
# 从 1 加到 100  
s=0 
for (( i=1;i<=100;i=i+1 ))         
    do                 
        s=$(( $s+$i ))         
    done 
echo "The sum of 1+2+...+100 is : $s" 


#!/bin/bash 
#批量添加指定数量的用户 
read -p "Please input user name: " -t 30 name 
read -p "Please input the number of users: " -t 30 num  
read -p "Please input the password of users: " -t 30 pass 
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]         
    then         
        y=$(echo $num | sed 's/[0-9]//g')          
            if [ -z "$y" ]                 
        then                 
        for (( i=1;i<=$num;i=i+1 ))                         
            do                           
                /usr/sbin/useradd $name$i &>/dev/null            
                echo $pass | /usr/bin/passwd --stdin $name$i &>/dev/null        
            done         
        fi   
fi 

4,while和until循环

--while
简介:
    while循环是不定循环,也称作条件循环 。只要条件判断式成立,循环就会一直继续
    直到条件判断式不成立,循环才会停 止。这就和for的固定循环不太一样了
语法:
    while [ 条件判断式 ]  
        do   
            程序  
        done 


--until
简介:
    until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执 行循环程序。一旦循环条件成立,则终止循环。 
语法:
    until [ 条件判断式 ]  
        do   
            程序  
        done


实例:
    #!/bin/bash 
    #从1加到100 
    i=1 
    s=0 
    while [ $i -le 100 ] 
    # 如果变量 i 的值小于等于 100 , 则执行循环
        do                 
            s=$(( $s+$i ))                 
            i=$(( $i+1 ))         
        done 
    echo "The sum is: $s" 



    #!/bin/bash 
    #从1加到100 
    i=1 
    s=0 
    until [ $i -gt 100 ] 
    # 循环直到变量 i 的值大于 100 , 就停止循环
        do                 
            s=$(( $s+$i ))                 
            i=$(( $i+1 ))         
        done 
    echo "The sum is: $s" 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页