不少計算機愛好者是從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這個目錄下的排序方式是從最舊的到最新的,同時顯示了文件大小。