---------------- 编写完脚本之后,你可以使用sh scriptname,[5]或者bash scriptname来调用它.(不推荐使用sh <scriptname,因为这禁用了脚本从stdin中读数据的功能.)更方便的方法是让脚本本身就具有可执行权限,通过chmod命令可以修改.
比如: chmod 555 scriptname (允许任何人都具有 可读和执行权限) [6] 或: chmod +rx scriptname (允许任何人都具有 可读和执行权限) chmod u+rx scriptname (只给脚本的所有者 可读和执行权限)
既然脚本已经具有了可执行权限,现在你可以使用./scriptname.[7]来测试它了.如果这个脚本以一个"#!"行开头,那么脚本将会调用合适的命令解释器来运行.
最后一步,在脚本被测试和debug之后,你可能想把它移动到/usr/local/bin(当然是以root身份),来让你的脚本对所有用户都有用.这样用户就可以直接敲脚本名字来运行了.
注意事项: [1] 那些具有UNIX味道的脚本(基于4.2BSD)需要一个4字节的魔法数字,在#!后边需要一个 空格#! /bin/sh. [2] 脚本中的#!行的最重要的任务就是命令解释器(sh或者bash).因为这行是以#开始的,当命令解释器执行这个脚本的时候,会把它作为一个注释行.当然,在这之前,这行语句, 已经完成了它的任务,就是调用命令解释器.
如果在脚本的里边还有一个#!行,那么bash将把它认为是一个一般的注释行. 1 #!/bin/bash 2 3 echo "Part 1 of script." 4 a=1 5 6 #!/bin/bash 7 # 这将不会开始一个新脚本. 8 9 echo "Part 2 of script." 10 echo $a # Value of $a stays at 1. [3] 这里可以玩一些小技巧. 1 #!/bin/rm 2 # 自删除脚本. 3 4 # 当你运行这个脚本时,基本上什么都不会发生...除非这个文件消失不见. 5 6 WHATEVER=65 7 8 echo "This line will never print (betcha!)." 9 10 exit $WHATEVER # 没关系,脚本是不会在这退出的. 当然,你还可以试试在一个README文件的开头加上#!/bin/more,并让它具有执行权限.结果将是文档自动列出自己的内容.(一个使用cat命令的here document可能是一个更好的选则,--见Example 17-3). [4] 可移植的操作系统接口,标准化类UNIX操作系统的一种尝试.POSIX规范可以在 http://www.opengroup.org/onlinepubs/007904975/toc.htm中查阅. [5] 小心:使用sh scriptname来调用脚本的时候将会关闭一些Bash特定的扩展,脚本可能 因此而调用失败. [6] 脚本需要读和执行权限,因为shell需要读这个脚本. [7] 为什么不直接使用scriptname来调用脚本?如果你当前的目录下($PWD)正好有你想要执行的脚本,为什么它运行不了呢?失败的原因是,出于安全考虑,当前目录并没有被加在用户的$PATH变量中.因此,在当前目录下调用脚本必须使用./scriptname这种形式.
2.2 初步的练习 -------------- 1. 系统管理员经常会为了自动化一些常用的任务而编写脚本.举出几个这种有用的脚本的实例. 2. 编写一个脚本,显示时间和日期,列出所有的登录用户,显示系统的更新时间.然后这个脚本将会把这些内容保存到一个log file中. |