zoukankan      html  css  js  c++  java
  • 结构化命令

      shell按照出现的次序来处理shell脚本中的每个单独命令。

    if-then语句

    if command
    then
        commands
    fi

    bash shell的if语句会运行if行定义的那个命令。如果该命令的退出状态码是0,位于then部分的命令就会被执行。

    如果该命令的退出状态码是其他什么值,那then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。

    #!/bin/bash
    if asdfg
    then
        echo "it did not worked"
    fi
    echo "we are outside of the if statement"

    在then部分,你可以用多个命令。

    #!/bin/bash
    testuser=liuxj
    if grep $testuser /etc/passwd
    #if asdfg
    then
        #echo "it did not worked"
        echo The bash files for user $testuser are:
        ls -a /home/$testuser/.b*
    fi

    if-then-else语句

    if command
    then
        commands
    else
        commands
    fi

    当if语句中的命令返回退出状态码0时,then部分中的命令会被执行,当if语句中的命令返回非零退出状态码时,bash shell会执行else部分中的命令。

    嵌套if

    elif会通过另一个if-then语句来延续else部分:

    if command1
    then
        commands
    elif    command2
    then
        more commands
    fi

    elif语句行提供了另外一个要测试的命令,类似于原始的if语句。如果elif后命令的退出状态码是0,则bash会执行第二个then语句部分的命令。

    注意:你可以将多个elif语句串起来,形成一个大的if-then-elif嵌套组合。

    if command1
    then
        command set 1
    elif command2
    then
        command set 2
    elif command3
    then
        command set 3
    elif command4
    then
        command    set 4
    fi

    test命令

    test命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0,就会执行then后面的命令。否则if-then语句就会失效。

    if test [condition]
    then
        commands
    fi

    bash shell提供另一种if-then语句中的声明test命令的方法:

    if [condition]
    then
        commands
    fi

    注意:必须在左括号右侧和右括号左侧各加一个空格,否则会报错。

    bash shell能处理的数仅有整数

    gedit test &:打开编辑窗口,可以不关闭就可以调试。

    & 放在启动参数后面表示设置此进程为后台进程

    默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。

    tianfang > run &
        [1] 11319
    tianfang >

    进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,以前面的输出为[1] 11319例:[1]表示job ID是1,11319表示进程ID是11319。切换到后台的进程,仍然可以用ps命令查看。

    &&

    shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0的数,返回值在0-255间),表示执行失败。

    有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。

    语法格式如下:

    command1 && command2 [&& command3 ...] 
    1 命令之间使用 && 连接,实现 逻辑与的功能。 
    2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。 
    3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。 --短路的功能
     
    command1 || command2 [|| command3 ...] 
    1 命令之间使用 || 连接,实现 逻辑或的功能。 
    2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。 
    3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。 --直到返回真的地方停止执行。
  • 相关阅读:
    ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件
    在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
    如何远程关闭一个ASP.NET Core应用?
    ASP.NET Core应用中如何记录和查看日志
    ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
    ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起
    学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
    学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
    框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?
    学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口——Startup
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/6044550.html
Copyright © 2011-2022 走看看