作为一个天天与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. 【APS.NET Core】- launchSettings.json

    launchSettings.json文件为一个ASP.NET Core应用保存特有的配置标准,用于应用的启动准备工作,包括环境变量,开发端口等.在launchSettings.json文件中进行配置 ...

  2. mysql 慢查询,查询缓存,索引,备份,水平分割

    1.开启慢查询 在mysql的配置文件my.ini最后增加如下命令 [mysqld]port=3306slow_query_log =1long_query_time = 1 2.查看慢查询记录 默认 ...

  3. PHP中普通方法和静态方法

    普通方法(实例方法) 一个类中定义的方法,可以为这个类的所有对象调用的方法.也可以理解为,这个类的所有对象,都各自有自己的一个该方法: 定义形式: class  类名{ function  方法名(形 ...

  4. word批量转pdf文件快捷方法。

    最近在工作中因为要遇到大量的Word文件转化为PDF文件来实现平台的迁移.但是由于文件太多,手动很费力,想到了用代码的方式: 复制下面的代码,保存的记事本,另存为vbs文件:然后把这个vbs文件放到你 ...

  5. xheditor在线编辑器在.netMVC4中的使用

    在线编辑器xheditor,测试感觉不错,特把使用方法记录如下 : 先看看基本使用方法,然后用实例来操作 1.xheditor 地址 http://xheditor.com/ 2.下载最新编辑器源码 ...

  6. MachineLearning ---- lesson 1

    该博文系列是Andrew NG教授的课程笔记,有兴趣的朋友可以在Coursera或者网易公开课上找到该课程. Supervised Learning 下图是一个监督学习回归分析的例子.该图旨在预测房价 ...

  7. BZOJ 1189 紧急疏散(二分+最大流)

    求出所有人撤离的最短时间.由于每扇门只能通过一次,所以不能简单用bfs来搞. 显然答案是有单调性的,考虑二分,问题变成了判断时间x所有人能不能撤离. 考虑最大流.对于每扇门,每个时间通过的人数最多为1 ...

  8. Appium自动化测试框架

    1.在utils包中创建一个AppiumUtil类,这个类是对appium api进行封装的. 代码如下: package utils; import java.net.MalformedURLExc ...

  9. 【明哥报错簿】之【HTTP Status 500 - Servlet.init() for servlet mvc-dispatcher threw exception】

    报错:java.lang.NoClassDefFoundError: /factory/config/EmbeddedValueResolver spring或者jdk的问题,解决办法:spring3 ...

  10. openstack的网络配置

    首先在浏览器输入咱们的控制节点的ip地址登陆horizon,也就是dashboard控制页面 输入好用户名与密码,这时输入的用户名与密码会与我们的老大哥keystone进行认证.确认你输入的这个用户有 ...