web前端程式碼重構
20.11.24
變數的配置規則
-
變數與變數內容以一個等號『=』來連結,如下所示:
『myname=VBird』 -
等號兩邊不能直接接空格符,如下所示為錯誤:
『myname = VBird』或『myname=VBird Tsai』 -
變數名稱只能是英文字母與數字,但是開頭字元不能是數字,如下為錯誤:
『2myname=VBird』 -
變數內容若有空格符可使用雙引號『"』或單引號『'』將變數內容結合起來,但
- 雙引號內的特殊字元如 $ 等,可以保有原本的特性,如下所示:
『var="lang is $LANG"』則『echo $var』可得『lang is en_US』 - 單引號內的特殊字元則僅為一般字元 (純文字),如下所示:
『var='lang is $LANG'』則『echo $var』可得『lang is $LANG』
- 雙引號內的特殊字元如 $ 等,可以保有原本的特性,如下所示:
-
可用跳脫字元『 \ 』將特殊符號(如 [Enter], $, , 空格符, '等)變成一般字元;
-
在一串命令中,還需要藉由其他的命令提供的資訊,可以使用反單引號『`命令`』或 『$(命令)』。特別注意,那個 ` 是鍵盤上方的數字鍵 1 左邊那個按鍵,而不是單引號! 例如想要取得核心版本的配置:
『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』在一串命令中,在` 之內的命令將會被先執行,而其執行出來的結果將被作為外部的輸入資訊。
-
若該變數為擴增變數內容時,則可用 "$變數名稱" 或 ${變數} 累加內容,如下所示:
『PATH="$PATH":/home/bin』 -
若該變數需要在其他子程式執行,則需要以 export 來使變數變成環境變數:
『export PATH』,如果單純執行『export』,則會將所有環境變數顯示出來 -
通常大寫字元為系統預設變數,自行配置變數可以使用小寫字元,方便判斷 (純粹依照使用者興趣與嗜好) ;
-
取消變數的方法為使用 unset :『unset 變數名稱』例如取消 myname 的配置:
『unset myname』 -
例項:如何進入到目前核心的模組目錄
[root@www ~]# cd /lib/modules/`uname -r`/kernel [root@www ~]# cd /lib/modules/$(uname -r)/kernel
列出環境變數命令env
和export
用env觀察環境變數與常見的環境變數說明:
範例一:列出目前的 shell 環境下的所有環境變數與其內容。
[root@www ~]# env
HOSTNAME=www.vbird.tsai <== 這部主機的主機名
TERM=xterm <== 這個終端機使用的環境是什麼型別
SHELL=/bin/bash <== 目前這個環境下,使用的 Shell 是哪一個程式?
HISTSIZE=1000 <== 『記錄命令的筆數』在 CentOS 預設可記錄 1000 筆
USER=root <== 使用者的名稱啊!
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:
or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=0
0;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=
00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;3
1:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00
;35:*.xpm=00;35:*.png=00;35:*.tif=00;35: <== 一些顏色顯示
MAIL=/var/spool/mail/root <== 這個使用者所取用的 mailbox 位置
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:
/root/bin <== 不再多講啊!是執行檔案命令搜尋路徑
INPUTRC=/etc/inputrc <== 與鍵盤按鍵功能有關。可以配置特殊按鍵!
PWD=/root <== 目前使用者所在的工作目錄 (利用 pwd 取出!)
LANG=en_US <== 這個與語系有關,底下會再介紹!
HOME=/root <== 這個使用者的家目錄啊!
_=/bin/env <== 上一次使用的命令的最後一個引數(或命令本身)
-
HOME
代表使用者的家目錄 -
SHELL
目前這個環境使用的 SHELL 是哪支程式。Linux 預設使用 /bin/bash -
HISTSIZE
歷史命令記錄條數 -
MAIL
當我們使用 mail 這個命令在收信時,系統會去讀取的郵件信箱檔案 (mailbox)。 -
PATH
執行檔案搜尋的路徑 -
LANG
語系資料 -
RANDOM
隨機隨機數變數
[root@www ~]# declare -i number=$RANDOM*10/32768 ; echo $number 8 <== 此時會隨機取出 0~9 之間的數值喔!
用set觀察所有變數:
[root@www ~]# set
BASH=/bin/bash <== bash 的主程式放置路徑
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release"
[5]="i686-redhat-linux-gnu") <== bash 的版本啊!
BASH_VERSION='3.2.25(1)-release' <== 也是 bash 的版本啊!
COLORS=/etc/DIR_COLORS.xterm <== 使用的顏色紀錄檔案
COLUMNS=115 <== 在目前的終端機環境下,使用的欄位有幾個字元長度
HISTFILE=/root/.bash_history <== 歷史命令記錄的放置檔案,隱藏檔
HISTFILESIZE=1000 <== 存起來(與上個變數有關)的檔案之命令的最大紀錄筆數。
HISTSIZE=1000 <== 目前環境下,可記錄的歷史命令最大筆數。
HOSTTYPE=i686 <== 主機安裝的軟體主要型別。我們用的是 i686 相容機器軟體
IFS=$' \t\n' <== 預設的分隔符
LINES=35 <== 目前的終端機下的最大行數
MACHTYPE=i686-redhat-linux-gnu <== 安裝的機器型別
MAILCHECK=60 <== 與郵件有關。每 60 秒去掃瞄一次信箱有無新信!
OLDPWD=/home <== 上個工作目錄。我們可以用 cd - 來取用這個變數。
OSTYPE=linux-gnu <== 作業系統的型別!
PPID=20025 <== 父程式的 PID (會在後續章節才介紹)
PS1='[\u@\h \W]\$ ' <== PS1 就厲害了。這個是命令提示字元,也就是我們常見的
[root@www ~]# 或 [dmtsai ~]$ 的配置值啦!可以更動的!
PS2='> ' <== 如果你使用跳脫符號 (\) 第二行以後的提示字元也
name=VBird <== 剛剛配置的自定義變數也可以被列出來喔!
$ <== 目前這個 shell 所使用的 PID
? <== 剛剛執行完命令的回傳值。
-
PS1:(命令提示符配置)
- \d :可顯示出『星期 月 日』的日期格式,如:"Mon Feb 2"
- \H :完整的主機名。
- \h :僅取主機名在第一個小數點之前的名字,如鳥哥主機則為『www』後面省略
- \t :顯示時間,為 24 小時格式的『HH:MM:SS』
- \T :顯示時間,為 12 小時格式的『HH:MM:SS』
- \A :顯示時間,為 24 小時格式的『HH:MM』
- @ :顯示時間,為 12 小時格式的『am/pm』樣式
- \u :目前使用者的賬號名稱,如『root』;
- \v :BASH 的版本資訊,如鳥哥的測試主機板本為 3.2.25(1),僅取『3.2』顯示
- \w :完整的工作目錄名稱,由根目錄寫起的目錄名稱。但家目錄會以 ~ 取代;
- \W :利用 basename 函式取得工作目錄名稱,所以僅會列出最後一個目錄名。
- # :下達的第幾個命令。
- $ :提示字元,如果是 root 時,提示字元為 # ,否則就是 $ 囉~
-
$:(關於本 shell 的 PID)
目前這個 Shell 的執行緒代號,亦即是所謂的 PID (Process ID)。『 echo $$ 』出現的數字就是你的 PID 號碼。
-
?:(關於上個執行命令的回傳值)
上一個執行的命令所回傳的值一般來說,如果成功的執行該命令, 則會回傳一個 0 值,如果執行過程發生錯誤,就會回傳『錯誤程式碼』一般就是以非為 0 的數值來取代。
-
OSTYPE, HOSTTYPE, MACHTYPE:(主機硬體與核心的等級)
目前個人計算機的 CPU 主要分為 32/64 位,其中 32 位又可分為 i386, i586, i686,而 64 位則稱為 x86_64。 由於不同等級的 CPU 命令集不太相同,因此你的軟體可能會針對某些 CPU 進行優化,以求取較佳的軟體效能。 所以軟體就有 i386, i686 及 x86_64 之分。