初学linux shell脚本之二----------------结构化命令(if)

本文详细介绍了Shell脚本中的结构化命令,包括if-then、if-then-else语句,嵌套if语句,test命令及其各种条件判断,如数值、字符串和文件比较。同时,还介绍了case命令的使用,以及如何使用布尔逻辑和双圆括号进行更复杂的条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构化命令

在上一篇我们写了第一个shell脚本中,shell命令都是按照出现的顺序来处理shell脚本中的每个命令。虽然在一些顺序的操作来说这已经能够实现了,但是我们要想把所有的命令都按照正确的顺序去执行。比如能够像我们写一些程序代码一样有逻辑控制,那么我们就使用结构化命令去实现shell脚本中的逻辑控制

if-then语句

  1. if-then语句的格式:
    if command
    then
       commands
    fi

     

  2. if-then在我们学编程语言用的if语句相似,但是却不同,编程语言中的if语句后面是判断语句是ture或false,而if-then后面是跟命令,如果if后面的命令执行了那么then部分的命令才会执行。

  3. 例子:if后面的脚本能运行

    if date
    then
      echo "it worked "
    
    fi
    

      结果是:

    2018年 10月 28日 星期日 21:55:15 CST
    it worked

    这里的脚本创建和之前一样

  4. 例子:if后面的命令不能允许

    #!/bin/bash 
    #testing a bad command
    
    
    if asdfg
    then
       echo "it did not work"
    fi
    echo "we are outside of the if statement"
    

     结果是:

    ./test7: line 5: asdfg: command not found
    we are outside of the if statement

if-then-else 语句

  1. if-then-else 语句就像我们编程语言中的if-else,
    if command
    then
       commands
    else
       commands
    fi
    

     if后面的命令不能运行那么就跳到else部分的去执行命令

  2. 例子:

    #!/bin/bash 
    # testing the else section
    
    testuser=baduser
    if grep $testuser /etc/passwd
    then
       echo The files for user $testuser are:
       ls -a /home/$testuser/.b*
    else
       echo "The user name $testuser does not exist on this system "
    fi
    

     结果:

    The user name baduser does not exist on this system

    这里由于我的用户名不是baduser所以if后面的命令返回的不是0状态码,命令成功工作就会返回一个0状态码

嵌套的if语句

  1. 当我们需要检查脚本中的多种条件时,我们一般使用嵌套if语句。其实就是和我们编程语言中的嵌套if语句的思想和用法是一样的
  2. 嵌套if语句的格式:
    if command1
    then 
        commands
    if command2
    then
        commands
    if command3
    then
        commands
    .
    .
    .
    .
    .
    fi

    例子这里就不举例了,因为有编程语言基础的人都会理解怎么区使用了。

test 命令

在上面的if-then语句中,if成立与后面的命令是否正确工作即是返回u的状态码是0。这里的test命令提供了不同的测试条件途径。

  1. test命令的原理:test命令中的条件成立就返回0,否则就返回1
  2. if-then语句加上test命令 = 我们编程语言中的if语句
  • 命令格式:
    if test condition
    then
        commands
    fi
    

    if [condition]
    then
        commands
    fi
    

    test命令可以判断的3类:

  • 数值比较

  • 字符串比较

  • 文件比较

 

 数值比较

比较描述
n1 -eq n2检查n1是否与n2相等
n1 -ge n2检查n1是否大于或等于n2
n1 -gt n2检查n1是否大于n2
n1 -le n2检查n1是否小于或等于n2
n1 -lt n2检查n1是否小于n2
n1 -ne n2检查n1是否不等于n2

字符串比较

比较描述
str1 = str2

检查str1是否和str2相同

str1 != str2检查str1是否和str2不相同
str1 < str2检查str1是否比str2小(字符串的长度大小)
str1 >str2检查str1是否比str2大(字符串的长度大小)
-n str1检查str1的长度是否非0
-z str1

检查str1的长度是否为0

文件比较

比较描述
-d fie检查file是否存在并是一个目录
-e file检查file是否存在
-f file检查file是否存在并是一个文件
-r file检查file是否存在并可读
-s file检查file是否存在并非空
-w file检查file是否存在并可写
-x file检查file是否存在并可执行
-O file检查file是否存在并属于当前用户所有
-G file检查file是组否存在并且默认组与当前用户相同
file1 -nt file2检查file1是否比file2更新
file1 -ot file2检查file1是否比file2旧

符合条件

if-then语句允许使用布尔逻辑来组成测试:

  • [  conditon1 ] && [ condition2 ]
  • [ condition1 ] || [ condition2 ]

if-then 的高级特性

  1. 使用双圆括号:在使用双圆括号里面的数值计算与比较与编程语言中的一切常用的数值计算一样。
  2. 命令格式:
    ((expression))

     

  3. 与if-then使用,命令格式:

    #!/bin/bash
    
    # using double parenthesis
    
    
    var1 = 28
    
    if (( $var1*2 <100))
    then
        echo if be running var1= $var1
    else
        echo var1 < 100 var1= $var1
    fi

     

 case 命令

如果我们要使用很多的判断语句用if-th就很罗嗦,如果使用case命令就显得很简洁。case命令与我们常用的编程语言中的case语句用法一样,不过有所差别。

  1. case命令格式:
    case variable in 
    pattern1 | pattern2 )
        commands1;;
    pattern2 )
        commands2;;
    pattern3 )
        commands3;;
    
    .
    .
    .
    .
    * )
        commands;;
    esac

     就是判断变量与不同的模式比较,上面中的*是所有的条件都不满足才执行后面的命令

  2. case命令与if-then命令比较:

    # if命令
    
    
    #!/bin/bash
    # using if cammand testing 
    
    if [ $UER = "denis" ]
    then
        echo "welcome $UER "
        echo "Please enjoy your visit “
    if [$UER = "barbared" ]
    then 
        echo "welcome $UER "
        echo "Please enjoy your visit “
    
    if [$UER = "testing" ]
    then 
        echo "Special testing account  “
    if [$UER = "jessica" ]
    then 
        echo "Do not forget to logout when you're done “
    else
        echo "Sorry, you are not allowed here"
    fi
    
    
    

     

    # case 命令
    
    
    #!/bin/bash
    
    # using the case command
    
    case $UER in
    rich | barbara )
            echo "welconme, $UER"
            echo "Please enjoy your visit :";;
    testing )
            echo "Special testing account";;
    jessica )
            echo "Do not forget to log off when you're done";;
    * )
            echo "Sorry, you are not allowed here ";;
    esac
    

     显而易见,他们的思想与我们常用的编程语言中的if 与case语句用法一样只是表达有点不差别而以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值