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

本文是根据慕课网tony老师的课程所写的笔记,老师讲的很好!感谢~http://www.imooc.com/u/279399/courses?sort=publish

目录

一、条件判断式

两种判断格式

1.按照文件类型进行判断

2.按照文件权限进行判断

3.两个文件之间进行比较

4.两个整数之间比较

5.字符串的判断

6.多重条件判断

二、单分支if语句

例子1:   判断登录用户是否是root

例子2:判断分区使用率

  三、双分支if语句

例子1:判断输入的字符串是否是目录

 例子2:判断Apache服务是否启动

   ps aux   查询运行的进程

四、多分支if语句

例子1:计算器

例子2:判断用户输入的是什么文件

五、case语句

例子:判断用户输入的是yes还是no

六、for循环

例子1:循环输出1-5

例子2:批量解压缩脚本 

例子3:从1加到100

例子4: 批量添加指定数量的用户

例子5:删除所有用户(除root)

七、while循环和until循环

例子1:从1加到100


一、条件判断式

两种判断格式

     

使用中括号 [ ] 注意:

(1)在中括号[]内每个组件都需要有空格键来分隔

(2)在中括号内的变量,最好用双括号括起来

(3)在中括号内的常量,最好都以单引号或双引号括起来

 

1.按照文件类型进行判断

执行  [ -e /root/ ] 是没有返回结果的,那么我们怎么知道是不是执行成功了呢?

(1)echo $?    值为0,则代表成功;非0,则代表失败

(2) [ -e /root/ ] && echo yes || echo no

例子:

2.按照文件权限进行判断

3.两个文件之间进行比较

例子:

    

4.两个整数之间比较

5.字符串的判断

6.多重条件判断

例子:
      

二、单分支if语句

        

         

例子1:   判断登录用户是否是root

#!/bin/bash
name=$(whoami)
if [ $name == "user1" ]
   then
   echo "The current user is user1"
fi

user=$(env|grep "USER"|cut -d "=" -f 2)
if [ $user == "root" ]
        then
        echo "The current user is root"
fi

例子2:判断分区使用率

#!/bin/bash
rate=$(df -h|grep "/dev/sda1"|awk '{printf $5}'|cut -d "%" -f 1)
if [ $rate -gt 50 ]
        then
        echo error
fi
                

  三、双分支if语句

         

例子1:判断输入的字符串是否是目录

#!/bin/bash
read -t 10 -p "请输入一个目录名:" dir
if [ -d "$dir" ]
    then
        echo "这是一个目录"
    else
        echo "这不是一个目录"
fi
                 

 例子2:判断Apache服务是否启动

   ps aux   查询运行的进程

#!/bin/bash
test=$(ps aux|grep httpd|grep -v grep) #截取httpd进程,并把结果赋予变量test
if [ -n "$test" ] #如果test的值不为空,则执行then中的命令
   then
       echo "httpd is ok"
   else
       echo "httpd is done"
       /etc/rc.d/init.d/httpd start   #启动httpd服务
fi

脚本名字坚决不能包含httpd!因为运行这个脚本就会出现名字包含httpd的一个进程,那么test就会有值,apache会被误判为启动。

四、多分支if语句

        

例子1:计算器

               

#!/bin/bash

#通过read接收操作数与运算符
read -t 30 -p "请输入第一个操作数: " num1
read -t 30 -p "请输入第二个操作数: " num2
read -t 30 -p "请输入运算符: " op

#如果都不为空
if [ -n "$num1" -a -n "$num2" -a -n "$op" ]
    then
    #判断num1 num2是否是数值:把num1中的数字替换成空格,如果结果为空,则表示num1是数字
    test1=$(echo $num1 | sed 's/[0-9]//g')
    test2=$(echo $num2 | sed 's/[0-9]//g')
    #如果num1 num2 是数字
    if [ -z "$test1" -a -z "$test2" ]
        then
        #判断运算符
        if [ "$op" == "+" ]
            then
            result=$(( $num1 + $num2))
        elif [ "$op" == "-" ]
            then
            result=$(( $num1 - $num2 ))
        elif [ "$op" == "*" ]
            then
            result=$(( $num1 * $num2 ))
        elif [ "$op" == "/" ]
            then
            result=$(( $num1 / $num2))
        else
            echo "请输入有效的运算符!"
            exit 10
        fi
    else
        echo "请输入有效的操作数"
        exit 11
    fi
fi
echo "$num1 $op $num2 = $result"

例子2:判断用户输入的是什么文件

#!/bin/bash

read -t 30 -p "请输入文件名: " name
if [ -z "$name" ]
    then
    echo "请输入有效的文件名"
    exit 1
elif [ ! -e "$name" ]
    then
    echo "该文件不存在"
    exit 2
elif [ -d "$name" ]
    then
    echo "这是一个目录"
elif [ -f "$name" ]
    then
    echo "这是一个普通文件"
else
    echo "这是一个其他文件"
fi

五、case语句

          

例子:判断用户输入的是yes还是no

#!/bin/bash

read -t 30 -p "请输入yes/no: " content
case "$content" in
    "yes")
         echo "您输入的是yes"
         ;;
    "no")
         echo "您输入的是no"
         ;;
     *)
         echo "error"
         ;;
esac

六、for循环

          

例子1:循环输出1-5

#!/bin/bash

for i in 1 2 3 4 5
        do
                echo "$i"
        done

例子2:批量解压缩脚本 

#!/bin/bash

cd /root/test
ls *.tar.gz > ls.log   #覆盖
ls *.tgz >> ls.log     #追加
for i in $( cat ls.log )
        do
                tar -zxf $i &>/dev/null  #把输出内容写入null
        done
rm -rf /lamp/ls.log                    

例子3:从1加到100

#!/bin/bash

s=0
for((i=1;i<=100;i=i+1))
        do
                s=$(($s+$i))
        done
echo $s

例子4: 批量添加指定数量的用户

#!/bin/bash

read -t 30 -p "请输入用户名: " user
read -t 30 -p "请输入个数: " num
read -t 30 -p "请输入密码: " pass

if [ -n "$user" -a -n "$num" -a -n "$pass" ]  #输入内容不为空
        then
                #num为数字
                y=$(echo $num|sed 's/[0-9]//g')
                if [ -z "$y" ]
                        then
                        for(( i=1;i<=$num;i=i+1))
                                do
                                /usr/sbin/useradd $user$i &> /dev/null
                                echo $pass|/usr/bin/passwd --stdin $user$i &> /dev/null
                                done
                fi
fi

例子5:删除所有用户(除root)

#!/bin/bash

user=$(  cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1 )
for i in $user
        do
                userdel -r $i
        done

七、while循环和until循环

           

例子1:从1加到100

#!/bin/bash

i=1
s=0

while [ $i -le 100 ]
        do
                s=$(($s+$i))
                i=$(($i+1))
        done
echo $s

          

#!/bin/bash

i=1
s=0
until [ $i -gt 100 ]
        do
                s=$(($s+$i))
                i=$(($i+1))
        done
echo $s

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值