• Shell入门教程:流程控制(1)命令的结束状态


    在Bash Shell中,流程控制命令有2大类:“条件”、“循环”。属于“条件”的有:if、case;属于“循环”的有:for、while、until;命令 select 既属于“条件”,也属于“循环”。不管是哪一种,均需进行条件测试,再根据测试结果,决定程序流程进行的方向。

    以下逐一说明这些命令的用法。

    第一节:命令的结束状态

    Bash Shell Script 可由许多命令组成。每一个命令执行后,都会传回一个结束状态值,如果执行成功,传回0,如果执行失败,则传回非0值。执行失败,也分成许多状况,例如:

    某个命令执行失败,产生严重的信号n,则其结束状态传回值为 128+n。如果执行命令时,发现该命令不存在,则传回值为 127。命令存在但没有执行权,则传回值 126.

    Bash的内置变量 $?,用来存储每个命令执行后传回的状态值。如下述举例,执行test.sh时,Bash在搜寻路径中找不到这个Script,结束状态变量 $? 的值为 127;执行 ./test.sh时,由于Script没有执行权,$? 的值为 126。

    [root@localhost ~]# test.sh
    -bash: test.sh: 没有那个文件或目录
    [root@localhost ~]# echo $?
    127
    [root@localhost ~]# ./test.sh
    -bash: ./test.sh: 权限不够
    [root@localhost ~]# echo $?
    126
    [root@localhost ~]#

    在Bash的流程控制中,需进行条件测试,就是以结束状态作为真假的判断依据:

    如果结束状态为0,则判断为真;反之,如果结束状态为非0值,则判断为假。

    第二节:if条件判断

    先来看一个简单的例子:

    if grep -q ^jianbao /etc/passwd; then
    	echo 'jianbao这个账号存在'
    fi

    #格式一

    if 条件测试; then
    	命令区域
    fi

    #格式二

    if 条件测试; then
    	命令区域1
    else
    	命令区域2
    fi

    #格式三(完整语法)

    if 条件测试1; then
    	命令区域1
    elif 条件测试2; then
    	命令区域2
    else
    	命令区域3
    fi

    举例一:

    if [ -d /root/tmp ]; then
    	echo '/root/tmp目录存在'
    else
    	echo '/root/tmp目录不存在'
    fi

    举例二:

    #!/bin/bash
    
    # 数学的三一律
    
    declare -i a b
    a=$1;b=$2
    
    if ((a<b)); then
    	echo "$a小于 $b"
    elif ((a>b)); then
    	echo "$a大于 $b"
    else
    	echo "$a等于 -$b"
    fi

    (())是Bash的复合命令(Compound command),内置算术。((算术)) 可对算式的运算结果传回真假值:

    如果算术的结果为非0,则结束状态传回0,表示该算式为真;如果算式的结果为0,则结束状态传回1,表示该算式为假。它的意义同于:

    let "算术"

    举例三:

    #!/bin/bash
    
    # 数学的三一律
    
    declare -i a b
    a=$1;b=$2
    
    if let "a<b"; then
    	echo "$a小于 $b"
    elif let "a>b"; then
    	echo "$a大于 $b"
    else
    	echo "$a等于 -$b"
    fi
  • 相关阅读:
    loushang框架的开发中关于BSP的使用,将写好的功能模块部署到主页界面结构上
    浪潮“楼上”开发平台简介
    New博客园新的开始!
    python相关
    day20 函数闭包与装饰器
    计算机基础
    day19 生成器函数
    简历
    day18 迭代器
    数据库基础(代码)
  • 原文地址:https://www.cnblogs.com/52php/p/5669923.html
Copyright © 2020-2023  润新知