第二章:Improving On User Commands--20.模仿另外一个环境: DIR

   不少计算机爱好者是从Unix或是Linux操做系统学起的,然而还有不少人是从别的系统学起的,使用不一样的命令、不一样类型的交互方式。好比说,颇有可能你公司的员工更习惯于使用DOS命令,而不是一个shell的解提示器。使用一系列的alias能够稍微减小一点这种差别,好比说将dos命令映射城unix的ls命令: 正则表达式

alias DIR=ls

   但若是用户学习过在dos下/w表示宽列表格式的话,这种映射就没什么效果了。由于unix命令会警告没有/w目录。取而代之,像以前写的那些改变输入的封装器同样,接下来的DIR脚本就是用来映射一种类型命令选项到另外一种环境中去。 shell

代码: ide

#!/bin/sh
 
 # DIR.sh -- 伪装咱们正使用DOS的dir命令
 # 使用dir命令显示给定文件的内容,该命令可接受标准的dir选项
 
 function usage
 {
     cat << EOF >&2
 Usage: $(basename $0) [DOS flags] directory or directories
 where:
 /D        sort by columns
 /H        show help for this shell script
 /N        show long listing format with filenames on right
 /OD        sort by oldest to newest
 /O-D    sort by newest to oldest
 /P        pause after each screenful of information
 /Q        show owner of the file
 /S        recursive listing
 /W        use wide listing format
 EOF
     exit 1
 }
 
 postcmd=""
 flags=""
 
 while [ $# -gt 0 ]
 do
     case $1 in
         /D)        flags="$flags -x";;
         /H)        usage;;
         /[NQW])    flags="$flags -l";;  # 正则表达式
         /OD)    flags="$flags -rt";;
         /O-D)    flags="$flags -t";;
         /P)        postcmd="more";;
         /S)        flags="$flags -s";;
         *)        break; # 未知选项:多是一个文件描述符;因此退出循环
     esac
     shift
 done
 
 if [ ! -z "$postcmd" ]; then
     ls $flags "$@" | $postcmd
 else
     ls $flags "$@"
 fi
 
 exit 0

脚本如何运行:
   这个脚本突出了一个真相:shell脚本中的case语句事实上是正则表达式,这个特性很是有用。你能够看到在dos中的/N、/Q、/W选项都被映射到了unix中ls命令的-l选项上。
   理论上用户应当被授予unix环境中的语法和选项,但那并不必定是必须的。固然,在调用这个脚本前能够查看脚本中的帮助选项来了解全部的映射选项。 post

   运行脚本:
   将脚本命名为DIR.sh,当用户在命令行上键入典型的DOS命令选项时,就会产生一个有意义的输出,而不是之前的那种错误信息:command not found 学习

运行结果: this

$ DIR /OD /S /Volumes/110GB/ 
 total 60680 
    0 WEBSITES                        64 Desktop DB 
    0 Writing                          0 Temporary Items 
    0 Microsoft Office X           29648 Norton FS Volume 2 
    0 Documents                    29648 Norton FS Volume 
    0 TheVolumeSettingsFolder          0 iTunes Library 
    0 Trash                            8 Norton FS Index 
 816 Norton FS Data                   0 Desktop Folder 
 496 Desktop DF                       0 Desktop Picture Archive
这个目录下的排序方式是从最旧的到最新的,同时显示了文件大小。
相关文章
相关标签/搜索