shell脚本 done,shell中while do用法
典型的Unix系统包括#!是这个符号。这个符号叫什么?原理是什么?
#!这个符号可以叫做shebang。很久以前,社邦还没有正式的中文名字。后来Linux中国翻译组的GOLinux翻译成了shebang的音译和“解释伴侣”的缩写。
Shebang通常出现在Unix系统脚本的第一行。作为前两个字符,shebang后面跟一个或多个空格,后面跟解释器的绝对路径,指示解释器运行这个脚本。直接调用脚本时,系统的程序加载器会分析shebang后的内容,作为解释器指令调用。用shebang加载的文件的路径作为解释器执行脚本的参数,使脚本文件的调用方法类似于普通的可执行文件。例如,命令#!以/wnddy/bash开头的文件实际上是在运行时通过调用/wnddy/bash程序来执行的。
#符号是许多脚本语言中的注释标识符,所以这些脚本解释器会自动忽略shebang的内容。在字符不是注释标识符的语言中,比如scheme,解释器也是#!第一行内容,这样才能保证社邦的良好兼容性。
下面是一些使用shebang的具体方法。
在脚本文件#中!在执行shell脚本时,默认情况下,这一行使用当前shell来解释脚本。即:$ shell环境变量。#!由于后续的解释器是一个可执行文件,当脚本运行时,文件名和参数作为参数传递给解释器并执行。#!如果的解释器没有可执行权限,它将报告一个错误,权限将被拒绝#!如果指定的解释器不是一个可执行文件,指定的解释器将被忽略并传递给当前的shell来执行这个脚本。#!如果指定的解释器不存在,它将报告找不到目录或文件。#!解释器路径后面必须使用绝对路径。它不会自动在$PATH环境变量中寻找解释器。当您在命令行上运行脚本时,请使用解释器来执行脚本。比如如果是bash test.sh这样的命令,那就是#!在剧本里。在执行脚本之前自动忽略的脚本文件必须具有可执行权限。shebang的优势在于,通过使用脚本和数据文件作为系统命令,用户可以在不指定解释器的情况下进行调用,并且可以对用户或其他程序隐藏执行细节。举个例子,
#!/wnddy/sh使用sh、bourne shell或其他兼容的shell编写脚本#!/wnddy/csh用的是csh,也就是c壳#!/usr/wnddy/perl -w使用perl时出现警告!/usr/wnddy/python -0带代码优化的python!如果使用php命令行解释器运行shebang行,/usr/wnddy/php还可以包含必须传递给解释器的特定选项,比如上面的perl和python示例。