Bash 脚本就是一个包含一系列 Bash 命令的文件。Shell 读取这个文件,然后执行文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。所有能够在命令行中完成的任务也能够用脚本来实现。
脚本中,#表示注释。
# This is our first script.
echo 'Hello World!'
echo 'Hello World!' # This is a comment tooshebang用来指定执行脚本的二进制文件,通常在脚本的第一行。
#!/usr/bin/bash上面命令指定,执行脚本的二进制文件是/usr/bin/bash。
这种写法有一个问题,就是如果用户的bash可执行文件不在/usr/bin,脚本就无法执行了。为了解决这个问题,可以写成下面这样。
#!/usr/bin/env bashenv命令总是在/usr/bin里面,它会在指定环境之中运行一个程序。上面命令的意思是,在bash里面运行下面的脚本。如果要执行Node脚本,可以写成下面这样。
#!/usr/bin/env node#!/usr/bin/env NAME使得Shell查找,$PATH环境变量里面第一个匹配的NAME。如果你不知道某个命令的路径,这样的写法就很有用。
这样写的好处是,只要bash的路径是在$PATH路径里面,就总是能找到它。
env命令的参数。
- -i, --ignore-environment:不带环境变量启动
- -u, --unset=NAME:从环境变量中删除一个变量
- --help:显示帮助并退出
- --version:输出版本信息并退出
下面是一个例子,新建一个不带任何环境变量的Shell。
$ env -i /bin/shexit命令用于终止当前脚本的执行,并向Shell返回一个退出码。
$ exit上面命令中止当前脚本,将最后一条命令的退出状态,作为整个脚本的退出状态。
exit命令后面可以跟参数,该参数就是退出状态。
$ exit 1退出时,脚本会返回一个退出值。脚本的退出值,0表示正常,1表示发生错误,2表示用法不对,126表示不是可执行脚本,127表示命令没有发现。如果脚本被信号N终止,则退出值为128 + N。简单来说,只要退出值非0,就认为执行出错。
上一条命令的退出状态,可以用系统变量$?查询。使用这个命令,可以知道上一条命令是否执行成功。
exit与return命令的差别是,return命令是函数的退出函数,并返回一个值给调用者。如果在函数之中,调用exit,则退出函数,并终止脚本执行。