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

原创 2018年04月15日 18:23:20

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" 

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

shell脚本编程学习笔记5(xdl)——正则表达式

    shell脚本编程学习笔记5——正则表达式1,简介正则表达式,用来在文件中匹配符合条件的字符串,包含匹配。注意是文件中选择字符串,和通配符是 不同的。grep,awk,sed等命令可以支持正则...
  • SiuKong_Ngau
  • SiuKong_Ngau
  • 2018-04-14 20:25:25
  • 6

Shell脚本编程学习笔记(序)

以前都是非系统性的学习Linux指令,一般也就用到什么百度什么,用完之后差不多没几天也就忘了。学来学去,熟悉的指令永远就那几个,永远记不住其他的指令,查找的自己都嫌烦了。 恰好目前项目不是很忙,...
  • toigkiss
  • toigkiss
  • 2018-01-10 20:29:41
  • 63

Linux之shell编程之条件判断与流程控制

Linux之shell编程之条件判断与流程控制 文件判断 -b 判断该文件是否存在,并且是否为块设备文件(是为真) -c 判断该文件是否存在,并且是否为字符设备文件(是为真) -d 判断该文件是否存在...
  • zhaojianyin
  • zhaojianyin
  • 2017-03-12 16:51:38
  • 226

Lua编程笔录--Lua初识及语法二(循环,流程控制,函数)

前言:前面的一些可以参考  Lua编程笔录--Lua初识及语法一
  • AdamBieber
  • AdamBieber
  • 2016-11-21 17:34:01
  • 855

Oracle 流程控制 和 循环控制

--_______________________________________流程控制__________________________________________________ -...
  • luobing_csdn
  • luobing_csdn
  • 2017-03-27 11:38:23
  • 478

shell脚本编程学习笔记2(xdl)——Bash变量

    shell脚本编程学习笔记2——Bash变量1,变量简介1,计算机内存单元 2,设置规则 字母数组下划线组成,不能以数字开头 Bash中,默认类型字符串型,变量类型可修改 2...
  • SiuKong_Ngau
  • SiuKong_Ngau
  • 2018-04-10 22:54:56
  • 10

shell脚本编程学习笔记4(xdl)——Bash常见环境变量

shell脚本编程学习笔记4——Bash常见环境变量非专业运维,例如开发人员,环境变量熟悉常见的,了解不常见的即可。1,简介环境变量配置文件中主要是定义对系统的 操作环境生效的系统默认环境变量,比如 ...
  • SiuKong_Ngau
  • SiuKong_Ngau
  • 2018-04-13 09:45:43
  • 0

shell脚本编程学习笔记7(XDL)——字符处理命令和条件判断

shell编程学习笔记——字符处理命令和条件判断1,字符处理[root@localhost ~]# sort [选项] 文件名 选项: -f: 忽略大小写 ...
  • SiuKong_Ngau
  • SiuKong_Ngau
  • 2018-04-15 11:09:14
  • 10

shell脚本编程学习笔记1(xdl)——shell基础与Bash基本功能()

shell脚本编程学习笔记1——shell基础与Bash基本功能1,简介:1,Shell就是一个命令行解释器,用以连接输入设别和内核。 2,Shell是解 释执行的脚本语言,在Shell中可以直接调 ...
  • SiuKong_Ngau
  • SiuKong_Ngau
  • 2018-04-10 22:53:38
  • 1

shell脚本编程学习笔记6(xdl)——字符串截取命令

shell脚本编程学习笔记6——字符串截取命令1,cut命令[root@localhost ~]# cut [选项] 文件名     -f 列号,表示提取第几列     -d 分隔符,按照指定的分隔符...
  • SiuKong_Ngau
  • SiuKong_Ngau
  • 2018-04-15 11:10:26
  • 59
收藏助手
不良信息举报
您举报文章:shell脚本编程学习笔记8(XDL)——流程控制和循环
举报原因:
原因补充:

(最多只允许输入30个字)