天天看點

linux 基礎學習之三:bash shell初識 下

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 的檔案大小, 那麼他『隻能減小檔案大小,不能增加檔案大小喔!』)

繼續閱讀