linux #!binsh 是什么意思

linux #!binsh 是什么意思,第1张

#!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。$bash$表示系统提示符,$表示此用户为普通用户,超级用户的提示符是#,bash是shell的一种,是linux下最常用的一种shell,$bash的意思是执行一个子shell,此子shell为bash。

自己写的一个while循环结构总是报错,纠结了一下午,各种查资料、改命令行,最后发现是ubuntu系统解释器的原因,脚本没有问题,换一下解释器就OK了。郁卒的要死……

什么是bash ?

Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。

GNU/Linux *** 作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。

Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。

就是这个倒霉的dash解释器使得我按照bash语法写的shell 脚本不能运行。

要知道自己的/bin/sh指向何种解释器,可以用 ls /bin/sh -al 命令查看:

        $ ls /bin/sh -al

        lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh ->bash

以上结果就表示当前系统用的是dash解释器。

切换到bash的方式其实挺简单的,关键是一直没找出这个原因……

修改默认的sh,可以采用命令 sudo dpkg-reconfigure dash

会出现一个图片状的配置菜单,选no就可以了

再次检查一下, ls /bin/sh -al 发现软链接指向/bin/bash

         lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh ->bash

参考资料: Ubuntu 的 bash和dash的区别_Linux教程_Linux公社-Linux系统门户网站

感谢度娘!!

注:dash 和 bash 语法上的主要的区别有:

shell是一门脚本语言,即shell脚本,shell也是解释执行的脚本语言,可直接调用Linux命令,所以它在Linux系统中有着非常重要的作用。那么Linux

shell有哪些类型?我们来看看吧。

shell脚本语言是弱类型语言,无需定义变量的类型就可使用,主要有两大类:bourne shell、C shell。

第一种:Bourne shell

Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again

Shell(bash)三种类型。

Bourne shell (sh)由AT&T的Steve Bourne开发,是标准的UNIX Shell,很多UNIX系统都配有sh。

Korn shell (ksh)由David Korn开发,是Bourne

shell(sh)的超集合,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上的/bin/sh往往是指向/bin/ksh的符号链接。

Bourne Again

Shell即bash由GNU项目组开发,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版默认配置的Shell,在Linux系统上的/bin/sh往往是指向/bin/bash的符号链接。虽然如此,bash和sh还是有很多的不同,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,它们有些行为并不一致,但大多数企业运维的情况下区别不大,特殊场景可以使用bash替代sh。

第二种:C shell

C shell又包括csh、tcsh两种类型。

csh由Berkeley大学开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne

Shell所不支持的功能,例如:作业控制、别名、系统算术、命令历史、命令行编辑等。

tcsh是csh的增强版,加入了命令补全等功能,在FreeBSD、Mac OS X等系统上替代了csh。

以上介绍的这些Shell中,较为通用的是标准的Bourne shell (sh)和C shell (csh)。其中Bourne shell

(sh)已经被Bourne Again shell (bash) 取代。

可通过以下命令查看CentOS7系统的Shell支持情况。

[root@oldboy ~]# cat /etc/shells

/bin/sh #<==这是Linux里常用的Shell,指向/bin/bash。

/bin/bash #<==这是Linux里常用的Shell,也是默认使用的Shell。

/usr/bin/sh

/usr/bin/bash

Linux系统中的主流Shell是bash,bash是由Bourne

Shell(sh)发展而来的,但bash还包含了csh和ksh的特色,但大多数脚本都可以不加修改地在sh上运行,如果你使用sh后发现结果和预期有差异,那么可以尝试使用bash替代sh。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7633430.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存