Shell(Bash)多命令顺序执行方法详解

在 Bash 中,如果需要让多条命令顺序执行,则有这样方法,如表 1 所示。

多命令顺序执行的方法

多命令执行符 格 式 作 用
; 命令1 ; 命令2 多条命令顺序执行,命令之间没有任何逻辑关系;如果使用";"连接多条命令,那么这些命令会一次执行,但是各命令之间没有任何逻辑关系,也就是说,不论哪条命令报错了,后面的命令仍会依次执行。
&& 命令1 && 命令2 如果命令1正确执行(?=0),则命令2才会执行;如果命令1执行不正确(?≠0),则命令2不会执行
II 命令1||命令2 如果命令1执行不正确(?≠0),则命令2才会执行;如果命令1正确执行(?=0),则命令2不会执行

举个例子:

[root@localhost ~]# ls ; date; cd /user; pwd
anaconda-ks.cfg err.log install.log install.log.syslog list.log out.log
sh

#ls命令正确执行
2013年 10月 21 日星期一 11:35:57 CST
#date命令正确执行
-bash: cd: /user:没有那个文件或目录
#cd命令报错,因为没有/user目录
/root
#虽然cd命令报错,但是并不影响pwd命令的执行

这就是";"的作用,不论前一条命令是否正确执行,都不影响后续命令的执行。再举一个例子:

[root@localhost ~]# date; dd if=/dev/zero of=/root/
testfile bs=1k count=100000;
date
#创建一个大小为100MB的文件,通过";"可以确定需要多长时间
2013 年 10月21日 星期一 11:41:54 CST
#第一条date命令执行
记录了 100000+0的读入
记录了 100000+0的写出
102400000字节(102 MB)已复制,2.09394 秒,48.9 MB/秒
#dd命令执行
2013 年 10月 21 日星期一11:41:56 CST #第二条date命令执行,可以判断dd命令用时2秒
[root@localhost ~]# ll -h testfile
-rw-r--r--. 1 root root 98M 10月21 11:41 testfile
#大小为100MB的testfile文件已经建立

当我们需要一次执行多条命令,而这些命令之间又没有可逻辑关系时,就可以使用";"来连接多条命令。
"&&"逻辑与
如果使用"&&"连接多条命令,那么这些命令之间就有逻辑关系了。只有第一条命令正确执行了,"&&"连接的第二条命令才会执行。那么,命令 2 是如何知道命令 1 正确执行了呢?

这就需要 Bash 的预定义变量 $? 的支持了,如果 $? 返回值是 0,则证明上一条命令正确执行;如果 $? 返回值是非 0,则证明上一条命令执行错误。

举个例子:
[root@localhost ~]# cp /root/test /tmp/test && rm -rf/ root/test && echo yes
cp:无法获取"/rooWest"的文件状态(stat):没有那个文件或目录
#复制/root/test到/tmp/test,如果命令成功则删除原文件,并打印"yes"
#因为/root/test文件不存在,所以第一条命令执行不正确,第二和第三条命令也都不执行
[root@localhost ~]# ls /tmp/
#在/tmp/目录中并没有建立test文件
[root@localhost ~]# touch /root/test
#建立/root/test文件
[root@localhost ~]# cp /root/test /tmp/test && rm -rf/ root/test && echo yes
yes
#第一条命令正确执行后,第二和第三条命令都正确执行
#所以打印了"yes"
[root@localhost ~]# ll /root/test
ls:无法访问/root/test:没有那个文件或目录
#源文件/root/test消失,因为第二条命令rm正确执行
[root@localhost ~]# ll /tmp/test
-rw-r--r--. 1 root root 010月 2113:16/tmp/test
#在/temp/目录中正确建立了test文件

再举一个例子,我们在安装源码包时,需要执行"./configure"、"make"和"make install"命令,但是在安装软件时又需要等待较长时间,那么是否可以利用"&&"同时执行这三条命令呢?当然可以了,命令如下:
[root@localhost ~]# cd httpd-2.2.9
[root@localhost httpd-2.2.9]# ./configure --prefix=/usr/ local/apache2 && make && make install

在这里,"\"代表一行命令没有输入结束,因为命令太长了,所以加入"\"字符,可以换行输入。利用"&&"就可以让这三条命令同时执行,然后我们就可以休息片刻,等待命令结束。

不过大家请思考一下,这里是否可以把"&&"替换为或"ll"呢?当然是不行的,这三条安装命令必须在前一条命令正确执行之后,才能执行后一条命令,如果把"&&"替换为";",则不管前命令是否正确执行,后一条命令都会执行。如果把"&&"替换为"||",则只有前一条命令执行错误,后一条命令才会执行。
"||"逻辑或
如果使用"||"连接多条命令,则只有前一条命令执行错误,后一条命令才能执行。举个例子:
[root@localhost ~]#ls /root/test || mkdir/root/tdir
ls:无法访问/root/test:没有那个文件或目录
#因为已经删除了/root/tesy文件,所以用ls命令查看时报错了
#因为第一条命令执行错误,所以第二条命令才正确执行
[root@localhost ~]#ll -d /root/tdir/
drwxr-xr-x. 2 root root 4096 10月21 13:39/root/tdir/
#把root/tdir/目录已经被建立了

"&&"和"||"非常有意思,如果我们想要判断某条命令是否正确执行,就可以这样来做:
[root@localhost ~]# 命令 && echo "yes" || echo "no"

例如:
[root@localhost ~]#ls /root/test && echo "yes"||echo "no"
ls:无法访问/root/test:没有那个文件或目录
no
#因为/root/test文件不存在,第一条命令报错,所以,第二条命令不能正确执行
#因为第二条命令执行错误,所以第三条命令正确执行,打印"no"
[root@localhost ~]# touch /root/test
[root@localhost ~]# ls /root/test && echo "yes" || echo "no"
/root/test
yes
#因为第一条命令正确执行,所以第二条命令正确执行,打印"yes"
#因为第二条命令正确执行,所以第三条命令执行错误


?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容