命令行与 shell 脚本
有时会用到 shell 脚本,其他一些时间则要用到命令行。如果需要定期执行某项任务,或者任务非常复杂、需要进行数据处理,同时不需要用户反复键入各种命令,则适合使用 shell 脚本。有时,某些任务只需要执行一次并且相对简单,则使用命令行可以很好地完成这类任务。
例如,假设存在下列字典列表:
# ls
fileA.tar.gz fileAA.tar.gz fileB.tar.gz fileBB.tar.gz
如果只需要解压缩文件,并使用 bzip2 重新压缩,然后将它们传送到 ATC-AIX2 上,那么与其键入 shell 脚本,不如使用命令行。可以将 shell 脚本视为一次输入多个命令行条目,因为从某种意义上来说,这就是实际情况。在命令行上键入命令时,就像将它们输入到脚本中,然后执行脚本。
您希望遍历目录中以 gz 结尾的文件,解压这些文件,然后使用 bzip2 重新压缩它们,再对这些文件使用 scp 命令,将它们复制到目标 ATC-AIX 服务器上。循环在命令行中的工作效果与在脚本中同样出色。当开始 loop…if 条件语句、case switch 语句,或其他代码块语句时,您正在运行的 ksh 只会将光标移动到下一行,但提示符将更改为 $PS2。当代码块完成时,将执行代码块并使用户返回 $PS1 提示符。
也就是说:
" $PS1 提示符:等待下一个命令
" $PS1 提示符:代码块开始
" $PS2 提示符:代码块继续
" $PS2 提示符:代码块继续
" $PS2 提示符:代码块结束
" 代码块执行
" $PS1 提示符:等待下一个命令
变量 PS2 的缺省值为 >。返回前一个解压缩后重新压缩的功能,您只需在 ksh 命令行中键入以下内容:
# for _FNAME in 'ls -1 *.gz'
> do
> gzip -d ${_FNAME}
> bzip2 ${_FNAME%*.gz}
> scp ${_FNAME%*.gz}.bz2 cormany@ATC-AIX2:/home/cormany
> done
完成代码块(也就是说,使用 done 结束循环)后按 Enter 键,将开始执行循环。在命令行上键入的循环将搜索当前工作目录下以 .gz 结尾的所有文件,将这些文件解压缩,然后使用 bzip2 重新压缩它们,最后将它们复制到 ATC-AIX2 上的 /home/cormany 目录中。就是如此简单。
结束语
在阅读本文之后,您应当能够学会以新的方法使用 Korn shell。掌握命令行可以简化您的工作,并帮助您更好地理解如何在工作中充分利用 shell 和命令行,从而摆脱使用它们的困扰。