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,一经查实,立即删除!

相关文章

html比赛项目,趣味运动会最新个人比赛项目

趣味运动会中也有很多个人能参加的趣味比赛项目。今天小编就与大家分享趣味运动会个人赛项目,仅供大家参考!趣味运动会个人赛项目一:《懒惰的自行车》在前面车筐上放标志规则:自行车在规定的跑道上(约50厘米宽,15米长的跑道)行驶&…

CentOS 6.3 下编译Nginx(笔记整理)

1. 安装关联程序 [rootlocalhost opt]# yum search gcc [rootlocalhost opt]# yum install gcc-c [rootlocalhost opt]# yum install make [rootlocalhost opt]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel2. 下载Nginx [rootlocalhost files]# ta…

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

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

计算机主板diy,Pc-硬件-装机DIY-〖菜鸟入门篇〗电脑主板图解

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼主板(线路板)是如何制造出来的呢?PCB的制造过程由玻璃环氧树脂(Glass Epoxy)或类似材质制成的PCB“基板”开始。制作的第一步是光绘出零件间联机的布线,其方法是采用负片转印(Subtractive transfer)的方式将…

JS中的三种弹框

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

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

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

获取打开文件的路径和文件名

System.IO.Path.GetFileName(filename) //返回带扩展名的文件名System.IO.Path.GetFileNameWithoutExtension(filename) //返回不带扩展名的文件名 System.IO.Path.GetFullPath(filename) //返回文件所在目录及文件名 System.IO.Path.GetDirectoryName(filename) //返回文件所在…

北邮计算机系统结构课件,TEC-8 运算器组成实验(北邮).ppt

TEC-8 运算器组成实验(北邮)TEC-8 北京邮电大学计算机学院实验中心系统结构实验室 * 55H 1 55H 1 1 ↑ 55H 55H 00 00 00 55H 0 1 0 0 1 1 1 11 0AAH 55H 0 K0 K3 K4 K5 K6 K7 K8 K9 K10 K11 K12 K13 K14 K1 K2 ㈡微程序方式 1.实验准备将控制器转换开关拨到微程序位…

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…

计算机控制论文,计算机控制系统论文.ppt

《计算机控制系统论文.ppt》由会员分享,可在线阅读,更多相关《计算机控制系统论文.ppt(23页珍藏版)》请在人人文库网上搜索。1、双容水箱液位串级控制系统设计,班 级:电自09101班 答 辩 人:黄xx 指导教师:张xx,内容,安…

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

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

另一个Java 8 Lamdbas和Streams示例

我一直落后于Java 8所关注的功能,因此在这篇文章中,我将简要介绍我对lambda和stream的初步经验。 和往常一样,我将专注于Podcast课程: package org.codingpedia.learning.java.core;import java.util.Comparator;public class P…

ArrayList和数组间的相互转换

开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: package test.test1; import java.util.ArrayList; import java.util.List; public class Test { /** * param args */ public static void main(String[] args) { List listne…

计算机二进制基础列式,计算机基础;十进制数100对应的二进制数、八进制数和十六进制数分别是...

中计数采用了多种记数制,比如:十进制,六十进制(六十秒为一分,六十分为一小时,即基数为60,运算规则是逢六十进一),…….在计算机中常用到十进制数、二进制数、八进制数、十六进制数等,下面就这几种在计算机中常用的数制来介绍一下.1.十进制数我们平时数数…

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

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

Dede cms文章内容管理系统安全漏洞!如何有效防止DEDE织梦系统被挂木马安全设置...

第一、安装Dede的时候数据库的表前缀,最好改一下,不要用dedecms默认的前缀dede_,可以改成ljs_,随便一个无规律的、难猜到的前缀即可。 第二、后台登录一定要开启验证码功能,将默认管理员admin删除,改成一个自己专用的,…

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

安徽省太和二中高二数学下册期末考试试题精选一.选择题(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…

计算机翻译字串符,字符的计算机处理和显示 外文翻译.doc

字符的计算机处理和显示 外文翻译本科毕业设计(论文)外文翻译英文翻译英文ON COMPUTERISATION AND REPRESENTATIONOF CHARACTERSThe commercial need to computerise contours of objects has intensified over recent years as more and more applications endeavour to seek …