使用Bash时的几点总结
作为一个天天与Linux打交道,并以此为生的Linux运维工程师,最常用的工具性语言恐怕就是shell了, 而对于大多数的Linux和一些类Unix而言,其默认的shell就是Bash。使用Bash一般有两种场景,一是直接使用命令,二是,将这些命令组合起来,加上逻辑判断、循环、加上异常文本处理工具、加上函数构成shell脚本。用于自动、快速的执行某些批量操作。
为达到某个目的,Bash往往有多种实现方法,比如在脚本中 反引号 ` ` 与$() 是相同的, 这种特性提供方便的同时也为代码的复杂度和可读性带来一定的影响,Bash没有所谓的规范,只有所谓不同的使用习惯,如下是我平时使用时的一些积累,同时也参考了许多优秀的博客,记录如下,目的呢就是单纯的与大家分享,毕竟互联网环境下就是互相分享,彼此借鉴,在原有的基础的创新,最重要的不是人云亦云,而是真正领悟之后的相互点评、思想碰撞。
1.添加注释
这个不用过多解释,无论哪种语言这甚至都是必须的,目的是增强可读性,节约他人和以后的自己熟悉脚本的时间。
2.构建一种一致的格式
我这里主要指的是缩进 1-- 使用空格(2个或者4个,我一般用4个)取代tab。 2--代码分层要明确,属于一级的要对其,这一点Python做的很好,强制要求的。这样写出来的shell自己看着心情也不同。
3.编码习惯上的一些注意
这里纯属个人习惯,但如下这样做的好处是使代码风格更统一,目的还是提高可读性
1--使用花括号 { } 。 用花括号括起来所有的变量名。比如 ${name} 而不是 $name
2--计算表达式中用$() 代替反引号 `` 这样易于阅读。
4.比较变量的值时建议采用双引号将变量括起来。如下:
这样写的好处至少有: 当变量为空时依然可以执行。 当变量中有特殊字符时(接收用户输入的情况下)依然可以执行。
#!/bin/bash
if [ ${name} == "wencheng" ];then
echo "hello"
fi
#####推荐使用如下
#!/bin/bash
if [ "${name}" == "wencheng" ];then
echo "hello"
fi
#
5.异常退出时要使用异常退出代码 如: exit 500 。这样在此脚本被其他调用时能够更好的判断是否执行完成,如若错误也能判断错误类型。
6.尽量避免单行代码过长的问题。 这样在不同的终端,都能够正常的显示。
7.避免命令的复杂性,这个是仁者见仁智者见智的问题,有的时候你是发现不了自己代码的臃肿程度的。比如:
grep cut 等组合使用达到的效果就不如 awk 来的直接。
借用一个例子:
检索用户ID为502的用户: (第三种会比较的高效)
#一。
cat /etc/passwd | grep |cut -d: -f1 #二。
grep /etc/passwd |awk -F":" '{print $1}' #三。
awk -F ":" '$3 == 502{print $1}' /etc/passwd
先总结这些,欢迎指正。
另外附上控制输出终端颜色的方法 : https://misc.flogisoft.com/bash/tip_colors_and_formatting
使用Bash时的几点总结的更多相关文章
- 当运行docker run -i -t ubuntu /bin/bash时,提示报错Error response from daemon: EOF?
可能是下载过程中出现错误,重新执行docker pull ubuntu,在执行docker run -i -t ubuntu /bin/bash就OK了.
- 在操作Git Bash时出现的问题
参考博客:https://blog.csdn.net/weixin_44394753/article/details/91410463 1.问题1 $ git remote add origin gi ...
- bash启动时加载配置文件过程
本文目录: 1.1 判断是否交互式.是否登录式 1.2 几种常见的bash启动方式 1.3 加载bash环境配置文件 当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执 ...
- Bash 什么时候会给 HOME 赋初始值
今天无意发现下面这个表现: $ env -i bash -c cd bash: line 0: cd: HOME not set $ env -i bash -c 'echo $HOME' 这表明了 ...
- Bash 中的 _ 是不是环境变量
首先,我们想到的会是 export(等价于 declare -x)命令: $ export | grep 'declare -x _=' 没有找到,那么结论就是 _ 不是环境变量?当然没那么简单,否则 ...
- Bash Shell的操作环境
1.路径与命令查找顺序 基本上,命令运行的顺序可以这样看: 1)以相对/绝对路径执行命令,例如“/bin/ls”或“./ls”; 2)由alias找到该命令来执行; 3)由bash内置的(builti ...
- bash的操作环境[转]
Bash Shell 的操作环境: 是否记得我们登陆主机的时候,屏幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登陆的时候我们还可以给予用户一些信息或者欢迎文字呢. ...
- linux Bash
本文包含的命令:type.echo.evn.set.locale.read.declare / typeset.ulimit.alias.unalias.history.!.source.stty.c ...
- 更改git bash默认的路径
更改git bash默认的路径 在打开git bash时,每次都是在C:\Uer路径下,每次都需要先用cd命令转换到自己需要工作的路径(cd /f/dss).修改打开git bash 时的默认的 ...
随机推荐
- APDU命令与响应格式【转】
本文转载自:http://map.im/apduintroduce 命令格式 APDU命令由命令头和命令体组成: CLA | INS | P1 | P2 | Lc | DATA | Le命令头: CL ...
- 【前端学习笔记】arguments相关
arguments转数组: (function() { console.log(arguments instanceof Array); // --> false console.log(Obj ...
- BZOJ 1264 基因匹配(DP+线段树)
很有意思的一道题啊. 求两个序列的最大公共子序列.保证每个序列中含有1-n各5个. 如果直接LCS显然是TLE的.该题与普通的LCS不同的是每个序列中含有1-n各5个. 考虑LCS的经典DP方程.dp ...
- NetBeans IDE驱动报错The path to the driver executable must be set by the web driver.chrome.driver.system property......
问题:defaulstUserDataPath=C:\\Users\\user1\\AppData\\Local\\Google\\Chrome\\User Data\\Defaul 编译失败 解决 ...
- BZOJ4977 跳伞求生(贪心)
如果现在选定了一些要求消灭的敌人而不考虑积分,显然应该让每个敌人被刚好能消灭他的人消灭.再考虑最大化积分,显然我们应该优先消灭ci-bi大的敌人,所选用的a也应尽量大.于是按ci-bi从大到小排序,用 ...
- Django之CSS,JS静态文件的配置
一. 专门创建一个目录放静态文件,即CSS,JS等. 1)先把jquery.min拿过来. 2)新建一个CSS文件放入样式 3)在login.html中引入.css文件 在login.html中引入. ...
- elasticsearch 第二篇(配置篇)
配置 在es启动之前可以通过设置启动命令行启动参数.环境变量.文件等方式优化和配置es进行参数 环境变量 名称 示例 说明 ES_MIN_MEM 256M 用于配置java进程分配的最小内存 ES_M ...
- 【Revit API】Revit读取当前rvt的所有视图与其名称
1)读取所有视图: public static ViewSet GetAllViews(Document doc) { ViewSet views = new ViewSet(); FilteredE ...
- BZOJ3451 Tyvj1953 Normal 【期望 + 点分治 + NTT】
题目链接 BZOJ3451 题解 考虑每个点产生的贡献,即为该点在点分树中的深度期望值 由于期望的线性,最后的答案就是每个点贡献之和 对于点对\((i,j)\),考虑\(j\)成为\(i\)祖先的概率 ...
- Linux网络接口配置文件解析
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0# Intel Corporation 82545EM Gigabit ...