5、變量鍵盤讀取、數組與宣告: read, array, declare
read:用于讀取鍵盤輸入的變量,常用在shell script的編寫當中,下面先看基本功能:
[root@linux ~]# read [-pt] variable
參數:
-p :後面可以接提示字元!
-t :後面可以接等待的『秒數!』這個比較有趣~不會一直等待使用者啦!
範例一:讓使用者由鍵盤輸入一内容,将該内容變成 atest 變量
[root@linux ~]# read atest
This is a test
[root@linux ~]# echo $atest
範例二:提示使用者 30 秒内輸入自己的大名,将該輸入字元串做成 named 變量
[root@linux ~]# read -p "Please keyin your name: " -t 30 named
Please keyin your name: VBird Tsai
[root@linux ~]# echo $named
VBird Tsai
read 之後不加任何參數,直接加上變量名稱,那麼底下就會主動出現一個空白行,等待您輸入。 如果加上 -t 後面接秒數之後,例如上面的範例當中,那麼 30 秒之内沒有任何動作時, 該指令就會自動略過了~如果是加上 -p ,嘿嘿!後面就會有比較多可以用的提示字元給我們參考! 在指令的下達裡面,比較美觀啦! ^_^
declare / typeset:一樣的功能,就是在宣告變量的屬性。
如果使用 declare 後面并沒有接任何參數, 那麼 bash 就會主動的将所有的變量名稱與内容通通叫出來,就好像使用 set 一樣啦! 那麼 declare 還有什麼文法呢?看看先:
[root@linux ~]# declare [-aixr] variable
-a :将後面的 variable 定義成為數組 (array)
-i :将後面接的 variable 定義成為整數數字 (integer)
-x :用法與 export 一樣,就是将後面的 variable 變成環境變量;
-r :将一個 variable 的變量設定成為 readonly ,該變量不可被更改内容,也不能 unset
範例一:讓變量 sum 進行 100+300+50 的加總結果
[root@linux ~]# sum=100+300+50
[root@linux ~]# echo $sum
100+300+50 <==咦!怎麼沒有幫我計算加總?因為這是文字型态的變量屬性啊!
[root@linux ~]# declare -i sum=100+300+50
450 <==這下好了。。。
範例二:将 sum 變成環境變量
[root@linux ~]# declare -x sum
範例三:讓 sum 變成隻讀屬性,不可更動!
[root@linux ~]# declare -r sum
[root@linux ~]# sum=tesgting
-bash: sum: readonly variable <==老天爺~不能改這個變數了!
declare 也是個很有用的功能~尤其是當我們需要使用到底下的數組功能時, 他也可以幫我們宣告數組的屬性喔!不過,老話一句,數組也是在 shell script 比較常用的啦!
6、與檔案系統及程式的限制關系: ulimit
想象一個狀況:我的 Linux 主機裡面同時登入了十個人,這十個人不知怎麼搞的, 同時開啟了 100 個檔案,每個檔案的大小約 10MBytes ,請問一下, 我的 Linux 主機的記憶體要有多大才夠? 10*100*10 = 10000MBytes ~~ 老天爺,這樣,系統不挂點才有鬼哩!為了要預防這個情況的發生,是以, 我們的 bash 是可以『限制使用者的某些系統資源』的,包括可以開啟的檔案數量, 可以使用的 CPU 時間,可以使用的記憶體總量等等。如何設定?用 ulimit 吧!
[root@linux ~]# ulimit [-SHacdflmnpstuv] [配額]
-H :hard limit ,嚴格的設定,必定不能超過設定的值;
-S :soft limit ,警告的設定,可以超過這個設定值,但是會有警告訊息,并且,還是無法超過 hard limit 的喔!也就是說,假設我的 soft limit為 80 , hard limit 為 100 ,那麼我的某個資源可以用到 90 ,可以超過 80 ,還是無法超過 100 ,而且在 80~90 之間,會有警告訊息的意思。
-a :列出所有的限制額度;
-c :可建立的最大核心檔案容量 (core files)
-d :程式資料可使用的最大容量
-f :此 shell 可以建立的最大檔案容量 (一般可能設定為 2GB)機關為 Kbytes
-l :可用于鎖定 (lock) 的記憶體量
-p :可用以管線處理 (pipe) 的數量
-t :可使用的最大 CPU 時間 (機關為秒)
-u :單一使用者可以使用的最大程式(process)數量。
範例一:列出所有的限制資料
[root@linux ~]# ulimit -a
範例二:限制使用者僅能建立 1MBytes 以下的容量的檔案
[root@linux ~]# ulimit -f 1024
還記得我們在 Linux 磁盤檔案系統 裡面提到過,單一 filesystem 能夠支援的單一檔案大小與 block 的大小有關。例如 block size 為 1024 byte 時,單一檔案可達 16GB 的容量。但是,我們可以用 ulimit 來限制使用者可以建立的檔案大小喔! 利用 ulimit -f 就可以來設定了!例如上面的範例二,要注意機關喔!機關是 Kbytes。 若改天你一直無法建立一個大容量的檔案,記得瞧一瞧 ulimit 的資訊喔!( 不過,要注意的是,一般身份使用者如果以 ulimit
設定了 -f 的檔案大小, 那麼他『隻能減小檔案大小,不能增加檔案大小喔!』)