簡單來說,Shell Script 就是將一堆指令存放在檔案裡,變成可以批次執行的程序稿(Script)。程序稿是一個可以執行的檔案,必須透過 Shell 來執行,所以稱之為 Shell Script。
Shell Script 檔案內,除了可以寫入要執行的指令外,也可以使用所謂的變數以及一些程式寫作的判斷式,如 if..then、for、do whil迴圈...等。程序稿可以幫助使用者或是管理者在操作方面節省許多的工作與時間。本單元先讓各為了解 Linux 系統中所謂的變數,包含環境變數、自訂變數與區域變數、全域變數,接著認識 Shell Script 寫作的方式與規則,最後練習 Shell Script 中的判斷是與變數的使用。
變數
什麼是變數(Variable)?簡單的說,就是在記憶體中指定一個特定的「名稱」,讓它可以存放一些指定的「值」(字串或是數字),而這些值在名稱不變的情況下,可以做任意的變動。舉個例子來說,您到銀行開立一個活存帳戶,有時候您會存款進帳戶,有時候也會將存款提出來,活存帳戶不變,但最後總計的存款會有變化。總結是-變數名稱不變,但變數內的值會改變。
變數它是在記憶體中進行的,也就是說關機後因為動態記憶體內的資料會被釋放,變數也會跟著消失,所以下次開機後必須重新指定變數,而通常我們會將變數的指定寫到 Shell Script 內,然後讓系統在開機程序中,能夠執行這些 Shell Script。
那麼變數到底是用來做什麼的?變數的功能主要是提供給程式使用,既然是變數當然內存的值會改變,也就是程式在運作過程需要用到的值,我們無法確知是否是固定的值,總不能因為變數一改變就得修正所設計的程式吧!所以,程式中需要用到這些可能會變動的值,就直接呼叫變數,從變數再把值給取出來使用。例如,我們在登入 Linux 系統時,每個使用者帳戶名稱都不同,登入時如何來依據所輸入的值來做驗證,這時候處理系統登入的程式,就會從鍵盤讀取輸入的值,放到變數中(或許這個變數叫做 USER ),然後程式中要處理時,就直接從變數讀取變數值來驗證。
變數的產生
變數指定的方式很簡單,就在提示字元下輸入「變數名稱=變數值」就可以了:
[root@mail root]# var01=12345 [root@mail root]# var02='abc' |
變數名稱大小寫有分別,可以是英文字母與數字混用,但特別注意不能以數字開頭,並且避免使用萬用字元。而變數值可以是字串,也可以是數字。
變數的取用
當您將變數設定完成後,如何取出變數的值來使用,是變數使用的最終目的。變數的取用其是很簡單,取用時只需要在變數名稱前加上「$」字號即可。為了讓各位能夠體驗一下變數的取用,我們以 echo 指令來將變數的值取出後,直接輸出到螢幕上
變數的查詢
記憶體內到底有多少變數存在著,可以使用 set 指令將所有變數顯示在螢幕上
[root@Linux lpi]# set BASH=/bin/bash BASH_ENV=/root/.bashrc BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") BASH_VERSION='2.05b.0(1)-release' COLORS=/etc/DIR_COLORS.xterm COLUMNS=80 DIRSTACK=() EUID=0 : 以下省略 |
變數的釋放
當變數已經不再使使用時,可以將它從記憶體釋放,不再佔住記憶體空間。釋放變數的方式很簡單,一般是使用 unset 指令來將指定的變數釋放:
[root@Linux lpi]# unset var02 ↑要釋放的變數 |
環境變數與自訂變數
而所謂的「環境變數」是在直譯器下的環境所使用到的變數,例如執行指令時的搜尋路徑 PATH 變數、使用者名稱 USERNAME 變數、使用者家目錄總管目錄 HOME 變數、系統預設的語系 LANG 變數...等,這些變數通常是在系統啟動過程的初始化程序搞,或是使用者登入時的登錄程序稿中設定。它可以提供給任何執行的程式或是程序稿來使用,並不會因為程式執行結束而消失,只有當直譯器(Shell)結束時,環境變數才會消失。
使用者可以使用 env 指令來顯示所有的環境變數:
[root@Linux lpi]# set [root@Linux lpi]# env | more HOSTNAME=Linux.indicator-online.net PVM_RSH=/usr/bin/rsh TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.1.19 1404 22 QTDIR=/usr/lib/qt3-gcc3.2 SSH_TTY=/dev/pts/0 USER=root : 以下省略 |
環境變數的值與自訂變數的值一樣都是可以變更的,同樣使用「變數名稱=變數值」就可以了。
環境變數名稱大部分都是大寫字母,以下是幾個常使用的環境變數:
* PATH 搜尋路徑
* SHELL 所使用的直譯器名稱
* HOSTNAME 主機名稱
* USERNAME 使用者名稱
* LOGNAME 登入的帳戶名稱
* HOME 使用者家目錄
* LANG 系統預設語系
* HISTSIZE 指令歷程容量大小
區域變數與全域變數的概念
誠如前述所言,程式設計師常會在程式中使用變數,這些變數可以在程式中來去自如,但程式設計師不可能只設計單一程式,有時候程式會有其它的程式在相互呼叫。此時,變數就不一定可以在各個程式中來去自如。例如在程式 A 內的變數,不一定可以為程式 B 所使用。
如果變數只能在單一程式中使用,則此變數我們稱之為「區域變數」。而可以在兩個不同程式間使用的變數,稱之為「全域變數」。講到這裡,您是不是發覺了「環境變數」與「全域變數」是非常的類似呢?
自訂變數匯出成環境變數
自訂的變數可以透過 export 指令匯出成環境變數。
[root@Linux root]# var01=12345 [root@Linux root]# export var01 |
自訂變數匯出後變為環境變數時,可以使用 env 指令來查看。您也可以將環境變數降級變為自訂變數,export 或是 env 指令皆可達成:
[root@Linux root]# export -n var01 [root@Linux root]# env -u var02 |
No comments:
Post a Comment