`
天梯梦
  • 浏览: 13731280 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

#!/bin/sh与#!/bin/bash的区别

 
阅读更多

Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh)、C shell (csh) 和 Korn shell (ksh), 各有优缺点。Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用, 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bourne shell 完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。      

 

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

 

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

luotaijia@ubuntu:~$ ls -l /bin/sh /bin/bash     
-rwxr-xr-x 1 root root 801808 2010-08-11 03:58 /bin/bash     
lrwxrwxrwx 1 root root 4 2012-11-28 08:06 /bin/sh -> dash    

 

应该说, /bin/sh 与 /bin/bash 虽然大体上没什么区别, 但仍存在不同的标准. 标记为 “#!/bin/sh” 的脚本不应使用任何 POSIX 没有规定的特性 (如 let 等命令, 但 “#!/bin/bash” 可以). Debian 曾经采用 /bin/bash 更改 /bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过 shell 脚本测试存在运行问题。因为原先在 bash shell 下可以运行的 shell script (shell 脚本),在 /bin/sh 下还是会出现一些意想不到的问题,不是100%的兼用。 

a=12345
let "a += 1"
echo "a = $a"
b=${a/23/BB}
echo "b = $b"        

luotaijia@ubuntu:~/文档/shell学习练习$ /bin/sh 3.2..1.sh    
3.2..1.sh: 3: let: not found    
a = 12345    
3.2..1.sh: 6: Bad substitution    
luotaijia@ubuntu:~/文档/shell学习练习$ /bin/bash 3.2..1.sh    
a = 12346    
b = 1BB46    
luotaijia@ubuntu:~/文档/shell学习练习$    

 

注: b=${a/23/BB} 把变量a中的23(仅限第一次出现)替换成BB, 并赋值给 b.

 

来源:http://blog.chinaunix.net/uid-27037833-id-3431985.html     

 

       

分享到:
评论

相关推荐

    #!/usr/bin/expect

    在给定的压缩包文件中,ssh_run.sh 可能是一个使用 Expect 编写的SSH自动化脚本。你可以通过查看和分析这个脚本来深入了解 Expect 的具体用法。在实际工作中,掌握 Expect 能大大提高你的工作效率,尤其是在需要处理...

    shell中第一行#!_bin_bash的作用

    3. **直接执行与间接调用的区别**:如果脚本是通过直接执行命令(如`./script.sh`)来运行的,Shebang行将被正确解析。但如果是通过其他Shell命令(如`bash script.sh`)来执行,则Shebang行不会被使用,而是按照...

    ubuntu如何运行.sh文件,.sh文件运行提示脚本异常

    ubuntu执行.sh文件,1 .sh文件是Ubuntu下可执行文件,首先需要确定它的权限是否是可执行的,2、 用vim打开sh文件,3、查看文件格式:4. 修改文件格式: 5. 保存退出: 6. 执行:./filename .../bin/bash

    linux上通过sh方式启动java jar程序并做为守护进程

    /bin/bash` 是一个shebang,指定该脚本使用bash解释器执行。 2. `JAR_FILE_PATH`变量存储了JAR文件的完整路径。 3. `MAIN_CLASS`变量定义了Java程序的主要类名,这是JAR文件的入口点。 4. 使用`nohup`命令启动Java...

    BCM4322在CentOS 7驱动程序

    CentOS7.4下编译测试通过。改进了程序并增加了安装说明。 # cat README 1、以root身份执行如下语句.../bin/bash for M in lib80211 cfg80211 wl; do modprobe $M &>/dev/null done 这样,驱动就会开机启动啦!

    linux 一键启动 jar包 批处理脚本

    /bin/bash # 定义变量 JAR_FILE_PATH="/path/to/your/app.jar" # 定义函数 start() { ... } stop() { ... } restart() { ... } # 检查参数 case $1 in start) start ;; stop) stop ;; restart) restart ...

    windows下写的shell脚本在linux执行出错的解决办法

    在Windows下写了一个shell脚本,上传到Linux下执行时报错: 代码如下:[root@localhost test]# ./test.sh -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory test.sh源码: 代码如下:#!/bin...

    ubuntu-编译时出现-bin-sh-1-pushd- not found.pdf

    因此,当构建脚本尝试通过`/bin/sh`执行时,实际上是在调用dash,而非预期中的bash。 #### 三、解决方案 针对上述问题,可以采取以下几种解决方案: 1. **修改脚本第一行**: - 如果是独立的脚本文件出现问题,...

    解析PyCharm Python运行权限问题

    /bin/bash sudo /usr/bin/python "$@" 给到其执行权限: chmod +x ~/bin/python-sudo.sh 第二步 让当前用户执行 sudo python 不需要输入密码执行: sudo visudo -f /etc/sudoers.d/python 此时会自动创建 /etc/

    一个linux脚本sh教学示例

    /bin/bash #!/bin/rm # 自删除脚本. LOG_DIR=/var/log ROOT_UID=0 # $UID 为 0 的时候,用户才具有根用户的权限 LINES=50 # 默认的保存行数 E_XCD=66 # 不能修改目录? E_NOTROOT=67 # 非根用户将以 error 退出 if ...

    02-SHELL编程之流程控制和循环语句

    /bin/bash # Name:ping.sh # Path:/shell02/ # Usage:/shell02/ping.sh # ... #获取远程主机的IP地址(定义变量让用户自己输入) read -p "请输入你要ping的远程主机IP:" IP #使用ping命令来判断是否和远程主机互通...

    linux shell脚本编程

    /bin/sh`或`#!/bin/bash`,这被称为sha-bang行。这一行指定了脚本将被哪个解释器执行。例如: ```bash #!/bin/bash ``` 这段代码意味着脚本应该由`bash`解释器来执行。 #### 三、Shell脚本的核心要素 ##### 3.1 ...

    解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题

    以上所述是小编给大家介绍的解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! ...

    30分钟搞定BASH脚本编程

    ### BASH脚本编程基础与实战案例解析 #### 标题理解:30分钟搞定BASH脚本编程 本文档的标题“30分钟搞定BASH脚本编程”旨在传达一种高效学习的理念,即通过简短的时间内掌握BASH脚本的基础知识与实际应用技巧。...

    人性化解析shell脚本,保证快速入门sh,bash,shell入门.pdf

    "人性化解析shell脚本,快速入门sh、bash、shell入门" Shell脚本是Linux操作系统中的一种编程语言,用于自动化系统管理和任务执行。本文档旨在快速入门Shell脚本,帮助读者快速掌握Shell脚本的基本知识和使用方法...

    liunx编写脚本(循环).pdf

    /bin/bash for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip &> /dev/null if [ $? -eq 0 ]; then echo "IP $ip is reachable." fi done ``` 这段脚本会遍历192.168.1.1到192.168.1.254的每个IP地址,通过...

    linux下实现shell

    Linux下的Shell是操作系统与用户交互的主要接口,它是一种命令解释器,允许用户通过输入命令来执行系统操作。本文将深入探讨如何在Linux环境下实现基本的Shell功能,包括`ls`、`pwd`、`cd`以及`exit`。 首先,`ls`...

    shell编程简单例子代码

    /bin/bash`作为脚本的第一行,这被称为Shebang,用来告诉系统使用哪个Shell来执行这个脚本。 接下来,我们来看一些简单的Shell编程例子: 1. **变量的使用**: ```bash #!/bin/bash name="John Doe" echo ...

Global site tag (gtag.js) - Google Analytics