`
天梯梦
  • 浏览: 13641692 次
  • 性别: 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     

 

       

分享到:
评论

相关推荐

    BCM4322在CentOS 7驱动程序

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

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

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

    bash基础用法.docx

    /bin/bash 脚本声明 脚本的概念 将要执行的命令按照顺序保存到一个文本中 给文件相应的权限即可执行 结合控制语句可以完成复杂操作 脚本的应用场景 重复 批量事务处理 自动化运维 定期任务执行 服务器运行监控...

    Linux Crontab Shell脚本实现秒级定时任务的方法

    /bin/bash step=1 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(php '/home/www/php/crontab/crontab.php') sleep $step done exit 0 二、crontab -e 输入以下语句,然后:wq 保存退出 ...

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

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

    解析PyCharm Python运行权限问题

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

    kafka集群监控之KafkaOffsetMonitor 0.4.6版本地化(实测)

    /bin/bash java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m \ -cp KafkaOffsetMonitor-assembly-0.4.6-zjz.jar \ com.quantifind.kafka.offsetapp.OffsetGetterWeb \ --offsetStorage ...

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

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

    Shell脚本部署Prometheus+Grafana+Alertmanager

    一、部署包下载地址 1.百度网盘 ...提取码:to74 .../bin/bash #AUTHOR:anqixiang #DATE:2020-02-15 #MODIFY: #FUNCTION:部署Prometheus+Grafana+Alertmanager #VERSION:Prometheus-V2.15 Grafana-V5.3.

    VOS30002120 Watchdong Service

    /bin/bash while true do /etc/voscheck.sh sleep 1 done ----------------------------------- Press Esc button and write :wq Save this above file chmod 755 check5.sh cd /etc vi mbx3000.sh (Press i and...

    从数据库中取变量传递给shell,生成环境变量

    /bin/bash' from dual union all select 'export my_shell_para='||to_char(count(*)) from yourtable where create_time ='2012.06.09'; spool off exit 2. 主脚本,连续数据库,执行myshellpara.sql #!/bin/...

    实际生产xtrbackup 备份脚本

    /bin/bash # 00 20 * * * /backups/xtrabackup/script/xtrbackup_script.sh type xtrabackup >/dev/null 2>&1 || { echo >&2 "I require xtrabackup but it's not installed. Aborting."; exit 1; } ### 变量定义 ...

    shell脚本:一键配置本地yum源仓库

    /bin/bash #date:2020-2-20 #描述:一键配置本地yum源仓库 echo [正在检测是否挂载磁盘----------] mount /dev/cdrom /mnt &> /dev/null cd /mnt/Packages/ if [ $? -eq 0 ] then echo 已将系统安装光盘挂载至/...

    shell注意事项不建议下载

    /bin/sh将调用默认的命令解释器,这在Linux系统上是/bin/bash. 运行脚本: chmod 555 scriptname (使每个人都有读和执行的权限) [6] 也可以: chmod +rx scriptname (使每个人都有读和执行的权限) chmod u+rx script...

    在服务器跑python定时任务

    1、Python自带模块 .../bin/bash #这里python3要写绝对路径 sudo python3 /root/timetask/timetask.py \r echo $(date +%Y-%m-%d %H:%M:%S) '执行完毕' exit 0 给权限 不然跑不了 原创文章 4获赞 1访问量 3359

    离线Shell脚本自动化部署Fastdfs

    /bin/bash #关闭防火墙 systemctl stop firewalld.service setenforce 0 #安装编译环境 yum install -y git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget...

    kaldi例子学习

    /bin/bash # Copyright Ondrej Platek Apache 2.0 renice 20 $$ # Load training parameters . ./env_voip_cs.sh ;;设置环境变量,各种参数文件夹名称== # Source optional config if exists [ -f env_voip_cs_...

    使用tar备份linux

    /bin/bash # NAME : backup.sh # 2006-03-24 Ver 1.0 Osmond # # 请根据您的需要修改如下变量的值 BACKUPDIR=/backups/dat # 备份文件存放的目录 BACKUPLISTDIR=/backups/list # 要备份目录的文件列表 BACKUPLOGDIR=...

    输出执行操作和打印日志的shell脚本实例

    /bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显示打印日志的时间 USER=$(whoami) ####那个用户在操作 echo “${DATE...

    sbang:用很长的shebang(#!)行运行脚本

    /bin/sh /path/to/sbang#! /long/path/to/real/interpreter with many arguments sbang将使用脚本作为参数运行真正的解释器。为什么? 大多数人都不会遇到长期的麻烦。 如果您在深层嵌套的目录中安装软件,它们可能...

Global site tag (gtag.js) - Google Analytics