1. 程式人生 > >linux學習shell

linux學習shell

size clas 系統 padding order left -128 習慣 width

參考:http://cn.linux.vbird.org/linux_basic/0320bash_1.php

shell的變量功能變量就是以一組文字或符號等,來取代一些配置或者是一串保留的數據!

echo 這個命令來取用變量:echo $PATH,需要在變量名前加$。通過man命令可以查看命令的使用方法例如:man echo

  • 變量的配置守則
  1. 變量與變量內容以一個等號『=』來連結:
  2. 『myname=VBird』
  3. 等號兩邊不能直接接空格符,如下所示為錯誤:
  4. 『myname = VBird』或『myname=VBird Tsai』
  5. 變量名稱只能是英文字母與數字,但是開頭字符不能是數字,如下為錯誤:
  6. 『2myname=VBird』
  7. 變量內容若有空格符可使用雙引號『"』或單引號『‘』將變量內容結合起來,但

雙引號內的特殊字符如 $ 等,可以保有原本的特性,:『var="lang is $LANG"』則『echo $var』可得『lang is en_US』

單引號內的特殊字符則僅為一般字符 (純文本),:『var=‘lang is $LANG‘』則『echo $var』可得『lang is $LANG』

8.可用跳脫字符『 \ 』將特殊符號(如 [Enter], $, \, 空格符, ‘等)變成一般字符;有點像轉義字符

9.在一串命令中,還需要藉由其他的命令提供的信息,可以使用反單引號『`命令`』或 『$(命令)』

。特別註意,那個 ` 是鍵盤上方的數字鍵 1 左邊那個按 鍵,而不是單引號! 例如想要取得核心版本的配置:

『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』

10.若該變量為擴增變量內容時,則可用 "$變量名稱" 或 ${變量} 累加內容:『PATH="$PATH":/home/bin』

11.若該變量需要在其他子程序運行,則需要以 export 來使變量變成環境變量『export PATH』

什麽是『子程序』呢?就是說,在我目前這個 shell 的情況下,去激活另一個新的 shell ,新的那個 shell 就是子程序啦!在一般的狀態下,父程序的自定義變量是無法在子程序內使用的。但是透過 export 將變量變成環境變量後,就能夠在子程序底下應用了!

12.通常大寫字符為系統默認變量,自行配置變量可以使用小寫字符,方便判斷 (純粹依照使用者興趣與嗜好) ;

13.取消變量的方法為使用 unset :『unset 變量名稱』例如取消 myname 的配置:『unset myname』

如何能夠內核模塊目錄 :[root@www ~]# cd /lib/modules/`uname -r`/kernel

  1. 先進行反單引號內的動作『uname -r』並得到核心版本為 2.6.18-128.el5
  2. 將上述的結果帶入原命令,故得命令為:『cd /lib/modules/2.6.18-128.el5/kern
例題: 在變量的配置當中,單引號與雙引號的用途有何不同? 答: 單引號與雙引號的最大不同在於雙引號仍然可以保有變量的內容,但單引號內僅能是一般字符 ,而不會有特殊符號。我們以底下的例子做說明:假設您定義了一個變量, name=VBird ,現在想以 name 這個變量的內容定義出 myname 顯示 VBird its me 這個內容,要如何訂定呢?
[root@www ~]# name=VBird
[root@www ~]# echo $name
VBird
[root@www ~]# myname="$name its me"
[root@www ~]# echo $myname
VBird its me
[root@www ~]# myname=‘$name its me‘
[root@www ~]# echo $myname
$name its me
發現了嗎?沒錯!使用了單引號的時候,那麽 $name 將失去原有的變量內容,僅為一般字符的顯示型態而已!這裏必需要特別小心在意!

例題: 在命令下達的過程中,反單引號( ` )這個符號代表的意義為何? 答: 在一串命令中,在 ` 之內的命令將會被先運行,而其運行出來的結果將做為外部的輸入信息!例如 uname -r 會顯示出目前的核心版本,而我們的核心版本在 /lib/modules 裏面,因此,你可以先運行 uname -r 找出核心版本,然後再以『 cd 目錄』到該目錄下,當然也可以運行如同上面範例六的運行內容啰。

另外再舉個例子,我們也知道, locate 命令可以列出所有的相關文件檔名,但是,如果我想要知道各個文件的權限呢?舉例來說,我想要知道每個 crontab 相關檔名的權限:
[root@www ~]# ls -l `locate crontab`
如此一來,先以 locate 將文件名數據都列出來,再以 ls 命令來處理的意思啦!瞭了嗎? ^_^

例題: 若你有一個常去的工作目錄名稱為:『/cluster/server/work/taiwan_2005/003/』,如何進行該目錄的簡化? 答: 在一般的情況下,如果你想要進入上述的目錄得要『cd /cluster/server/work/taiwan_2005/003/』, 以鳥哥自己的案例來說,鳥哥跑數值模式常常會配置很長的目錄名稱(避免忘記),但如此一來變換目錄就很麻煩。 此時,鳥哥習慣利用底下的方式來降低命令下達錯誤的問題:
[root@www ~]# work="/cluster/server/work/taiwan_2005/003/"
[root@www ~]# cd $work
未來我想要使用其他目錄作為我的模式工作目錄時,只要變更 work 這個變量即可!而這個變量又可以在bash 的配置文件中直接指定,那我每次登陸只要運行『 cd $work 』就能夠去到數值模式仿真的工作目錄了!是否很方便呢? ^_^

---恢復內容結束---

linux學習shell