为什么近期的Shell命令每行都有分号?

王志勇 发表于 2019年09月26日 10:02

单独一个Shell命令,分号可有可无。多个Shell命令可以放在一行里,多个命令之间用分号隔开,一次复制,然后回车。近期发的Shell命令,很多单独的一个命令,也有分号。

这是因为这些命令是从我编写的LAMP/LNMP一键Shell命令里复制的,由于时间的关系,来不及一一删除分号。这个一键命令是经过大量调试而写成的成品。它目前分为3大部分(3个文件),对外链接、主程序(生成Ubuntu/Debian/CentOS不同系统版本相应的一键Shell命令,由PHP+Shell完成)、后期优化程序。

其中,主程序的作用主要是根据不同系统版本,生成相应的一键Shell命令。多个命令之间,是由于我个人的编程习惯,关联度特别高的部分,喜欢把它们放在一片区域里、或者放在一行。

关联度不太高的部分,则单独一行。例如重启nginx、fpm可以写成这样:
service nginx restart
service php-fpm restart

也可以写成这样:
service nginx restart; service php-fpm restart;

两种写法在视觉上,其实区别很小。多数的编程者,更喜欢第1种写法,因为看起来似乎更易读。
但是,如果习惯了第2种的写法,和第1种写法看起来,是没有区别的。这好比诗歌、散文的格式区别,诗歌是一个简短的句子就回行,散文则是一段一段的。

第2种编程写法的优点
因为在实际的项目中,程序语句的量是多到无法估计的,十分庞大。这种情况下,程序并不是用来一一阅读,而是用于分析。如果把关联度高的语句放在一起,形成一个语句的小区域,其实更容易分析,这样的程序不是一句一句地读,而是一片一片地读。

如果用于分析PHP的花括号的起始位置,或者Shell程序的if、fi的起始位置,我写了一个分析的工具,有了这个工具,每天至少为我节省30-60分钟,瞬间就能查到,如果没有这个工具,每次我人力分析花括号的起始位置至少得3-15分钟。

本文的重点
由于这些一键Shell命令是由Shell+PHP,或者PHP+Shell生成的,PHP和Shell互相调用。为了防止某种环境下,回行被删除,会出现这种情况:
service nginx restartservice php-fpm restart

或者出现这种情况:
service nginx restart service php-fpm restart

上述2个命令都不执行。

所以,就在所有的Shell命令之后加个分号,防止出错。自动生成的命令会是这样的:
service nginx restart;
service php-fpm restart;

或者这样:
service nginx restart; service php-fpm restart;

或者这样:
service nginx restart;service php-fpm restart;

上述3种写法都不会出错。

2条评论:
1   执迷不悟 2019-09-26 11:03
我反正是习惯了躺在大佬们的成果上沾沾自喜,从来不考虑为什么这样为什么那样,能用就行哈哈

自由勇 2019-09-26 11:07
嗯,社会分工,互相享用别人的成果。

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写