编写可靠Linux shell脚本的建议
编写可靠Linux shell脚本的八个建议https://yangxx.net/archives/949
1. 指定bash
shell 脚本的第一行,#!之后应该是什么?
如果拿这个问题去问别人,不同的人的回答可能各不相同。我见过/usr/bin/env bash,也见过/bin/bash,还有/usr/bin/bash,还有/bin/sh,还有/usr/bin/env sh。这算是编程界的“’茴’字四种写法”了。
在多数情况下,以上五种写法都是等价的。但是,写过程序的人都知道:“少数情况”里往往隐藏着意想不到的坑。
如果系统的默认 shell 不是 bash 怎么办?比如某 Linux 发行版的某个版本,默认的 sh 就不是 bash。
如果系统的 bash 不是在 /usr/bin/bash 怎么办?
我**推荐使用 /usr/bin/env bash 和 /bin/bash。**前者通过env添加一个中间层,让env在$PATH中搜索bash;后者则是官方背书的,约定俗成的 bash 位置,/usr/bin/bash不过是指向它的一个符号链接。
2. set -e 和 set -x
OK,经过一番讨论,现在第一行定下来了。接下来该开始写第二行了吧?
且慢!在你开始构思并写下具体的代码逻辑之前,先插入一行set -e和一行set -x。
set -x会在执行每一行 shell 脚本时,把执行的内容输出来。它可以让你看到当前执行的情况,里面涉及的变量也会被替换成实际的值。
set -e会在执行出错时结束程序,就像其他语言中的“抛出异常”一样。(准确说,不是所有出错的时候都会结束程序,见下面的注)
注:set -e结束程序的条件比较复杂,在man bash里面,足足用了一段话描述各种情景。大多数执行都会在出错时退出,除非 shell 命令位于以下情况:
一个 pipeline 的非结尾部分,比如 error | ok
一个组合语句的非结尾部分,比如 ok && error || other
一连串语句的非结尾部分,比如 error; ok
位于判断语句内,包括 test、if、 while 等等。
这两个组合在一起用,可以在 debug 的时候替你节省许多时间。出于防御性编程的考虑,有必要在写第一行具体的代码之前就插入它们。扪心自问,写代码的时候能够一次写对的次数有多少?大多数代码,在提交之前,通常都经历过反复调试修改的过程。与其在焦头烂额之际才引入这两个配置,不如一开始就给 debug 留下余地。在代码终于可以提交之后,再考虑是否保留它们也不迟。
编写可靠Linux shell脚本的建议相关推荐
- linux 的脚本编写的,linux shell脚本编写兄弟书
贝泽陶夫: '--------------------------------------------------------------------------------------------- ...
- 在linux中编写shell脚本文件,如何编写简单的Shell脚本(Script)文件之Linux的基本操作...
如何编写简单的Shell脚本(Script)文件之Linux的基本操作 新建一个文本文件包含所需要的脚本.举例,我会使用pico编辑器写一个脚本用来运行程序tar,带上必要的可选项可以用来解压从因特网 ...
- Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明
原标题:详解Linux Shell脚本编写技巧,附实例说明 Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对 ...
- 编写 Linux shell 脚本 踩坑记录
几年前,抽出一段时间学习了Linux Shell 脚本的学习,用于自动化项目的自动化发布. 如今,几年过去了,忘记的差不多了. 前几天刚写了一个脚本,漏洞百出,将踩过的坑再次记录下来,提醒自己. 1. ...
- LINUX SHELL脚本攻略笔记[速查]
LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...
- Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux shell脚本基础学习详细介绍(完整版)
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的 ...
最新文章
- ARM研发进展与企业清单
- python外部库是什么_如何使用Portable Python安装外部库?
- qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...
- 马化腾又要发红包!648亿港元,最多腾讯2%股份,我酸了...
- WinMerge只显示差异部分的设置方法
- H.264简单码流分析
- 图解:怎么样安装TortoiseSVN以及汉化
- linux pagecache与内存占用
- mysql的语句大全_mysql语句大全
- (图文教程)帝国cms7.0列表页模板调用多说评论次数
- 2021Q2产品团队绩效总结--管理日记
- Notes from Google Play | Google Play 持续助力您的应用和游戏
- 自定义竖向SeekBar (VerticalSeekBar)
- 【工具使用】go build 命令打包成exe
- 加强版Apktool堪称逆向神器
- Anaconda/pip 更换阿里源,助力 conda create -n 虚拟环境搭建
- 魔兽怀旧服联盟服务器不稳定,魔兽世界怀旧服转服服务关闭最后一天,联盟部落新的对抗...
- 使用libcurl库把域名转化IP
- linux 网络优化 net.ipv4.tcp_tw_recycle 简介
- 【c语言入门】有10个学生,每个学生的数据包含学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求打印输出3门课程的总平均成绩。
热门文章
- python语言的变量特点随时_【Python】Python语言特点
- qt5.4 for android,windows下Qt5.4.2 for android开发环境配置
- vscode二次开发_vscode 扩展开发从入门到颈椎病康复
- everything下载哪个版本_Everything敏感信息泄露
- VS2012下基于Glut OpenGL GL_POLYGON_STIPPLE示例程序:
- IOS开发-我的第一个IOS程序
- 案例:需求问题的解决方案
- Bootstrap3基础 glyphicon 设置图标的颜色与大小
- python的编码规范【摘】
- XCode各种告警处理