shell中的變數型別有:本地變數、環境變數、位置變數、標準變數、特殊變數。
2.1.本地變數在shell指令碼的生存週期中使用的變數(也就是登入乙個shell到退出,這個shell為生存週期)設定乙個本地變數格式為:變數 名=變數,顯示乙個變數:echo $也可以不要大括號,顯示本地所有變數:set就可以,本地變數還可以設定為唯讀的:readonly 變數名,這時的變數就具有唯讀屬性,如果在shell下執行命令readonly,就會顯示當前環境下所有的唯讀變數。
2.2.環境變數用於所有的使用者程序(也就shell下所有的子程序),這個就有點像windows中的環境變數了(系統–>高階–>環境變 量),環境變數一般儲存在$home/.bash_profile和/etc/profile中,前者是只適用於當前使用者,後者適用於所有使用者設定乙個環 境變數用export,比喻我們這裡設定乙個環境變數:export pagename=」ghostwwl」這樣就設定了乙個叫做pagename的環境變數,我們可以通過env這個命令來檢視,還有就是可以直接通過執行 export來檢視。
2.3.位置變數也就相當於程式中的引數(也就相當於c中的argv),在shell中位置變數一般允許$0-$9一共10個,超過10個的,嘿嘿就必須使用其他方式了。很顯然這裡$0就是指令碼的名字了,從$1開始就是後面的引數了。說白了也就是那個argv了。
我們這裡舉個小例子,比喻有shell程式aa.sh於下:
#!/bin/bash
#named aa
echo 「程式名為: $0″
echo 「姓名為: $1″
echo 「年齡為: $2″
echo 「所屬省分為: $3″
echo 「所在城市為: $4″
echo 「第五個引數為: $5″
我們執行這個指令碼 ./aa.sh ghostwwl 24 hubei wuhan 顯示結果為:
程式名為: ./aa.sh
姓名為: ghostwwl
年齡為: 24
所屬省分為: hubei
所在城市為: wuhan
第五個引數為:
可以看出因為第五個引數沒有所以就為空了
當然我們可以在指令碼中系統命令傳遞引數,比喻下面一句:
find /usr/share/realpaly -name $1 -print
這個指令碼語句就可以在指令碼中對檔案目錄/usr/share/realplay中檔名為第乙個引數的檔案進行查詢。
說這麼多他*的就是引數,搞半天。
2.4.標準變數,也就是bash環境建立的一些標準環境的標量,他會自動去解析,基本都在/etc/profile中定義了有exinit,home,ifs,logname,mail,mailcheck等。
exinit 是vi編輯器初始化執行的一些引數
home 這個傻子都知道,就是偶們的主目錄
ifs 乙個個字段域之間用什麼隔開的理論上可以任意字元,比喻/usr/bin;/usr/sbin
這裡的ifs就是」;」了。
logname 看名字就知道 是登入名可以用 echo $logname 來檢視
mail 表示當使用者的郵箱路徑
mailcheck 表示每間隔多少秒檢查一次收件箱
還有一堆標準變數path,tz,ps1,ps2,pwd等等,我這裡就不全部寫了,自己去找資料看,相信應該蠻好找的。
2.5.特殊變數
$# 表示傳遞到指令碼的引數列表
$* 以乙個字串顯示所有向指令碼傳遞的引數,跟位置變數不同的是這裡引數可超過9個。
$$ 表示當前執行指令碼的程序id號
$! 表示後台執行的乙個程序的id號
$@ 與$#相同,但是使用時加引號,並在引號中返回每乙個引數
$- 顯示shell使用的當前選項,與set命令相同
$? 顯示最後命令執行的推出狀態,0表示沒有錯誤,其他任何值表示有錯誤
3.shell中的變數替換
這裡說一下變數替換這個經常用到,其實就是用變數的值替 換他的名字,顯示變數的時候就是這個,可以用:
為了試驗我們先定義乙個變數haha=」**** you」
a.$來搞定(這裡的大括號可要可不要,不過偶一般都加)
b.$這個表示如果前面的變數值不為空,則顯示變數值,否則置空,比喻echo $這樣可不管你以前有沒有對name賦過值都會顯示這裡的」ghostwwl」
c.$這個表示當變數名存在,就是變數的值,不存在就顯示問號後面的錯誤資訊比喻echo $這個因為age不存在所以它會顯示錯誤資訊age:no defined variable age
d.$這個表示如果如果變數名沒有設定,就用這裡給出變數值來代替,顯然如果設定了肯定就是返回原來設定的值:比喻echo $因為age變數沒有設定,所以它會用24去代替,如果是echo $這裡會顯示原來所賦的值」**** you」記得不要跟b中的情況搞混。
e.$表示如果沒有設定變數名這個變數,就設定它的值,比喻echo $因為沒有設定age這個值,所以執行這句的時候會賦值並顯示。當然這樣賦值以後就可以把age當正常變數用了,也就是這時我們有 haha和age這兩個變數了。
就這五種了(當然如果把第一種去掉大括號,就6種了),開始可能並不習慣,用多了就習慣了,啊哈哈!
4.清除變數(unset)
能定義變數當然也就能刪除變數了,比喻我們要刪除那個haha,因為值為」**** you」不太文明,我們可以用:unset haha 從這裡就可以看出清除變數用unset 變數名。
這裡我們要注意,設定了readonly的唯讀變數不能取消也不能重新設定值。
我們這裡再來把前面個例子改一下:
#!/bin/bash
#named aa
echo 「程式名為: $0″
echo 「姓名為: $1″
echo 「年齡為: $2″
echo 「所屬省分為: $3″
echo 「所在城市為: $4″
echo 「引數個數為: $#」
echo 「指令碼引數為: $*」
echo 「指令碼程序id為: $$」
我們再來執行這個指令碼 ./aa.sh ghostwwl 24 hubei wuhan 結果為:
程式名為: ./aa.sh
姓名為: ghostwwl
年齡為: 24
所屬省分為: hubei
所在城市為: wuhan
指令碼引數個數為: 4
指令碼引數為: ghostwwl 24 hubei wuhan
指令碼程序id為: 212
5.影響變數的一些命令
5.1 declare 建立或顯示變數
引數-f 只顯示函式名
引數-r 建立唯讀變數(typeset也可以)
引數-x 建立轉出變數
引數-i 建立整數變數
如果引數中使用+來代替-,表示選項的含義相反。
5.2 export 建立環境變數
引數– 表明選項結束,所有後面的引數都是實參
引數-f 表示在」變數-值」對照中的變數是乙個函式名
引數-n 表示把全域性變數轉換成區域性變數(也就是本地變數)。
引數-p 顯示全域性變數列表
5.3 readonly 建立或顯示唯讀變數
引數– 表示選項結束
引數-f 建立唯讀變數
5.4 set 設定或者重設各種shell
5.5 shift [n] 用來移動或調整位置變數,使$4賦給$3(也就是全都向前面移動一次),這個裡面的n表示移動幾位,預設是移動一位。
5.6 typeset 這個就跟declare相同了
5.7 unset 清除變數的定義
引數– 表示選項結束
引數-f 刪除唯讀變數,但是不能sehll環境中制定的變數和函式。
6.shell的運算子
6.1 位運算 ~,>>,<<,&,|,^ 一看就知道分別是取反,左移,右移,與,或,異或。
6.2 $表示對中的表示式求值和$(())相等的。
6.3 邏輯運算子 &&,||,>,<,==,!= 是人都看得懂跟c裡一樣的。
6.4 賦值運算子 =,+=,-=,*=,/=,%=,&=,|=,<<=,>>=,^= 跟其他語言差不多一看就明白的。當然表示式賦值let $a=$b+$c這種形式。
6.5 運算子的優先順序我就不想廢話了,都跟其他語言差不多。
**:
linux中shell的變數用法
一 環境變數 環境變數也可叫全域性變數,可以在建立他們的shell及派生出的子shell中使用 無需定義,直接可以使用,如 uid 相關命令 set 輸出所有變數 env 只顯示全域性變數 declare 輸出所有變數,函式,整數等 二 普通變數 普通變數賦值 變數名 value 變數名 value...
Linux程式設計 Shell中的變數
系統啟動後會產生許多環境變數,使用者可以使用 set 命令檢視這些環境變數 家目錄位置變數 home 系統語言變數 lang 臨時修改系統語言可以重新指定此變數的值 lang zh cn.utf 8 互動程式變數 shell 命令搜尋路徑變數 path 主提示符變數 ps1 檢視當前使用的主提示符表...
linux中shell變數含義
linux中shell變數katex parse error expected eof got at position 1 0,1,2的含 釋 變數說明 shell本身的pid processid shell最後執行的後台process的pid 最後執行的命令的結束 返回值 使用set命令設定的fl...