站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Unit6-Using the bash Shell

Command Line Shortcuts File Globbing

如下範例即為上述符合條件的應用:

 #ls /dev/ram*
 /dev/ram   /dev/ram1   /dev/ram11  /dev/ram13  /dev/ram15  /dev/ram3  /dev/ram5  /dev/ram7  /dev/ram9
 /dev/ram0  /dev/ram10  /dev/ram12  /dev/ram14  /dev/ram2   /dev/ram4  /dev/ram6  /dev/ram8

也可將 * 符號利用於切換路徑上,例如我們常常會切換到網路卡設定檔路徑如下,透過 * 我們可進行目錄的快速切換

 #ls /etc/sysconfig/network-scripts/ifcfg-eth0         //透過補位鍵輸入路徑
 #ls /e*/s*/n*s/ifcfg-eth0                             //透過 * 切換路徑
 #ls /dev/ram?
 /dev/ram0  /dev/ram1  /dev/ram2  /dev/ram3  /dev/ram4  /dev/ram5  /dev/ram6  /dev/ram7  /dev/ram8  /dev/ram9
 #ls /dev/ram[1-5]
 /dev/ram1  /dev/ram2  /dev/ram3  /dev/ram4  /dev/ram5
 #touch file{a,b,c,d,e,f,g,x,y,z}
 #ls
 filea  fileb  filec  filed  filee  filef  fileg  filex  filey  filez
 #ls -l file[acf]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filea
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filec
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filef

如果指定的英文字元不在搜尋名單中怎辨? 前面有說過只要其中有符合的條件即列出 (也就是 ),如下列搜尋條件中可看到 fileo 並不在所有檔案中因此未顯示且指令也不會發生錯誤,我們可看到結果如下

 #ls -l file[afo]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filea
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filef
 #ls -l file[a-g]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filea
 -rw-r--r-- 1 root root 0 Aug 14 08:14 fileb
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filec
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filed
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filee
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filef
 -rw-r--r-- 1 root root 0 Aug 14 08:14 fileg
 #ls -l file[^abcdefg]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filex
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filey
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filez

Command Line Shortcuts the Tab Key

在指令模式下可以善用 <Tab> 補位鍵,當您鍵入檔案或資料夾前面幾個字元後可試著按下 tab 鍵來進行補位,若有相同開頭字元時則當您按下第二次 tab 鍵欲進行補位時系統會列出相關開頭檔案及資料夾,如下所示

 #cd /etc/sys                             //按下 2 次 tab 鍵後系統顯示相關檔案及資料夾
 sysconfig/   sysctl.conf  syslog.conf

Command Line Shortcuts History

我們可使用指令 history 來了解執行過的指令,並可配合相關快速捷徑來達成再次執行 history 內的指令。

如下範例即為上述說明的應用:

 #history
    1  history
    2  cat /etc/passwd
    3  touch 111
    4  ls
    5  cat /etc/group
    6  history
 #!!                            //執行最後一行指令
 history
 #!c                            //再次執行離目前最接近 c 字元的指令
 cat /etc/group
 #!4                            //執行 history 中第四行指令
 ls

Command Line Expansion the tilde

在切換路徑的過程中您可透過波浪狀 (~) Tilde 來達到快速切換至使用者家目錄的功能,而若您是 Root 也可利用此符號來快速切換至指定的使用者家目錄

 $cd                            //使用者 weithenn 切換路徑至家目錄
 $cd ~                          //使用者 weithenn 切換路徑至家目錄
 #cd ~weithenn                  //Root 切換路徑至 weithenn 家目錄

Creating Shell Scripts

以下為建立 Shell Scripts 的基本知識

以下為 Root 路徑設定資訊

 #echo $PATH
 /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

以下為使用者 weithenn 路徑設定資訊,所以若使用者建立好 Script 後存放於家目錄下 bin 資料夾中即可不用輸入絕對路徑或相對路徑來執行該 Script

 $echo $PATH
 /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/weithenn/bin

Lab

Lab1. 請將資料夾中檔案全部刪除,但請留下附檔名為 .pi、.ps、.perl、.psd 的檔案

Ans:

請鍵入如下指令來建立相關檔案及附檔名

 #touch test{0,1}{.pdf,.ps}
 #touch test2{.perl,.pi,.ppt,.psd}
 #ls -l
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test0.pdf
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test0.ps
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test1.pdf
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test1.ps
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.perl
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.pi
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.ppt
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.psd

若怕直接執行 rm 指令刪錯的話可利用指令 echo 來檢查是不是你要的條件,下列三種方式皆適用於處理此次的問題,當然解法也不只這三種請自行發揮吧,測試完成後只要將 echo 指令換成 rm 即可進行刪除。

 #echo t*[^.pi.ps.perl.psd]                 //排除附檔名為 .pi, .ps, .perl, .psd
 test0.pdf test1.pdf test2.ppt
 #echo t*[^.pisderl]                        //排除附檔名為 .pi, .ps, .perl, .psd
 test0.pdf test1.pdf test2.ppt
 #echo t*.p?[^d]                            //排除附檔名第三個字元為 d 的檔案
 test0.pdf test1.pdf test2.ppt
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com