Linux(七):/bin/bash和/bin/sh的区别

目录

1、执行脚本test.sh

1.1、执行./test.sh

1.2、执行./test.sh

1.3、运行sh ./test.sh

1.4、为什么会有这样的区别呢?

2、sh 和./test.sh 执行脚本的区别

2.1、linux运行shell的几种方式:

./test.sh或/root/test.sh

sh test.sh

其他

sh绝对路径下的.sh文件无效,但是cd到目录,再sh可以


1、执行脚本test.sh

 脚本test.sh内容:

#!/bin/sh
source pcy.sh #pcy.sh并不存在
echo hello

1.1、执行./test.sh

屏幕输出为:

[hadoop@shizhan ~]$sh ./test.sh
./test.sh: line 2: pcy.sh: No such file or directory

由此可见

#!/bin/sh的情况下,source不成功,不会运行source后面的代码。

1.2、执行./test.sh

修改test.sh脚本的第一行,变为#!/bin/bash,再次执行./ test.sh

#!/bin/bash
source pcy.sh #pcy.sh并不存在
echo hello

屏幕输出为:

[hadoop@shizhan ~]$sh ./test.sh
./test.sh: line 2: pcy.sh: No such file or directory
hello

由此可见

#!/bin/bash的情况下,虽然source不成功,但是还是运行了source后面的echo语句

1.3、运行sh ./test.sh

这次屏幕输出为:

[hadoop@shizhan ~]$sh ./test.sh
./test.sh: line 2: pcy.sh: No such file or directory

表示虽然脚本中指定了#!/bin/bash,但是如果使用sh 方式运行,如果source不成功,也不会运行source后面的代码。

1.4、为什么会有这样的区别呢?

sh一般设成bash的软链

[work@zjm-testing-app46 cy]$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Nov 13 2006 /bin/sh -> bash
  1. 在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式
  2. 也就是说 /bin/sh 相当于 /bin/bash --posix

所以,sh跟bash的区别,实际上就是bash有没有开启posix模式的区别

so,可以预想的是,如果第一行写成 #!/bin/bash --posix,那么脚本执行效果跟#!/bin/sh是一样的(遵循posix的特定规范,有可能就包括这样的规范:“当某行代码出错时,不继续往下解释”)

2、sh ./test.sh和./test.sh 执行脚本区别



2.1、linux运行shell的几种方式:

./test.sh 或 /root/test.sh

当没有配置在环境变量(PATH)中时,用这种方式。
./ 表示在当前目录下执行脚本



sh ./test.sh   或  sh test.sh

当没有./ 权限的时候,用这种方式。
把test.sh 交给 bash去处理,不用权限,也不用 #!/bin/bash



其他



sh绝对路径下的.sh文件无效,但是cd到目录,再sh可以

这样启动无效:

sh /data/web/custom/current/startup.sh; 

这样启动有效:

cd /data/web/custom/current; 
sh startup.sh; 

后来终于发现了问题的所在,current是个软连接,指向其他的地址。

因此:直接用绝对路径肯定找不到这个文件。
但是先cd的话,会到软连接对应的实际地址,再sh是可以的。

3、~、“/”和“./”的含义

~ 代表的就是自己的家目录:  /Users/lihe

/是指根目录:就是所有目录最顶层的目录。

./表示当前目录,./ 一般需要和其他文件夹或者文件结合使用,指代当前目录下的东西。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值