1、前言
接著要說明在使用各種指令時常常會搭配使用的萬用字元。- *: 零個 或 多個 字元即符合條件。
- ?: 任何 單一 字元即符合條件。
- [0-9]: 此指定 數字區段 中即符合條件 (即 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 只要其一符合即可)。
- [abc]: 此指定 英文字元名單 中即符合條件 (即 a, b, c 只要其一符合即可)。
- [^abc]: 排除 此指定英文字元名單中即符合條件 (即不要 a, b, c 其一即可)。
文章目錄
1、前言2、萬用字元應用示範
3、History 指令
4、Shell Scripts 基本知識
2、萬用字元應用示範
如下範例即為上述符合條件的應用,利用 * 配合指令 ls 查看 /dev/ram 下檔案,只要零個或多個條件滿足即符合此條件,因此我們可看到結果如下:- /dev/ram: 滿足 零個 字元符合條件。
- /dev/ram0 ~ 15: 滿足 多個 字元符合條件。
# ls /dev/ram*
/dev/ram0 /dev/ram10 /dev/ram12 /dev/ram14 /dev/ram2
/dev/ram4 /dev/ram6 /dev/ram8 /dev/ram1 /dev/ram11
/dev/ram13 /dev/ram15 /dev/ram3 /dev/ram5 /dev/ram7
/dev/ram9
也可將 * 符號利用於切換路徑上,例如我們常常會切換到網路卡設定檔路徑如下,透過 * 我們可進行目錄的快速切換。
# ls /etc/sysconfig/network-scripts/ifcfg-eth0 //透過補位鍵輸入路徑
/etc/sysconfig/network-scripts/ifcfg-eth0
# ls /e*/s*/n*s/i*0 //透過 * 切換路徑
/etc/sysconfig/network-scripts/ifcfg-eth0
利用 ? 配合指令 ls 查看 /dev/ram 下檔案,只要單一個字元即滿足符合條件,因此我們可看到結果如下。
- /dev/ram 0 ~ 9: 滿足單一個字元符合條件
- /dev/ram: 零個字元 (不符合條件)
- /dev/ram 11 ~ 15: 多個字元 (不符合條件)
# ls /dev/ram?
/dev/ram0 /dev/ram1 /dev/ram2 /dev/ram3 /dev/ram4
/dev/ram5 /dev/ram6 /dev/ram7 /dev/ram8 /dev/ram9
利用 [1-5] 配合指令 ls 查看 /dev/ram 下檔案,只要此指定數字區段內任一個字元即滿足符合條件,因此我們可看到結果如下。
- /dev/ram 1 ~ 5: 滿足單一個字元符合條件
- /dev/ram: 零個字元,沒有數字區段 (不符合條件)
- /dev/ram 6 ~ 15: 不在指定的數字區段內 (不符合條件)
# ls /dev/ram[1-5]
/dev/ram1 /dev/ram2 /dev/ram3 /dev/ram4 /dev/ram5
我們先利用指令 touch 來建立一連串檔案後利用 [acf] 配合指令 ls 查看指定的英文字元名單符合條件者 (即 a, c, f 只要其一符合即可),因此我們可看到結果如下。
- filea、filec、filef: 符合此指定英文字元名單中
- fileb、filed、filee、fileg、filex、filey、filez: 不在指定的英文字元名單中 (不符合條件)
# 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 Oct 12 09:39 filea
-rw-r--r--. 1 root root 0 Oct 12 09:39 filec
-rw-r--r--. 1 root root 0 Oct 12 09:39 filef
如果指定的英文字元不在搜尋名單中怎辨? 前面有說過只要其中有符合的條件即列出 (也就是 或),如下列搜尋條件中可看到 fileo 並不在所有檔案中因此未顯示且指令也不會發生錯誤,我們可看到結果如下:
# ls -l file[afo]
-rw-r--r--. 1 root root 0 Oct 12 09:39 filea
-rw-r--r--. 1 root root 0 Oct 12 09:39 filef
利用 [a-g] 配合指令 ls 查看檔案,只要此指定英文字元區段內任一個字元即滿足符合條件 (即 a, b, c, d, e, f, g 只要其一符合即可),因此我們可看到結果如下。
- file a ~ g: 滿足英文內單一字元符合條件。
- file x ~ z: 不在指定的英文字元內 (不符合條件)。
# ls -l file[a-g]
-rw-r--r--. 1 root root 0 Oct 12 09:39 filea
-rw-r--r--. 1 root root 0 Oct 12 09:39 fileb
-rw-r--r--. 1 root root 0 Oct 12 09:39 filec
-rw-r--r--. 1 root root 0 Oct 12 09:39 filed
-rw-r--r--. 1 root root 0 Oct 12 09:39 filee
-rw-r--r--. 1 root root 0 Oct 12 09:39 filef
-rw-r--r--. 1 root root 0 Oct 12 09:39 fileg
利用 [^a-g] 配合指令 ls 查看檔案,排除此指定英文字元區段內任一個字元即滿足符合條件 (即 a, b, c, d, e, f, g 只要其一符合即排除),因此我們可看到結果如下。
- file x ~ z: 不在指定的排除英文字元名單內 (不符合條件,所以未排除,結果就是顯示檔案名稱)。
- file a ~ g: 滿足英文內單一字元符合條件 (符合條件,所以排除,結果就是不顯示)。
# ls -l file[^abcdefg]
-rw-r--r--. 1 root root 0 Oct 12 09:39 filex
-rw-r--r--. 1 root root 0 Oct 12 09:39 filey
-rw-r--r--. 1 root root 0 Oct 12 09:39 filez
3、History 指令
我們可使用指令 history 來了解執行過的指令,並可配合相關快速捷徑來達成再次執行 history 內的指令。- !!: 執行 history 中最後一個指令。
- !字元 (char): 執行 history 中離目前最接近此字元的指令。
- !數字 (number): 執行 history 中對應該數字行數的指令。
- Ctrl + r: 按下此鍵後會顯示 (reverse-i-search) 符號,您可輸入關鍵字而系統會快速尋找相關開頭且執行過的指令。
- 快速呼叫最後一次執行的 Argument: 例如執行指令 ping -c2 168.95.1.1 所以 168.95.1.1 即為 Argument 您可透過下列三種方式來快速呼叫此 Argument,「ESC 後按下 .、Alt + .、!$」。
如下範例即為上述說明的應用:
# 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
4、Shell Scripts 基本知識
以下為建立 Shell Scripts 的基本知識:- 開頭為#! 之後接著要使用的 Shell (例如#!/bin/bash),而在 Script 中通常使用# 來表示該行為註解。
- 建立 Script 完成後記得 給予 x 權限 (chmod u+x)。
- 若您將建立好的 Script 存放於使用者路徑設定中,則可直接使用檔案名稱來執行 Script 而不用輸入絕對路徑或相對路徑來執行該 Script。
以下為 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