网络通信 频道

对话 UNIX: 从简单的按键操作学起

  命令行与 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 和命令行,从而摆脱使用它们的困扰。

 

0
相关文章