作为一个天天与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时的几点总结的更多相关文章

  1. 当运行docker run -i -t ubuntu /bin/bash时,提示报错Error response from daemon: EOF?

    可能是下载过程中出现错误,重新执行docker pull ubuntu,在执行docker run -i -t ubuntu /bin/bash就OK了.

  2. 在操作Git Bash时出现的问题

    参考博客:https://blog.csdn.net/weixin_44394753/article/details/91410463 1.问题1 $ git remote add origin gi ...

  3. bash启动时加载配置文件过程

    本文目录: 1.1 判断是否交互式.是否登录式 1.2 几种常见的bash启动方式 1.3 加载bash环境配置文件 当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执 ...

  4. Bash 什么时候会给 HOME 赋初始值

    今天无意发现下面这个表现: $  env -i bash -c cd bash: line 0: cd: HOME not set $ env -i bash -c 'echo $HOME' 这表明了 ...

  5. Bash 中的 _ 是不是环境变量

    首先,我们想到的会是 export(等价于 declare -x)命令: $ export | grep 'declare -x _=' 没有找到,那么结论就是 _ 不是环境变量?当然没那么简单,否则 ...

  6. Bash Shell的操作环境

    1.路径与命令查找顺序 基本上,命令运行的顺序可以这样看: 1)以相对/绝对路径执行命令,例如“/bin/ls”或“./ls”; 2)由alias找到该命令来执行; 3)由bash内置的(builti ...

  7. bash的操作环境[转]

          Bash Shell 的操作环境: 是否记得我们登陆主机的时候,屏幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登陆的时候我们还可以给予用户一些信息或者欢迎文字呢. ...

  8. linux Bash

    本文包含的命令:type.echo.evn.set.locale.read.declare / typeset.ulimit.alias.unalias.history.!.source.stty.c ...

  9. 更改git bash默认的路径

    更改git bash默认的路径   在打开git bash时,每次都是在C:\Uer路径下,每次都需要先用cd命令转换到自己需要工作的路径(cd  /f/dss).修改打开git bash 时的默认的 ...

随机推荐

  1. centos系统下禁用笔记本触控板

    最近把零几年的老爷笔记本拿出来用,使用windows系统实在太卡了,于是折腾安装上Centos系统了,但是在使用的过程中发现鼠标经常失效.使用了多种方法(比如:http://blog.csdn.net ...

  2. RPM 方式安装 Oracle18c 的方法

    1. 云和恩墨公众号介绍了 18c 通过rpm方式的安装包. 所以需要先下载一下. 地址. https://www.oracle.com/technetwork/database/enterprise ...

  3. css3 flex属性flex-grow、flex-shrink、flex-basis学习笔记

    最近在研究css3的flex.遇到的flex:1;这一块,很是很纠结,flex-grow.flex-shrink.flex-basis始终搞不清,最经搜集了大量的介绍,应该能算是明白了.网上大部分解释 ...

  4. ASP.NET 页面访问控制

    request常用对象和方法: @属性:1.quary string,获取通过URL路径传来的数据 2.Form,获取通过表单提交传输的数据 3.servervariables,获取Web服务器变量的 ...

  5. HDU4647_Another Graph Game

    有趣的博弈题. 关键在于把比边权的平分到两边的点权上面,然后点权排序,每次从大的开始拿就可以了. #include <iostream> #include <cstdio> # ...

  6. zookeeper应用实例

    创建持久节点和临时节点 ZooKeeper zk=new ZooKeeper(HOST,CLIENT_SESSION_TIMEOUT,new Watcher(){ @Override public v ...

  7. 51nod 1821 最优集合(思维+单调队列)

    题意:一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个数k,要求 ...

  8. SAM I AM UVA - 11419(最小顶点覆盖+输出一组解)

    就是棋盘问题输出一组解 https://blog.csdn.net/llx523113241/article/details/47759745 http://www.matrix67.com/blog ...

  9. VS的IISExpress配置通过IP访问程序

    打开C:\Users\用户\Documents\IISExpress\config\applicationhost.config 获取本地VS项目运行起来的端口,比如 然后在文本里搜索  24395 ...

  10. 9个基于Java的搜索引擎

    1.Java 全文搜索引擎框架 Lucene 毫无疑问,Lucene是目前最受欢迎的Java全文搜索框架,准确地说,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Luc ...