Linux Shell基础 多个命令中的分号(;)、与(&&) 、 或(||)
概述
在 Bash 中,如果需要让多条命令按顺序执行,则有这样方法,如表 1 所示。
| 多命令执行符 | 格 式 | 作 用 |
|---|---|---|
| ; | 命令1 ; 命令2 | 多条命令顺序执行,命令之间没有任何逻辑关系 |
| && | 命令1 && 命令2 | 如果命令1正确执行($?=0),则命令2才会执行 如果命令1执行不正确($?≠0),则命令2不会执行 |
| II | 命令1 || 命令2 | 如果命令1执行不正确($?≠0),则命令2才会执行 如果命令1正确执行($?=0),则命令2不会执行 |
";"多命令顺序执行
如果使用分号";"连接多条命令,那么这些命令会一次执行,但是各命令之间没有任何逻辑关系,不论哪条命令报错了,后面的命令仍会依次执行。例如:
cd /user命令出错不影响其他命令的执行,所以当我们需要一次执行多条命令,而这些命令之间又没有可逻辑关系时,就可以使用";"来连接多条命令。
[root@localhost ~]# ls ; date; cd /user; pwd
anaconda-ks.cfg
Tue Nov :: CST
-bash: cd: /user: No such file or directory
/root
"&&"逻辑与
如果使用"&&"连接多条命令,那么只有第一条命令正确执行了,"&&"连接的第二条命令才会执行。在Bash中通过预定义变量 $?来判断上一条命令是是否执行成功,如果 $? 返回值是 0,则证明上一条命令正确执行;如果 $? 返回值是非 0,则证明上一条命令执行错误。
例如: 复制/root/test到/tmp/test,如果命令成功则删除原文件,并打印"yes"。在执行过程中,因为没有test这个文件或目录,所以cp命令无法获取"/root/test"的文件状态(stat),,所以第一条命令执行不正确,第二和第三条命令也都不执行了。
[root@localhost ~]# cp /root/test /tmp/test && rm -rf/ root/test && echo yes
通常在安装源码包时,需要执行"./configure"、"make"和"make install"命令,但是在安装软件时又需要等待较长时间,则可以利用"&&"同时执行这三条命令,例如
[root@localhost ~]# cd httpd-2.2.
[root@localhost httpd-2.2.]# ./configure --prefix=/usr/ local/apache2 && make && make install
"||"逻辑或
如果使用"||"连接多条命令,则只有前一条命令执行错误,后一条命令才能执行。
例如:因为无法访问/root/test:没有那个文件或目录,所以用ls命令查看时报错了。因为第一条命令执行错误,所以第二条命令才正确执行
[root@localhost ~]#ls /root/test || mkdir/root/tdir
在脚本中如果我们想要判断某条命令是否正确执行,就可以使用下面命令:
因为/root/test文件不存在,第一条命令报错,则第二条命令不能正确执行,因为第二条命令执行错误,所以第三条命令正确执行,打印"no"
[root@localhost ~]#ls /root/test && echo "yes"||echo "no"
Linux Shell基础 多个命令中的分号(;)、与(&&) 、 或(||)的更多相关文章
- Linux Shell基础 Bash常见命令 history、alias命令以及常用快捷键
概述 shell中常见命令history 历史纪录命令:history 命令格式如下: [root@localhost ~]# history [选项] [历史命令保存文件] -c:清空历史命令: ...
- Linux Shell基础 Bash常见命令 echo命令
概述 shell中常见的命令echo. 输出命令:echo echo命令的输出内容如果没有特殊含义,则将原内容输出到屏幕:如果输出内容有特殊含义,则输出打印其含义. 命令格式如下: [root@loc ...
- linux shell for循环使用命令中读取到的值实例
#!/bin/bash file="states" for state in `cat $file` do echo "Visit beautiful $state&qu ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
- Linux shell基础知识(上)
Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...
- linux shell 基础 使用日志与心得
linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...
- linux shell 学习笔记--内部命令学习
.基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...
- Linux笔记(shell基础,历史命令,命令补全/别名,通配符,输出重定向)
一.shell 基础 shell是个命令解释器,提供用户和机器之间的交互 每个用户都可以拥有自己特定的shell centos7默认Shell为bash(Bourne Agin shell) 除了ba ...
- Linux Shell 基础知识(一)
1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...
随机推荐
- makefile变量定义应用到c语言
makefile是为组织程序工程的,其定义的宏怎样应用到c程序中呢? 我们知道Makefile中可定义变量或导出变量,make命令可定义变量:编译器(如gcc)可通过CFLAGS定义宏. 但如何才能使 ...
- Ecshop提示Only variables should be passed by reference in错误
Ecshop是个坑爹货,为什么tiandi会说它是个坑爹货呢,请看一下下面的官方的运行环境推荐: 服务器端运行环境推荐·php版本5.0以上5.3以下的版本(推荐使用5.2系列版本)·Mysql版本5 ...
- 【ASP.NET】——AdRotator控件
AdRotator控件即广告控件. 广告,是站点不可缺少的一部分.也是站点获取收益的最主要途径,但最初制作广告非常麻烦.asp.net就将该方法封装成了一个控件.为我们节省了非常多时间.这也是ASP. ...
- VC++通过API连接MySQL
1. 首先安装MySQL数据库server,本文安装的是mysql-installer-community-5.6.10.1.msi这个版本号.至于各个版本号有什么不同,不在这里说明. 例如以下的默 ...
- 视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(2)
聚类概念: 聚类:简单地说就是把相似的东西分到一组.同 Classification (分类)不同,分类应属于监督学习.而在聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到 ...
- Grafana----Table Panel
新的表面板非常灵活,既支持时间序列的多模式,也支持表.注释和原始JSON数据.它还提供日期格式化和值格式化和着色选项.要查看表板动作和测试不同的配置数据,查看台面板展示在grafana操场. Opti ...
- echarts系列之动态加载数据
1.echarts学习前言 最近接触到echarts,发现数据可视化真的是魅力无穷啊,各种变幻的曲线交错,以及‘曼妙’的动画效果真是让人如痴如醉! 下面就来一起欣赏她的美... “ ECharts是中 ...
- es6数组的一些函数方法使用
数组函数forEach().map().filter().find().every().some().reduce()等 数组函数(这里的回调函数中的index和arr都可以省略,回调函数后有参数是设 ...
- Linux运维-zabbix_agent最新版的yum安装
agentd端可以直接使用yum来进行安装 rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1. ...
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
一. 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权 ...