导言
本节将讲一讲shell的"#!行"的意义和具体作用,主要记录基础内容以及容易遗漏的要点。
1. #!的作用
#!的作用是:告知unix内核引用#!符号后所指定的解释器来解释执行该脚本程序。这样做的好处是让用户能够引用任何语言的解释器。
通常shell脚本首句会以#!/bin/bash开头。
- #!/bin/bash #sample 1 默认
- ... "#!行"制定的解释器必须用绝对路径;
- ---------------------------------------
- #! /bin/bash -x #sample 2 传递参数
- ... #shell按照/bin/bash -x 执行
2. 任意引用脚本解释器
不光是shell,我们还可以引用任何脚本解释器。
- #!/bin/awk -f #sample 3 引用awk解释器
- awk code here
- ---------------------------------------
- #! /usr/bin/perl -w #sample 4 引用perl解释器
- perl code here
区别:显示提供解释器执行脚本源程序,#!会被忽略。
以下是测试脚本,输出当前解释器的md5签名。
- #! /bin/csh -x #csh执行
- md5sum /proc/$$/exe #内置变量$$可以得到本进程id
- ---------------------------------------
- #1dbb32aa0dd6b341155d05ea564c2c4a /bin/csh的md5
- #a43f08494674e2da1a8e3547d0991e88 /bin/bash的md5
- $ ./interpreter.sh
- md5sum /proc/32623/exe
- 1dbb32aa0dd6b341155d05ea564c2c4a /proc/32623/exe #csh的md5
- $ bash interpreter.sh
- a43f08494674e2da1a8e3547d0991e88 /proc/30407/exe #bash的md5
4. #! 空选项防止***行为
"-"表示选项空,防***的具体原因待研究
- #!/bin/bash - #空选项
- shell code here
技巧汇总
- 内置变量$$可以得到所在进程的pid
- #! - 可以防止某些脚本***行为
参考资料
shell脚本学习指南 O'reilly Preface and Chapter 2
转载于:https://blog.51cto.com/w55554/1134262