Linux Shell脚本多命令执行逻辑的示例详解

目录
  • 简介
  • 一、分号
  • 二、&&
  • 三、||
  • 案例剖析

简介

Linux 中可以使用分号";“、双and号”&&“和双竖线”||"来连接多个命令。根据场景的不同适当的使用合适的符号。

历史攻略

python:执行dos命令、Linux命令

命令连接符解析:

仅连接,表示运行先后,无逻辑关系:分号";",如command1 ; command2

逻辑与关系:&&,如command1 && command2

逻辑或关系:&&,如command1 && command2

一、分号

命令之间没有逻辑关系。分号连接的命令会按照顺序从前向后依次执行,但分号两端的命令之间没有任何逻辑关系,所有写出来的命令最终都会被执行,即使分号前面的命令出错也不影响后面的命令。

二、&&

逻辑与。&&连接的命令会按照顺序从前向后执行,但只有当command1正确执行才执行command2,如果command1不正确执行,则不执行command2。在bash中,通过预定义变量“? ”来判断命令是否正确执行,如果 " ?”来判断命令是否正确执行,如果"?”来判断命令是否正确执行,如果"?"的值为0则表示前一条命令正确执行,其他任意值都表示不正确执行。

三、||

逻辑或。||连接的命令会按照顺序从前向后执行,但只有当command1不正确执行才执行command2,command1正确执行则不会执行command2。||和&&都是短路符号,符号左右的命令之间具有逻辑关系。

案例剖析

# -*- coding: utf-8 -*-
# time: 2022/10/4 21:47
# file: cmd_1_success.py
# 公众号: 玩转测试开发

def run_success_1():
    print("cmd_1 start run")
    print("cmd_1 do something")
    print("cmd_1 end")

if __name__ == '__main__':
    run_success_1()

cmd1_fail = python cmd_1_fail.py

# -*- coding: utf-8 -*-
# time: 2022/10/4 21:47
# file: cmd_1_fail.py
# 公众号: 玩转测试开发

def run_fail_1():
    print("cmd_1 start run")
    raise BaseException
    print("cmd_1 end")

if __name__ == '__main__':
    run_fail_1()

cmd2_success = python cmd_2_success.py

# -*- coding: utf-8 -*-
# time: 2022/10/4 21:49
# file: cmd_2_success.py

def run_success_2():
    print("cmd_2 start run")
    print("cmd_2 do something")
    print("cmd_2 end")

if __name__ == '__main__':
    run_success_2()

cmd2_fail = python cmd_2_fail.py

# -*- coding: utf-8 -*-
# time: 2022/10/4 21:51
# file: cmd_2_fail.py
# 公众号: 玩转测试开发

def run_fail_2():
    print("cmd_2 start run")
    raise BaseException
    print("cmd_2 end")

if __name__ == '__main__':
    run_fail_2()

即:存在4种基本情况

cmd_1_success、cmd_2_success
cmd_1_fail、cmd_2_success
cmd_1_success、cmd_2_fail
cmd_1_fail、cmd_2_fail

test.sh

#bin/bash
python cmd_1_success; python cmd_2_success
python cmd_1_success && python cmd_2_success
python cmd_1_success || python cmd_2_success

演示分号的四类基础情况:

# 第一种情况:cmd_1_success; cmd_2_success
cmd_1 start run
cmd_1 do something
cmd_1 end
cmd_2 start run
cmd_2 do something
cmd_2 end
# 第二种情况:cmd_1_fail; cmd_2_success
cmd_1 start run
Traceback (most recent call last):
  File "cmd_1_fail.py", line 14, in <module>
    run_fail_1()
  File "cmd_1_fail.py", line 9, in run_fail_1
    raise BaseException
BaseException
cmd_2 start run
cmd_2 do something
cmd_2 end

# 第三种情况:cmd_1_success; cmd_2_fail
cmd_1 start run
cmd_1 do something
cmd_1 end
cmd_2 start run
Traceback (most recent call last):
  File "cmd_2_fail.py", line 14, in <module>
    run_fail_2()
  File "cmd_2_fail.py", line 9, in run_fail_2
    raise BaseException
BaseException

# 第四种情况:cmd_1_fail; cmd_2_fail
cmd_1 start run
Traceback (most recent call last):
  File "cmd_1_fail.py", line 14, in <module>
    run_fail_1()
  File "cmd_1_fail.py", line 9, in run_fail_1
    raise BaseException
BaseException
cmd_2 start run
Traceback (most recent call last):
  File "cmd_2_fail.py", line 14, in <module>
    run_fail_2()
  File "cmd_2_fail.py", line 9, in run_fail_2
    raise BaseException
BaseException

演示 && 的四类基本情况:

# 第一种情况:cmd_1_success && cmd_2_success
cmd_1 start run
cmd_1 do something
cmd_1 end
cmd_2 start run
cmd_2 do something
cmd_2 end

# 第二种情况:cmd_1_fail && cmd_2_success
cmd_1 start run
Traceback (most recent call last):
  File "cmd_1_fail.py", line 14, in <module>
    run_fail_1()
  File "cmd_1_fail.py", line 9, in run_fail_1
    raise BaseException
BaseException

# 第三种情况:cmd_1_success && cmd_2_fail
cmd_1 start run
cmd_1 do something
cmd_1 end
cmd_2 start run
Traceback (most recent call last):
  File "cmd_2_fail.py", line 14, in <module>
    run_fail_2()
  File "cmd_2_fail.py", line 9, in run_fail_2
    raise BaseException
BaseException

# 第四种情况:cmd_1_fail && cmd_2_fail
cmd_1 start run
Traceback (most recent call last):
  File "cmd_1_fail.py", line 14, in <module>
    run_fail_1()
  File "cmd_1_fail.py", line 9, in run_fail_1
    raise BaseException
BaseException

演示 || 的四类基本情况:

# 第一种情况:cmd_1_success || cmd_2_success
cmd_1 start run
cmd_1 do something
cmd_1 end

# 第二种情况:cmd_1_fail || cmd_2_success
cmd_1 start run
Traceback (most recent call last):
  File "cmd_1_fail.py", line 14, in <module>
    run_fail_1()
  File "cmd_1_fail.py", line 9, in run_fail_1
    raise BaseException
BaseException
cmd_2 start run
cmd_2 do something
cmd_2 end

# 第三种情况:cmd_1_success || cmd_2_fail
cmd_1 start run
cmd_1 do something
cmd_1 end

# 第四种情况:cmd_1_fail || cmd_2_fail
cmd_1 start run
Traceback (most recent call last):
  File "cmd_1_fail.py", line 14, in <module>
    run_fail_1()
  File "cmd_1_fail.py", line 9, in run_fail_1
    raise BaseException
BaseException
cmd_2 start run
Traceback (most recent call last):
  File "cmd_2_fail.py", line 14, in <module>
    run_fail_2()
  File "cmd_2_fail.py", line 9, in run_fail_2
    raise BaseException
BaseException

即:分号前后运行无逻辑关系;&&后面的命令需要前面的命令正常执行;

||后面的命令需要前面的命令运行失败才执行。

到此这篇关于Linux Shell脚本多命令执行逻辑的示例详解的文章就介绍到这了,更多相关Shell脚本多命令执行逻辑内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Shell脚本中多命令逻辑执行顺序的方法详解

    Linux中可以使用分号";".双and号"&&"和双竖线"||"来连接多个命令.单"&"符号也算命令连接符号,只不过它是将其前面的命令放入后台执行,所以可以变相地实现命令并行执行. 1.分号";" command1 ; command2 命令之间没有逻辑关系.分号连接的命令会按照顺序从前向后依次执行,但分号两端的命令之间没有任何逻辑关系,所有写出来的命令最终都会被执行,即使分号前面

  • Shell脚本中使用getopts处理多命令行选项

    在Linux系统中,许多命令都提供了选项,使用不同的选项就会得到不通的执行结果 例如:ls命令,ls命令提供了多个选项:-l.-a.-A.-h.-i等等,每个选项具有不同的功能,我们自己写脚本时也可以定义选项,提示用户如何使用,本文介绍如何使用getopts命令来处理命令选项. 1.getopts命令的如何使用: 用getopts命令获取到脚本选项后,getopts会将获取到的选项所对应的参数(选项对应的参数,并不是选项本身,有的命令选项后面是需要跟一个参数的,例如tcpdump 的-w选项,后

  • Linux Shell脚本多命令执行逻辑的示例详解

    目录 简介 一.分号 二.&& 三.|| 案例剖析 简介 Linux 中可以使用分号";“.双and号”&&“和双竖线”||"来连接多个命令.根据场景的不同适当的使用合适的符号. 历史攻略 python:执行dos命令.Linux命令 命令连接符解析: 仅连接,表示运行先后,无逻辑关系:分号";",如command1 ; command2 逻辑与关系:&&,如command1 && command2 逻

  • Shell脚本实现监测文件变化的示例详解

    目录 代码 使用方法 我最近在使用Linux的过程中遇到,遇到这样一个需求:监测某个文件的创建,变动.删除,并记录文件的每一个版本.我在网上没有找到合适的脚本或工具,然后我就自己写了一个shell脚本实现这个需求. 代码 完整的shell脚本如下,可以直接使用.本示例中,脚本文件名为fileTracer.sh. #!/bin/bash # ------------------------------------------ # Filename : fileTracer.sh # Version

  • shell脚本无密码登录 expect的使用方法详解

    shell脚本无密码登录 expect的使用方法详解 今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了. 从网上查到使用expect可以,简单研究了一下,效果不错. 因为我的操作系统没有安装expect,所以直接"yum -y install expect",你可以根据你的操作系统安装expect,或者源码编译. 安装好之后就可以使用了,这里有几种方法: 一.单独写一个脚本 如 auto_scp

  • Linux使用iptables实现屏蔽ip地址的示例详解

    目录 一.iptables命令介绍 二.iptables见命令 1. iptables命令help文档 2. 常用的iptables命令 三.举例说明iptables命令 一.iptables命令介绍 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,在安装系统的时候就已经自带:iptables是Linux防火墙的管理工具而已,位于/sbin/iptables.真正实现防火墙功能的是 netf

  • shell脚本5种执行方式及脚本不同的执行方法和区别详解

    目录 前言 概述 正题 一.方式1绝对路径和方式2相对路径,可以归纳为同一种方法 二.方式3使用 sh/bash命令来执行 三.方式4使用 . (空格)脚本名称来执行 四.方式5使用 source 来执行(主要用于生效配置文件) 区别 1.关于执行权限 2.关于是否开启子shell线程 总结 前言 shell脚本是一种脚本语言,他不需要编译,而是直接通过解释器,将脚本作为解释器程序的参数运行的. 我们通过编写vim test.sh,然后用不同方法执行名为test.sh的脚本. #!/bin/ba

  • Linux中利用grep命令如何检索文件内容详解

    前言 Linux系统中搜索.查找文件中的内容,一般最常用的是grep命令,另外还有egrep命令,同时vi命令也支持文件内容检索.下面来一起看看Linux利用grep命令检索文件内容的详细介绍. 方法如下: 1.搜索某个文件里面是否包含字符串 命令格式:grep "被查找的字符串" filename1 例如: grep "0101034175" /data/transaction.20170118.log 2.在多个文件中检索某个字符串 命令格式: grep &qu

  • Java的jps命令简介及使用示例详解

    目录 jps命令简介 jps命令参数 jps命令示例 结尾 jps命令简介 jps(Java Virtual Machine Process Status Tool)是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,它可以显示Java虚拟机进程的执行主类(Main Class,main()函数所在的类)名称.本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)等信息.另外,jps命令只能显示它有访问权限的Java进程的信息.

  • linux shell 字符串操作(长度,查找,替换)详解

    在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那

  • 从迷你todo 命令行入门Rust示例详解

    目录 一个迷你 todo 应用 需要安装的依赖 文件目录组织 主文件 读取文件 状态处理工厂函数 Trait(特征) Create trait Get trait Delete trait Edit trait 导出 trait 为 struct 实现 trait Pending Done 导出 struct Process 输入处理 最后 一个迷你 todo 应用 该文章将使用 Rust 从零去做一个入门级别的 TODO 命令行应用 你将学会什么? 基本的命令行操作 文件读写和文件结构组织 我

随机推荐