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

news2024/11/6 7:15:00

文章目录

  • 引言
  • 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.coloradmin.cn/o/1261299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三丶openlayer之source和layer

1.source和layer的概念 在前面的例子中,已经对Source和Layer有所了解了,我们用天地图为底图加载出来东西,但是这个世界上的地图不仅仅是有天地图一种类型,比如Google地图,高德地图,百度地图等,…

Java中如何构建平衡二叉树

定义:平衡二叉树是一棵二叉排序树,或者为空,或者满足以下条件: 1)左右子树高度差的绝对值不大于1; 2)左右子树都是平衡二叉树。 平衡因子:左子树的高度减去右子树的高度,显然,在平衡…

【C/PTA —— 12.指针1(课内实践)】

C/PTA —— 12.指针1(课内实践) 6-1 交换两个整数的值6-2 利用指针找最大值6-3 字符串的连接6-4 移动字母 6-1 交换两个整数的值 void fun(int* a, int* b) {int* tmp *a;*a *b;*b tmp; }6-2 利用指针找最大值 void findmax(int* px, int* py, int* p…

Find My键盘|苹果Find My技术与键盘结合,智能防丢,全球定位

键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、汉字、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。还有一些带有各种快捷键的键盘。随着时间的推移,渐渐的市场上也出现独立的具有各种快捷功能的产品单独…

VS2010配置opencv2.4.10

1.下载opencv2.4.10,百度网盘链接如下: 链接:https://pan.baidu.com/s/1UdoQJbRUEB_G2urT703xYQ 提取码:7lbd 2.运行opencv-2.4.10.exe,将文件提取到一个自定义目录里: 3.添加系统环境变量 在“系统变量…

Webhook端口中的自签名身份验证

概述 有时,可能需要通过 Webhook 端口从交易伙伴处接收数据,但该交易伙伴可能需要更多的安全性,而不仅仅是用于验证入站 Webhook 请求的基本身份验证用户名/密码 – 或者您可能只想在入站 Webhook 消息上添加额外的安全层。 使用 Webhook 端…

Ubuntu新手使用教程

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

STM32_9(USART串口)

一、串口通信 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围&#xff0…

前缀和算法总结

前缀和思维导图&#xff1a; 一维前缀和算法模版&#xff1a; #include <iostream>using namespace std;const int N 100010;int n, m; int s[N];int main() {scanf("%d%d", &n, &m);for (int i 1; i < n; i){int x;scanf("%d", &…

​无人机石油管道巡检方案新亮点:灵活准确又高效

在当前石油工业的安全管理中&#xff0c;无人机技术逐渐成为一种不可或缺的工具。随着我国油气管道里程的持续增长&#xff0c;确保这些关键基础设施的安全运行变得越来越重要。传统的巡检方法已经无法满足现代油气行业的需求&#xff0c;而无人机石油管道巡检技术的应用提供了…

相同JS代码,多次混淆加密能得到不同的结果吗?

一份相同的JavaScript代码&#xff0c;进行多次混淆加密&#xff0c;能得到不同的结果吗&#xff1f; 答案是肯定的&#xff0c;能。 JShaman可以实现这个效果。即&#xff1a;加密结果具有多态性、变化性。 下面实测展示。 来到JShaman网站&#xff0c;用它默认的示例代码…

计算机网络——数据链路层-数据链路层概述(介绍、三个重要问题、使用广播信道的数据链路层、其他问题)

目录 介绍 三个重要问题 封装成帧 差错检测 可靠传输 使用广播信道的数据链路层 其他问题 介绍 本篇对数据链路层进行概述&#xff0c;我们首先来看看数据链路层在网络体系结构中的地位&#xff1a; 主机H1给主机H2发送数据&#xff0c;中间要经过三个路由器和电话网、…

java选择排序和冒泡排序

1.区别 选择排序和冒泡排序的区别主要在于算法逻辑、稳定性和交换成本。 算法逻辑&#xff1a;选择排序和冒泡排序都属于比较排序&#xff0c;但在具体算法逻辑上有所不同。冒泡排序是通过相邻元素之间的比较和交换&#xff0c;将较大&#xff08;或较小&#xff09;的元素逐…

自动驾驶HWP功能规范

HWP功能规范 Highway Pilot Functional Specification 文件状态&#xff1a; 【√】草稿 【】正式发布 【】正在修改 文件起草分工 撰写&#xff1a; 审核&#xff1a; 编制&#xff1a; 签名&#xff1a; 日期&#xff1a; 审核&#xff1a; 签名&#xff1a; 日期&am…

Leetcode—739.每日温度【中等】

2023每日刷题&#xff08;四十二&#xff09; Leetcode—739.每日温度 单调栈实现思想 从右到左实现代码 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n temperatures.size();stack<int> st;vector<i…

深度学习实战61-基于知识图谱与BiLSTM网络实现疾病相关智能问答系统,并支持数据扩展

大家好,我是微学AI,今天给大家介绍一下深度学习实战61-深度学习在医疗领域的应用:疾病相关智能问答系统,并支持数据扩展。本文将详细介绍如何使用Py2neo这个Python库来构建一个医疗领域知识图谱,并将数据导入Neo4j图数据库。我们将提供一些医疗领域的数据样例,并展示如何…

TIME_WAIT状态套接字重新使用

《TIME_WAIT相关知识》里边有相关理论知识。 《TIME_WAIT状态TCP连接导致套接字无法重用实验》有相关实验。 现代Linux的TCP协议栈已经做了许多升级&#xff0c;所以可以让我们直接重用TIME_WAIT状态套接字而不会引起问题。下边是优化的内容&#xff1a; 1.新连接的SYN告知序列…

原生代码布局

背景&#xff1a; 原生开发移动端&#xff0c;每一个页面的组成部分是哪些呢&#xff1f;在一个项目文件里&#xff0c;每一个页面的组成部分又是哪些呢&#xff1f;参考链接&#xff1a;pages页面的组成 效果展示&#xff1a; 注意&#xff1a; 一、布局代码&#xff1a; <…

33 - MySQL调优之索引:索引的失效与优化

不知道你是否跟我有过同样的经历&#xff0c;那就是作为一个开发工程师&#xff0c;经常被 DBA 叫过去“批评”&#xff0c;而最常见的就是申请创建新的索引或发现慢 SQL 日志了。 记得之前有一次迭代一个业务模块的开发&#xff0c;涉及到了一个新的查询业务&#xff0c;需要…

数据库应用:Ubuntu 20.04 安装MongoDB

目录 一、理论 1.MongoDB 二、实验 1.Ubuntu 20.04 安装MongoDB 三、问题 1.Ubuntu Linux的apt 包管理器更新安装软件报错 2.Ubuntu20.04安装vim报错 3.Ubuntu20.04如何更换阿里源 4.Ubuntu22.04如何更换阿里源 一、理论 1.MongoDB &#xff08;1&#xff09;概念 …