# /bin/bash 和/bin/sh区别
脚本头通常是程序执行过程中的解释器。我们在编写脚本时脚本头常见的有两种书写方式。
```
#!/bin/bash
或
#!/bin/sh
```
注:当然还有一种熟悉方式\#!/usr/bin/env bash 这里暂时不做讨论。
那这两种方式有什么区别呢,我们来看网上的一个案例test.sh。
```
#!/bin/sh
source pcy.sh # pcy.sh文件并不存在
echo hello
[root@blog.puppeter.com_centos ~]# ./test.sh
./test.sh: line 2: pcy.sh: No such file or directory
```
如果将/bin/sh改为/bin/bash,就会打印出hello。
```
#!/bin/bash
source pcy.sh # pcy.sh文件并不存在
echo hello
[root@blog.puppeter.com_centos ~]# ./test.sh
./test.sh: line 2: pcy.sh: No such file or directory
hello
```
那sh和bash有什么区别呢? 其实/bin/sh就是Linux系统中的一个软连接,他指向了/bin/bash并开启了--posix参数,所以他们的区别就是一个bash加载了--posix参数一个没有加载,关于posix模式对Bash的影响这里可以参考https://www.gnu.org/software/bash/manual/html\_node/Bash-POSIX-Mode.html。
- Introduction
- 1.Shell编程基础
- 什么是Shell
- 编写第一个Bash程序
- 2.变量
- 什么是变量
- 变量四种赋值方式
- 指定变量类型
- 变量的类型
- 特殊变量
- 3.Bash符号相关
- Bash符号相关
- 特殊符号
- 数学运算符号
- 4.内建命令与外部命令
- 内建命令与外部命令
- 5.read命令
- read命令
- 6.条件语句
- if..then..fi
- if..then..else..fi
- if..then..elif..fi
- 空命令
- 文件测试符
- 字符串判断、与、或和非
- []与[[]]符号
- 7.Bash循环 && 分支语句
- while循环语句
- for循环
- for..in循环
- until循环
- select循环
- case分支语句
- 8.正则表达式
- 正则表达式
- 9.子Shell和受限Shell
- 子Shell
- 受限Shell
- 10.函数与函数的加载
- 函数语法与案例
- 递归函数
- 函数的加载
- 11.Bash脚本风格
- Bash脚本风格
- 12.Bash脚本调试
- Bash脚本调试
- 13.sed && awk
- sed
- 14.awk
- awk
- 15 Bash杂项 && 案例
- while循环的陷阱
- Bash的生命周期
- IO重定向
- /bin/bash和/bin/sh区别
- 命令杂项
- Shell加密
- 16.10.2.案例
- Bash版回收站
- 17.Bash中文速查表
- 中文速查表