abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢

a56d7259c803e105f0e92ab3b4cb6ade.png

指定一个默认脚本解释器

“#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。他指明了当我们没有指定解释器的时候默认的解释器。

为什么建议要在首行加上脚本默认解释器,因为有的操作系统的默认解释器不是sh或者bash,比如SUSE Linux默认的是csh,不能通过 ./ 的方式执行bash或sh脚本。

我们常用sh和bash,这两种是最受欢迎的shell,脚本中写一种即可。如:

#!/bin/bash

我们可以用下面的命令查看本机支持的解释器

$ cat /etc/shells/bin/sh/bin/bash/sbin/nologin/bin/tcsh/bin/csh/bin/dash

添加脚本描述信息

在脚本的前面建议加上脚本描述信息,这样方便查看脚本的信息和有利于脚本的维护工作。

一般的描述信息有:

  • 脚本的写作时间,作者,版权等
  • 脚本的用途
  • 脚本的注意事项
#!/bin/bash # ########################## # Version: 1.0 # Author: 快用大数据 # Create Date : 2021-01-01 # Name: start_all.sh # Description: This is a test shell script # ###########################  # Version: 1.1 # Author: 快用大数据  # Create Date : 2021-01-01 # Name: start_all.sh # Description: Add a function at the bottom # ###########################

脚本文件命名有规范

  • 脚本文件后缀用.sh,方便识别文件为shell脚本.
  • 脚本名称可以根据执行频率、用途、业务分类等在名称中加入些关键字,可以让人顾名思义,对脚本有个认知,如:

如启动脚本:start_all.sh stop_all.sh start_tomcat.sh stop_tomcat.sh

如业务用途脚本:ods_tablename_daliy.sh, dw_tablename_monthly.sh

变量命名有规范

变量的基本命名法则:

  • 统一用小写字母命名,如 DATE="20210101"
  • 由词组组成的变量名与函数名用下划线连将词组连接,如 start_date="20210101",function_name()
  • 过长的变量名可以用驼峰命名法命名

shell日志与回显

在开发过程中,写好业务代码的重要性不言而喻,同样的做好日志记录要非常重要,通过看日志,能够帮我们解决很多问题。

下面是一些日志要注意的信息:

1、 一些DEBUG级别的日志在脚本调试结束后需要关闭。

2、 日志输出要带时间

3、日志的输出推荐使用tee -a ${log_file}的方式,可以直接在main函数入口处添加日志输出

logfile="/var/log/debug.log"# define functionsfunction foo(){    echo "foo"}function oo(){    echo "oo"}# define main functionfunction main(){    echo "START DATE:" $(date +"%Y-%m-%d %H:%M:%S")    foo    oo    echo "FINISH DATE:" $(date +"%Y-%m-%d %H:%M:%S")}# invoke main functionmain|tee -a ${logfile}

标准输出重定向到log文件中,标准错误打印在屏幕上

$ sh start_all.sh > /data/logs/hadoop/debug.log

shell 错误输出重定向到标准输出

$ sh start_all.sh > /data/logs/hadoop/debug.log 2>&1

标准输出和标准错误重定向到不同log文件中

$ sh start_all.sh 1>log.log 2>err.log

使用$()给变量赋值

尽量使用$()将命令的结果赋给变量,而不是用反引号

input_dir=/home/hadoopfiles=$(ls ${input_dir})for file in ${files};do  echo ${file}done;

shell变量引用

很多人喜欢直接用$号加变量名引用该变量,建议使用${变量名}来引用变量,这样不容易出错和混淆。

date="20200101"logfile="/data/logs/hadoop/${date}/debug.log"echo ${logfile}

对比

date="20200101"logfile="/data/logs/hadoop/$date/debug.log"echo $logfile

shell脚本的执行方式

脚本的执行方式有好几种,但是还是建议用脚本解释器来执行脚本。

强烈推荐,用血的教训总结。我们的调度工具在升级后,会修改其工作目录下的所有文件的权限变成只有只读权限 (400),导致升级后所有用./执行的脚本全部不能执行。

$ sh start_all.sh

脚本的执行方式有以下几种:

1、工作目录执行

工作目录执行,指的是执行脚本时,先进入到脚本所在的目录(此时,称为工作目录),然后使用 ./脚本方式执行。前提是脚本有可执行的权限,如果没有会报没有权限错误。

$  ./start_all.sh在没有执行权限时要先加执行权限$ chmod +x ./start_all.sh$ ./start_all.sh

2、绝对路径执行

绝对路径中执行,指的是直接从根目录/到脚本目录的绝对路径。前提是脚本有可执行的权限,否则会报没有权限错误。

$ /home/hadoop/start_all.sh

3、sh执行

sh执行,指的是用脚本对应的sh或bash来接着脚本执行

$ sh start_all.sh

注意,若是以方法三的方式来执行,那么,可以不必事先设定shell脚本的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将start_all.sh作为参数传给sh(bash)命令来执行的。这时不是start_all.sh自己来执行,而是被人家调用执行,所以不要执行权限。

4、shell环境执行

shell环境执行,指的是在当前的shell环境中执行,可以使用 . 接脚本 或 source 接脚本

$ . start_all.sh或$ source start_all.sh

shell要有异常处理

要判断一段代码是否出现了异常,一个最基本的判断就是对他返回值的判断。在shell中,我们往往规定0为正常,一切非0返回值则为不正常。但往往我们在写shell脚本的时候,忽略对于返回值的判断。我们看一个很基本的shell程序。

$?这个常量代表的就是上一段shell的返回值,看下面的例子:

#!/bin/shcd /home/xxxx/if [ "$?"= "0" ]; then   rm -rf *else   echo "cannot change directory" 1>&2   exit 1fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity 是厘米还是米_1种“竹节参”,植株有40厘米高,能挂果,果子成熟后变红,珍贵...

很多顽强的野生植物会在竹林里生长,我们都知道价值比较高的七叶一枝花、金线莲等植物,就会生长在湿润的竹林里,它们喜欢湿度比较高的环境,所以在其它比较潮湿的地方也有。不过还有1种“竹节参”,它在竹林里也是常见的&…

JS中的三种弹框

1.alert();"弹框提示" 2.confirm();“确认信息”3.prompt();"输入信息"转载于:https://www.cnblogs.com/hr2014/p/3637692.html

python 窗口 网页 访问_同事用Python操控浏览器运行,引的妹子围观不止!

Python可以做的事情很多,小编也正在奋力挖掘中,今天给大家分享一下,如何用Python来控制浏览器的运行及操作!嗯 关于这个,大体有两种方式,且听小编一一列举:一、使用系统自带库 os这个方法的话任…

8g可用 安装内存16g_同样是16g内存,为啥都选两条8G,不选16G单条,这难道有啥讲究?...

相信大家在看一些大神的配置,或者蜗牛这种装机小编的配置的时候,发现内存经常是两条8G,而不是一条16G,很多小伙伴也发出了疑问,难道这里面有什么讲究?这就要扯到双通道,一般来说CPU或者主板的内存控制器有两…

Generate GUID using vbscript

在 .msi 中 的 Component table,查看 ComponentId 列,是一个16进制数的字符串, 用 InstallShield IDE 添加一个 component ,ComponentId 会自动生成,点击“Generate GUID” 会重新生成一个新的 ComponentId&#xff0c…

ps怎么对比原图快捷键_PS教程:P图前后,你还能认出这是同一个人吗?

编按:PS一直被誉为亚洲四大邪术之一,比如下图你敢相信这是同一个人吗?是不是隐隐约约回忆起了乔碧萝殿下的辉煌?但话说回来,谁不想看到最好的自己呢?今天我们就看看PS如何将人脱胎换骨,学会这招…

第一个被赋予公明身份的机器人_一文读懂机器人的“眼睛”

看过漫威电影的同学都知道,钢铁侠在装甲里一眨眼,就通过眼球追踪操控人机互动,集黑科技于一身的装备简直不要太炫酷。如今,我们再回头看钢铁侠的AI识别系统,不禁思考这背后的视觉技术。如何让机器人像人类一样获取视觉…

太和二中计算机考试,安徽省太和二中高二数学下册期末考试试题精选

安徽省太和二中高二数学下册期末考试试题精选一.选择题(50分)1.设 是两条不同的直线, 是两个不同的平面,下列命题中正确的是( D )A . 若 , , ,则 B.若 , , ,则C.若 , , ,则 D.若 , , ,则2. 若 ,则函数 的两个零点分别位于区间( A )A. 和 内 B. 和 内 C. 和 内 D. 和…

git获取本地版本号_Git使用小结

Git1.Git介绍Git是一个开源的分布式版本控制系统,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,Git可以使用本地创建仓库与网络仓库,解决了集中管理型版本控制软件存在的一些问题(CVS、VSS、SVN)。2.Gi…

sql server2008如何创建外键

原文地址:http://blog.csdn.net/zuozuo1245/article/details/8644115 以前创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只有主键没有外键时不行的。 建外键的前提是此外键必须是另外一个表的主键。建外键的…

字符集_第07期:有关 MySQL 字符集的 SQL 语句

本篇为理清字符集的续篇(上一篇:第06期:梳理 MySQL 字符集的相关概念),重点讲述字符集涉及到的 sql 语句用法。一、character introducer翻译过来就是字符引导。也就是针对字符串,显式的给定一个字符编码和排序规则,不…

怎么调整计算机显示屏,电脑显示器怎样调大屏幕

电脑显示器怎样调大屏幕你们知道怎么调整电脑显示器的屏幕吗?下面是应届毕业生小编带来的关于电脑显示器怎样调大屏幕的内容,欢迎阅读!电脑显示器怎样调大屏幕?以前的xp系统是在桌面点击右键然后选择属性,在属性里设置分辨率的。而win7则有点不同&…

win7打开计算机死机,win7系统进入桌面总是死机或者卡死怎么办

??最近有位深度技术win7旗舰版用户的电脑总是在进入桌面的时候莫名其妙的死机或者卡死,遇到这种情况我们应该怎么办呢?我们可以通重启资源管理器来解决屏幕卡死的问题,首先我们要打开任务管理器,下面由小编来跟大家介绍一下win7…

以太网例程_开关量转以太网的应用

由于工业以太网的快速冗余自愈能力以及实时性方面问题的逐步解决,工业以太网技术正在逐步深入至工业控制网络的现场设备层应用,即直接基于工业以太网通信来控制现场设备的运行,利用开关量控制模块提供的以太网转开关量功能,计算机…

CPU缓存越大计算机的性能越好,CPU缓存真的越大越好?小心你的钱包

除了内存和硬盘,电脑还有一种超快速的存储设备,就是CPU缓存当你想到你电脑当中的存储设备时,你可能想到的是DDR内存、显卡上的显存、或者更有可能只是机械硬盘和SSD。但其实还有一种超快速的存储设备,对我们习以为常的、现代电脑的…

jvm 参数-server_JVM选项:-client vs -server

jvm 参数-server您是否曾经在运行Java应用程序时想知道-client或-server开关是什么? 例如: javaw.exe -client com.blogspot.sdoulger.LoopTest也显示在java.exe的“帮助”中,例如,其中的选项包括: -client选择“客户…

小米3显示sim卡无服务器,小米手机无服务怎么解决

原标题:小米手机无服务怎么解决方法一:1.第一步是检查电话卡是否正确插入卡槽中。这种情况也会发生很长时间。如果未正确插入卡插槽,则将导致无法维修。2.要注意的第二件事是,如果所购买的小米手机是电信版的,那么插入…

cad服务器手动改自动,几百块就能手动改自动? 怎样省钱换来方便

现在市场上可以手动改自动挡是真的吗?今日市场上出现的手动挡升级自动挡的技术,不少网友询问这个手动挡改自动挡技术,手动改自动挡真的吗?记者带着疑问进行各方面搜索和调查。经过调查,记者终于了解到市场上真的有这种技术,可以…

opencv检测相交点_OpenCV特征点检测------ORB特征

ORB是是ORiented Brief的简称。ORB的描述在下面文章中:Ethan Rublee and Vincent Rabaud and Kurt Konolige and Gary Bradski, ORB: an efcient alternative to SIFT or SURF, ICCV 2011没有加上链接是因为作者确实还没有放出论文,不过OpenCV2.3RC中已经…

服务器物理部署拓扑图,【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(五)-物理服务器路由方案及配置...

5.1 本节目标理解物理机的业务ip之间的通信过程;了解如何在leaf交换机上配置业务ip的静态路由;了解如何在物理机上配置业务ip及其他相关配置项;5.2 拓扑结构本节拓扑结构与上节相比没有变化,如下图:5.3 物理机业务网络…