精华内容
下载资源
问答
  • linux shell dash&bash

    千次阅读 2017-03-13 14:10:17
    查看此时系统shellls -al /bin/shubuntu dash 切换为...sudo ln -fs /bin/bash /bin/shLinux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bourne shell 完全向后兼容,并且

    查看此时系统shell

    ls -al /bin/sh

    ubuntu dash 切换为bash

    方法一
    sudo dpkg-reconfigure dash

    方法二
    sudo ln -fs /bin/bash /bin/sh

    Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bourne shell 完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。

    GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。
    Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。
    语法上的主要的区别有:
    1.定义函数
    bash: function在bash中为关键字
    dash: dash中没有function这个关键字
    2.select var in list; do command; done
    bash:支持
    dash:不支持, 替代方法:采用while+read+case来实现
    3. echo {0..10}
    bash:支持{n..m}展开
    dash:不支持,替代方法, 采用seq外部命令
    4. here string
    bash:支持here string
    dash:不支持, 替代方法:可采用here documents
    5. >&word重定向标准输出和标准错误
    bash: 当word为非数字时,>&word变成重定向标准错误和标准输出到文件word
    dash: >&word, word不支持非数字, 替代方法: >word 2>&1; 常见用法 >/dev/null 2>&1
    6. 数组
    bash: 支持数组, bash4支持关联数组
    dash: 不支持数组,替代方法, 采用变量名+序号来实现类似的效果
    7. 子字符串扩展
    bash: 支持 parameter:offset:length, {parameter:offset}
    dash: 不支持, 替代方法:采用expr或cut外部命令代替
    8. 大小写转换
    bash: 支持 parameterpattern, {parameter^^pattern}, parameter,pattern, {parameter,,pattern}
    dash: 不支持,替代方法:采用tr/sed/awk等外部命令转换
    9. 进程替换<(command), >(command)
    bash: 支持进程替换
    dash: 不支持, 替代方法, 通过临时文件中转
    10. [ string1 = string2 ] 和 [ string1 == string2 ]
    bash: 支持两者
    dash: 只支持=
    11. [[ 加强版test
    bash: 支持[[ ]], 可实现正则匹配等强大功能
    dash: 不支持[[ ]], 替代方法,采用外部命令
    12. for (( expr1 ; expr2 ; expr3 )) ; do list ; done
    bash: 支持C语言格式的for循环
    dash: 不支持该格式的for, 替代方法,用while+ ((expression))13.let((expression))bash:let,((expression))dash: ((expression))或者外部命令做计算
    14. $((expression))
    bash: 支持id++,id–,++id,–id这样到表达式
    dash: 不支持++,–, 替代方法:id+=1,id-=1, id=id+1,id=id-1

    展开全文
  • GNU/Linux 操作系统中的 /bin/sh 是 bash(Bourne-Again Shell)的符号链接,但鉴于 bash 过于复杂,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash(Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得...
    GNU/Linux 操作系统中的 /bin/sh 是 bash(Bourne-Again Shell)的符号链接,但鉴于 bash 过于复杂,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash(Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Ubuntu 号称自从他们在 6.10 版里这样做了以后,系统启动速度有了明显的提升。Debian 计划在下一个发行版(代号 lenny)中也将 dash 作为默认的 /bin/sh。

     

      按照惯例(以及很多写脚本的规范),标记为“#!/bin/sh”的脚本不应使用任何 POSIX 没有规定的特性(使用 bash 特性的脚本要使用“#!/bin/bash”),所以在理论上,这样应该没有任何副作用。但是现实中,Linux 下的很多(不规范的)脚本有所谓 bashism,却在文件头标记为“#!/bin/sh”。有人把脚本失败归咎于 Ubuntu 而不是自己的脚本,这是不公平的。

      刚才在 Debian (testing)下尝试用 dash 作为 /bin/sh,并重启了一下系统,好像快了那么一点点(心理作用?)不过我想它节约的那点时间也许比挂载我的两个 reiserfs 分区用的时间还要少……

      遇到的问题:自己的两个脚本挂了,把“#!/bin/sh”改为“#!/bin/bash”;自己的一个带 bashism 的 Makefile 挂了,加上“SHELL=/bin/bash”。

      在 Debian 下,先安装软件包 dash,然后 dpkg-reconfigure dash,回答 Yes 即可。

      在 Ubuntu 下这已经是默认,如果因为某些原因需要改回到 bash,也是用 dpkg-reconfigure dash。

    展开全文
  • linux bash dash 区别以及如何更改

    千次阅读 2013-12-31 09:42:52
    然后我到/bin下看了有"sh -> dash",原来sh是/bin/dash的链接。 后来google了一下才发现,buntu6.10已将先前默认的bashshell更换为了dash。其表现是/bin/sh链接到了/bin/dash而不是传统的/bin/bash。 bash - ...
    我用
    bash
    到语法写了一个
    shell
    脚本(准确的说是把书上的脚本敲进电脑),在
    ubuntu
    下,用sh 
    test
    .sh来运行,但是出现了意料之外到结果,比如echo -e "\nTest\n"到执行就不同,直接用sh test.sh运行,会打印出-e(作为字符串);而直接在终端中输入echo -e "\nTest\n"是不会输出"-e"的。
    
    我就在想是什么原因,后来终于发现是Ubuntu下sh默认指向 dash
    echo $SHELL  -->  /bin/bash
    type sh      -->  /bin/sh
    然后我到/bin下看了有"sh -> dash",原来sh是/bin/dash的链接。
    后来google了一下才发现,buntu6.10已将先前默认的bashshell更换为了dash。其表现是/bin/sh链接到了/bin/dash而不是传统的/bin/bash。
    bash - GNU Bourne-Again SHell
    dash - Debian Almquist Shell
    可以分别man bash  / man dash看一下。

    那么怎么把sh改为指向bash呢?
    最暴力的方法当然是直接把/bin/sh的软链接改到bash中,
    如:ln -s /bin/bash /bin/sh
    但是,有优雅一些的方法,
    sudo dpkg-reconfigure dash
    出现菜单问你是否要dash的时候,选no就可以了。
    再次检查一下, ls /bin/sh -al 发现软链接指向/bin/bash就可以了。 
    展开全文
  • Linux之shell以及bash、dash的详解

    万次阅读 多人点赞 2018-07-17 15:47:25
    Linux之shell、sh、bash、dash详解 首先,我们先借用两张图来简单概括一下Linux系统的结构: 好的,下面我们来分别来解释其中的一些概念和作用: Shell与Shell script 何为linux的shell? 人们总是...

    Linux之shell以及bash、dash的详解


    首先,我们先借用一张图来简单概括一下Linux系统的结构:

    这里写图片描述

    好的,下面我们来分别来解释其中的一些概念和作用:


    Shell与Shell script

    • 何为linux的shell?

      人们总是形象的把Linux系统比作一个“蛋”,那么组成的硬件(Hardware)就好比是这个蛋的蛋核(蛋黄);
      Linux-Kernel(Linux内核)系统好比是这个蛋的蛋清(哟。。不会吧~~不是才说了是内核吗?怎么又成蛋清了呢?请理解哈,谁叫人家硬件硬实力强呢!所以我们的Kernel还是暂且委屈一下咯~_~,不过在软件层面,咱们的Kernel是核心没错的哦!!);
      这里写图片描述
      我们都知道各类程序或解释过后命令是通过Kernel(Linux内核)与Hardware(计算机硬件)交流,驱动硬件设备完成相关的行为;那么我们又通过什么与系统内核交流呢?没错的,是Shell,Shell 英文名叫“壳”,是一个处理用户请求工具或接口,它负责解释用户输入的命令调用用户希望使用的程序。

    • Shell Script(Shell脚本)与命令

      我们很容易知道“Shell Script”指的是针对shell所写的脚本。我们将一些shell规定的语法与命令,再搭配正则表达式、管道命令与数据流重定向等功能,写成一个纯文本文件以达到我们想要的处理目的,再配以“.sh”的扩展名,这便是“Shell script”了。懂了吧!

      简言之,我们只有通过Shell 这个工具来解释我们的命令等请求,我们才能成功实现与计算机的交流,同时再搭配Shell script可以批量处理命令的“程序”,我们就可以与计算机更优雅的交流哟!


    Bash与Dash的概念及区别

    • Shell的多样性下的bash与dash

      我们可能会问:既然shell是解释命令的工具,那么这个工具可不可以多样化呢?不同的解释工具可不可以遵从不同的规则呢?
      这是必然的咯,何况是像Linux这种开源的好东西,怎么会缺乏多样性呢?!
      所以,我们不难就理解Linux中的shell有多种类型了吧,这其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。其中三种shell各有优缺点:

      Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。

      Bourne Again shell,它是Linux操作系统缺省的shell,是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。
      所以在GNU/Linux 操作系统中的 /bin/sh 是 bash(Bourne-Again Shell)的符号链接(但是这只是比较原始的做法,现在开始有了新的做法了),也就是若脚本第一行为“#!/bin/bash”,我们使用命令:”sh script_name.sh“时是调用的bash去解释脚本;

      下面我们接着来看看所谓的新的改变
      Dash,GNU/Linux操作系统中的/bin/sh本是bash (Bourne-Again Shell) 的符号链接,但鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。也就是若脚本第一行为“#!/bin/sh”,我们使用命令:”sh script_name.sh“时是调用的dash去解释脚本;

      Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。

      我使用的是Ubuntu 18.04的版本,所以我的系统默认sh符号链接dash,如下:

      root@Richard:~/scripts# ls -l /bin/sh /bin/bash
      -rwxr-xr-x 1 root root 1113504 45 02:30 /bin/bash
      lrwxrwxrwx 1 root root       4 73 20:04 /bin/sh -> dash
      

    • 解决一个我们时常会遇到的shell script执行问题

      我们参照鸟个的书写第一个shell script时也许会遭遇下面的尴尬:
      我们编写一个名为sh01.sh 的脚本

      
      #!/bin/bash
      
      
      # Program:
      
      
      #       This program shows "Hello World!" in your screen.
      
      
      # History:
      
      
      # 2018/7/17 Richard     First release
      
      PATH=/bin;/sbin/;/usr/bin;/usr/sbin;/usr/local/bin;/usr/local/sbin;~/bin
      export PATH
      
      echo -e "Hello world! \a \n"
      
      exit 0

      运行

      root@Richard:~/scripts# sh sh01.sh 
      -e Hello world! 

      为什么把参数-e都输出了呢?这不是我们想要的啊!

      原来是我的Ubuntu 默认的sh命令调用dash去解释一个改用bash去解释的shell script,因为dash 对echo命令的解释标准中不支持 -e 参数,固出错!

      解决方案

      方案1
      如果我们一定要使用 -e 这个参数,那我们可以这样做
      脚本不变,运行命令改变为bash

      root@Richard:~/scripts# bash sh01.sh 
      Hello world! 

      方案2
      脚本中去掉 -e 参数

      
      #!/bin/bash
      
      
      # Program:
      
      
      #       This program shows "Hello World!" in your screen.
      
      
      # History:
      
      
      # 2018/7/17 Richard     First release
      
      PATH=/bin;/sbin/;/usr/bin;/usr/sbin;/usr/local/bin;/usr/local/sbin;~/bin
      export PATH
      
      echo "Hello world! \a \n"
      
      exit 0
      

      运行命令不变

      root@Richard:~/scripts# sh sh01.sh 

      至此:问题以解决,顺便我们还懂了shell的相关知识

    最后,鸣谢博客(https://blog.csdn.net/liudsl/article/details/79213390

    展开全文
  • 首先,我们先借用一张图来简单概括一下Linux系统的结构: 好的,下面我们来分别来解释其中的一些概念和作用: Shell与Shell script 何为linux的shell? 人们...
  • linux下编写shell脚本文件时,经常会看到很多人在文件的第一行中标注“#!/bin/bash”。这句话的意思是告诉系统强制用bash,避免出现一些不兼容的问题。那么,在linux系统中,除了bash之外,还有哪些shell工具?...
  • 问题:将/bin/sh 重新指向/bin/bash 方法: sudo su cd /bin rm sh ln -s bash sh ls -la sh ...问题:将/bin/sh 重新指向bin/dash 方法: cd /bin sudo rm bash ln -s dash bash ls -la bash 运行截图:
  • 规范和建议3.bash和dash区别 1.常见shell类型 Bourne shell (sh) UNIX 最初使用,且在每种 UNIX 上都可以使用。在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。 C shell (csh) csh...
  • 最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash shell来解析,而通常我们默认用的是bash shell来解析;我按照bash shell那样照常编写脚本,大部分的脚本是没有...
  • dash为bash

    2019-11-08 11:34:31
    ls -l /bin/sh 看了一下,发现它指向 dash 而不是 bash,网上说 dash 功能有点少,难怪。 执行 /bin/bash 启用 bash,就比较好用了。 References 关于在linux下无法使用tab键补全 bash和dash的区别 ...
  • linux———/bin/sh、 /bin/bash、 /bin/dash的区别

    万次阅读 多人点赞 2019-03-01 09:50:26
    bash(Bourne Again Shell):由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash...
  • pymol设置dashAmazon’s new $20 Dash Wandis a handy little device for Prime customers that lets you order anything from Amazon just by scanning a bar code.It also comes with Alexa built in, so you can ...
  • Shell 即 Shell Script, 是一种程序设计语言,也是一种命令语言。sh 是 UNIX 默认 Shell,bash 是 Linux 默认 Shell 也是 sh 的超集,dash 是 bash 的简化。
  • Ubuntu shell脚本:bash / dash

    千次阅读 2013-04-24 16:30:44
    编写shell脚本时,指定脚本类型,如#!/bin/bash #!/bin/dash #!/bin/sh, 不同的shell支持...lrwxrwxrwx 1 root root 4 7月 10 2012 /bin/sh -> dash(sh实质是个链接,指向dash) 一个shell脚本执行时采用何种she
  • bash与dash的转换

    2019-12-09 10:03:16
    由于安装PetaLinux时需要设置/bin/sh指向为bash,否则会报出错误:WARNING: /bin/sh is not bash!。转换的方法入下: 查看当前是bash还是dash:ls -al /bin/sh,输出如下结果: lrwxrwxrwx 1 root root 4 Dec 5 16:...
  • ubuntu上的sh链接到dash

    千次阅读 2014-09-16 17:02:20
    最近同事写的shell脚本在ubuntu上跑时总走不对if的分支。发现ubuntu上的shell默认是bash,但sh对应的是dash,这个需要注意。...Linux hostname1 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17
  • Linux Shell

    2020-02-08 19:09:35
    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
  • Linux

    2018-10-23 17:55:03
    Linux File System Linux 系统目录结构|菜鸟教程 http://www.runoob.com/linux/linux-system-contents.html /bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动Linux时使用的...
  • 我就在想是什么原因,后来终于发现是Ubuntu下sh默认指向dash。 echo $SHELL --> /bin/bash type sh --> /bin/sh 然后我到/bin下看了有"sh -> dash",原来sh是/bin/dash的链接。 后来google了一下才发现,buntu...
  • 关于bash和dash

    2015-12-17 14:49:36
    其实一般用户通过shell来和Linux的内核通信,以让内核达到我们所想要达到的工作。也就是说,只要能够操作应用程序的接口都能被成为shell,狭义的shell指的是命令行方面的软件,例如bash。广义的shell则包括图形界面...
  • Dash与Bash的语法区别

    千次阅读 2012-07-24 16:19:25
    如今Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准,下面简要列举下从bash迁移到...
  • Bash 和 Dash

    2011-02-12 02:13:00
    <br />安装交叉编译器出问题了, ./arm-2010q1-202-arm-none-linux-gnueabi.bin 错误信息如下; Checking for required programs: awk grep sed bzip2 gunzip ==========================...
  • Bash and Dash

    2011-01-20 18:51:00
      安装交叉编译器出问题 ./arm-2010q1-202-arm-none-linux-gnueabi.bin 错误信息如下; Checking for required programs: awk grep sed bzip2 gunzip ============================...
  • 出现此问题的原因,是由系统的兼容性引起的,linux下默认了指向dash而非bash。 linux下Dash改Bash: 1.先查看是使用哪个shell ls -al /bin/sh 2.#如果是Dash可以用以下方法切回bash(选择NO) 方法一:sudo dpkg-...
  • linux基础知识大纲

    2018-06-26 09:27:17
    1、Linux操作系统概述Linux操作系统的发展过程、创始人、GNU计划等源于UNIX;得益于GNU计划;借助internet得以壮大;推动了自由软件、开源软件的发展1991年底,Limus Torvalds 公开了Linux 内核源码0.02 版GNU,1984...
  • 1:原因 兼容性问题,因为Linux将sh默认指向dash,而不是bash。 2:解决 执行命令sudo dpkg-reconfigure dash,选择no。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,708
精华内容 683
关键字:

linux指向dash

linux 订阅