Linux|shell编程--四种流程控制语句


文章目录

  • 一、流程控制--if语句
    • 1、单分支if条件语句
    • 2、双分支if条件语句
    • 3、多分支if条件语句
  • 二、流程控制--case语句
    • 1、定义
    • 2、命令格式
  • 三、流程控制for循环
    • 1、语法一
    • 2、语法二
  • 四、流程控制while循环
    • 1、while循环
    • 2、until循环

一、流程控制–if语句 1、单分支if条件语句
if [ 条件判断式 ]; then 程序 fi

或者
if [ 条件判断式 ] then 程序 fi

示例代码: 判断分区使用率
#!/bin/bashrate=$(df -h |grep /dev/vda1 | awk '{print $5}' | cut -d "%" -f1)if [ $rate -ge 80 ] then echo "Waning it is fulling" fi

2、双分支if条件语句
if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立时,执行的另一个程序 fi

示例1:备份脚本
#!/bin/bash # 同步时间 ntpdate asia.pool.ntp.org &>/dev/null date=$(date +%y%m%d) size=$(du -sh /var/lib/jenkins) if [ -d /var/lib/jenkins ] then echo "Date : $date" > /data/ylxtest/logs/jenkins_info.txt echo "Data size : $size" >> /data/ylxtest/logs/jenkins_info.txt cd /data/ylxtest/logs tar -zcf etc_$date.tar.gz /etc jenkins_info.txt &>/dev/null rm -rf /data/ylxtest/logs/jenkins_info.txt else mkdir -r /data/ylxtest/logs echo "Date : $date" > /data/ylxtest/logs/jenkins_info.txt echo "Data size : $size" >> /data/ylxtest/logs/jenkins_info.txt cd /data/ylxtest/logs tar -zcf etc_$date.tar.gz /etc jenkins_info.txt &>/dev/null rm -rf /data/ylxtest/jenkins_info.txt fi

示例2:判断apache是否启动
#!/bin/bash #使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port port=$(nmap -sT 127.0.0.0 | grep tcp | grep http | awk '{print $2}') if [ "$port" == "open" ] then echo "$(data) httpd start"&>/dev/start.log else /etc/rc.d/init.d/httpd start &> /dev/null echo "$(data) restart httpd"&>> /dev/error.log fi

3、多分支if条件语句
if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] then 当条件判断式2成立时,执行程序2 ………………………… else 当所有条件都不成立时,最后执行此程序 fi

示例:判断键盘输入的内容
#!/bin/bash read -p "Please input a filename:" file # 接收键盘的输入,并赋予变量file if [ -z "$file" ] # 判断file变量是否为空 then echo "Error,please input a filename" exit 1 elif [ ! -e "$file" ] # 判断file的值是否存在 then echo "Your input is not a file!" exit 2 elif [ -f "$file" ] # 判断file是否为普通文件 then echo "$file is a regulare file!" elif [ -d "$file" ] # 判断file的值是否为目录文件 then echo "$file is a directory!" else echo "$file is an other file!" fi

二、流程控制–case语句 1、定义 case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。
2、命令格式
case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ; ; "值2") 如果变量的值等于值2,则执行程序2 ; ; …………省略其他分支 *) 如果变量的值都不是以上的值,则执行此程序 ; ; esac

【Linux|shell编程--四种流程控制语句】示例:
#!/bin/bashread -p "Please choose yes/no : " -t 30 cho # 接收键盘的输入,并赋予变量cho, case $cho in "yes") echo "Your choose is yes" ; ; "no") echo "Your choose is no" ; ; *) echo "Your choose is error!" ; ; esac

-t: 等待键盘输入的时间
三、流程控制for循环 1、语法一
for 变量 in 值1 值2 值3... # 后面有几个值就循环几次 do 程序 done

示例1:
#!/bin/bashfor time in morning noon afternoon evening do echo "This time is $time!" done

示例2:批量解压缩脚本
cd /data/test ls *.tar.gz > ls.log# 把当前目录下tar.gz包名称写入到ls.log文件中 for i in $(cat ls.log) do tar -zxf $i>/dev/logs done rm -rf /dev/logs

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

示例:1~100之和
#!/bin/bashs=0 for (( i=1; i<=100; i=i+1 )) do s=$(( $s+$i)) done echo $s

示例2:批量添加用户
#!/bin/bashread -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 passwdif [ ! -z "$name" -a ! -z "$num" -a ! -z "$passwd" ] # -a: 为真 then y=$(echo $num | sed 's/[0-9]//g') if [ -z "$y" ] then for((i=1; i<=$num; i+=1)) do useradd $name$i &>/data/ylxtest/useradd.log echo $passwd | passwd --stdin "$name$i" &>/data/ylxtest/useradd.log done fi fi

四、流程控制while循环 1、while循环 while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断不成立,循环才会停止。
示例:从1加到100
#!/bin/bashs=0 i=1while [ $i -le 100 ] do s=$(( $s+$i )) i=$(( $i+1 )) done echo "The sum is : $s"

2、until循环 until循环和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行村换程序。一旦循环条件成立,则终止循环。
示例:从1加到100
#!/bin/bashs=0 i=1until [ $i -gt 100 ] do s=$(( $s+$i )) i=$(( $i+1 )) done echo "The sum is : $s"

    推荐阅读