在shell脚本的第一行通常为#!/bin/sh,指定执行shell script的解释器版本。有bash,dash等。Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell。事实上,还有许多传统UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同。
bash的命令语法是Bourne shell命令语法的超集。数量庞大的Bourne shell脚本大多不经修改即可以在bash中执行,只有那些引用了Bourne特殊变量或使用了Bourne的内置命令的脚本才需要修改。bash的命令语法很多来自Korn shell(ksh)和C shell(csh),例如命令行编辑,命令历史,目录栈,$RANDOM和$PPID变量,以及POSIX的命令置换语法:$(...)。作为一个交互式的shell,按下TAB键即可自动补全已部分输入的程序名,文件名,变量名等等。
使用'function'关键字时,Bash的函数声明与Bourne/Korn/POSIX脚本不兼容(Korn shell 有同样的问题)。不过Bash也接受Bourne/Korn/POSIX的函数声明语法。因为许多不同,Bash脚本很少能在Bourne或Korn解释器中运行,除非编写脚本时刻意保持兼容性。然而,随着Linux的普及,这种方式正变得越来越少。不过在POSIX模式下,Bash更加匹配POSIX。
dash是作为bash的子集,精简了很多,执行速度更快,但是也就少了些功能的支持。ubuntu从6.0开始默认使用dash。
使用ls -l /bin/sh 查看默认的shell版本
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 8月 12 01:47 /bin/sh -> dash
在ubuntu下shell脚本中使用source命令时,提示source command not found,此时有两种方法解决:
1>直接把头部引用改为 #!/bin/bash, 执行的时候用source *.sh 或 /bin/bash *.sh
2>sudo dpkg-reconfig bash,改变默认的shell为bash