当前位置: 首页 > article >正文

shell编程系列- bash和sh的区别

文章目录

  • 引言
  • bash和sh的区别
    • CentOS下的区别
    • Ubuntu下的区别
  • 最佳实践

引言

我们在编写shell脚本时,通常第一行都要声明当前脚本的执行程序,也就是常见的 #!/bin/sh 或者是 #!/bin/bash ,我们无论用哪一个脚本似乎都可以正常的执行,那具体有什么区别呢,我们接下来会详细的讲一下。

bash和sh的区别

在大多数的Linux系统里, #!/bin/sh#!/bin/bash 其实就是完全相同的,但是在另外一些Linux系统中两者还是存在不小的区别,这主要是因为Linux系统发展的历史原因导致的,因为Linux操作系统在最近几十年的发展中,逐步分化为不同的发行版,在Redhat和CentOS里两者是相同的,但是在Ubuntu和Debian系统中两者有区别。

CentOS下的区别

首先我们一起看一下CentOS中两者区别,如下图:
在这里插入图片描述
可以看到 /bin/sh 是一个软连接(可以简单的理解为window里的快捷方式)指向了/bin/bash 所以两者本身就是同一个shell,没有任何区别

Ubuntu下的区别

我们在一起看看Ubuntu中两者的区别,如下图:
在这里插入图片描述
可以看到 /bin/sh 通过软连接指向了dash 这是Ubuntu提供的一个轻量级的shell,他比bash shell要少一些特性,所以在Ubuntu的系统中,如果我们使用#!/bin/sh来解释执行我们的脚本,可能就会出现一个诡异的问题。
我举个例子,有如下脚本:
在这里插入图片描述

脚本的内容很简单就是声明一个数组,然后遍历打印,注意我们此时用的是 #!/bin/sh ,我们执行一下看看结果,报错了如下图:
在这里插入图片描述
报错的原因是语法错误,这是因为在dash shell中不允许我们直接定义数组。
但是如果我们换为bash shell来解释执行脚本,我们可以看一下效果,脚本内容如下:
在这里插入图片描述
脚本可以正常执行,如下图:
在这里插入图片描述

最佳实践

先说结论,shell脚本中建议使用 #!/bin/bash
上面讲了两种shell的区别,我们可以发现使用bash shell 其实可以避免一些诡异的问题,并且bash shell 也是所有linux发行版中都带有的shell,因此在我们的shell脚本中为了保证脚本在各个linux平台上都可以稳定运行,建议使用 #!/bin/bash


http://www.kler.cn/a/147620.html

相关文章:

  • MongoDB分布式集群搭建----副本集----PSS/PSA
  • 【Qt实现虚拟键盘】
  • 浅层神经网络
  • 计算机视觉 ---常见图像文件格式及其特点
  • 接口文档的编写
  • 《FreeRTOS任务基础知识以及任务创建相关函数》
  • VUE语法--img图片不显示/img的src动态赋值图片显示
  • [学习笔记]IK分词器的学习
  • 探究Kafka原理-7.exactly once semantics 和 性能测试
  • Python批量裁剪图像尺寸、压缩图像大小代码实现
  • 阿里云对象存储oss-文件上传过程详解(两种方式)
  • 简易版扫雷+代码分析
  • ElasticSearch的日志配置
  • 十分钟搭建VScode C/C++运行环境
  • 03、K-means聚类实现步骤与基于K-means聚类的图像压缩(1)
  • Python基础语法之学习数据转换
  • React Native 源码分析(五)—— Fabric创建View的过程
  • 复习 学习 多看
  • leetcode9.回文数
  • java Swing UI设置统一字体大小
  • 一起学docker系列之十docker安装tomcat实践
  • leetCode 226.翻转二叉树
  • MFC—CTabCtrl 、CListCtrl
  • k8s docker总结特殊点
  • 【Jmeter】什么是BeanShell?
  • ACE 2005,LDC2006T06数据集获取