上篇博文為大家介紹了關于shell程式設計的的一些特性,即指令别名,指令曆史,快捷鍵,指令補全,指令行展開,指令執行結果,轉義字元,通配符,IO重定向,管道等操作;這次繼續給大家介紹關于shell程式設計的另一大特性——變量;
shell程式中采用變量存放字元串,shell變量比C語言中的變量簡單得多,沒有衆多存儲類及類型的限制,也不需要預先定義,然後才能指派,可以在使用時“邊定義,邊指派”。
shell有三類變量,環境變量,臨時變量以及本地變量,環境變量是永久形變量,不會随着shell腳本的結束而消失,而臨時變量是shell程式内部定義的,其适用範圍僅限于定義它的程式,出了本程式後便不能使用;
程式=指令+資料
資料:檔案系統中管理的那些檔案,存儲在記憶體裡的資料稱之為變量
變量:一段連續的記憶體空間;為這一段記憶體空間取名為變量名;在這段記憶體空間中所存儲的裝置稱為 變量值;
=:指派操作符
指派方法:VARNAME=VALUE(中間不加空格)
變量名=字元串
例如
myfile=/usr/meng中的myfile是變量名,=是指派号,字元串/usr/meng是賦予變量的值。在等号兩邊是沒有空格的;
VARNAME的命名規範:
1.隻能以字母或下劃線”_”開頭,不能使用數字,後面可以是任意字母數字和下劃線;
2.大小寫嚴格區分;
3.見名知意;
4.書寫規範
1) 全大寫:FILES
2) 駝峰式:MyFile(每一個單詞的開頭為大寫)
5.不能與已知變量名相同(否則相當于替換已有變量名)
根據不同的程式設計語言,變量可以分為兩類:
強變量:
必須要在使用前先聲明,而且要聲明變量的類型;嚴格區分變量的類型;
弱變量:可以随時使用随時聲明,甚至可以不聲明即使用;不對變量類型做硬性要求,如果沒有指明變量類型,統一按照字元型對待;
bash的變量即為弱變量;
c c++java等均為強變量;
引用變量的值:$(VARNAME)-->$VARNAME(有些特殊的場景必須寫花括号)也稱為變量替換;
在程式中使用變量的值時,要在變量名前面加上一個$字元,他告訴shell,要進行變量值替換;
例
#dir=/usr/meng
#echo $dir
#/usr/meng(顯示結果)
指令替換:
以兩種形式可以将一個指令的執行結果指派給變量。
一種形式是:
#VARNAME=`指令表`
$dir=`pwd`
另一種形式:
#VARNAME=$(指令表)
$dir=$(pwd)
bash的變量種類:
全局變量(環境變量):主要指作用範圍,作用範圍是整個shell程序,包括其子shell;
本地變量:作用範圍僅僅隻是登陸的shell;不包括子shell;
局部變量:作用範圍僅僅隻是目前的程式段一般用于函數;
預設全局變量:
位置參數變量:表明這個程式所調用程式的位置;$1,$2,$3。。。$n
特殊變量:
$?,$$,$#,$@,$*…
$?:展開為最近一次所執行指令的狀态傳回值(退出狀态)
$#:位置參數的個數(以十進制表示);
$*:從1開始連續編寫所有的位置參數,當時用雙引号來展開時,它展開為以特殊變量“IFS”的第一個字元分隔得值;用其顯示的内容是很多個不同的值;
$@:從1開始連續編寫所有的位置參數,當時用雙引号來展開時,它展開為一個單獨的字元串;
$$:展開為目前shell的程序辨別符;
$0:展開為shell或shell腳本的檔案名;
#echo$0
-bash
變量的使用:
變量的指派:VARNAME=‘VALUE’(屬于本地變量)
撤銷變量:#unset VARNAME
聲明環境變量:
export VARNAME(導出,可以給所有子shell應用)
export VARNAME=VALUE
例
[wjq@localhost ~]$ exportb='hello'
[wjq@localhost ~]$ echo $b
hello
[wjq@localhost ~]$ bash
[wjq@localhost ~]$
declare:
-a:聲明索引數組(如果支援)
-A:聲明關聯數組(如果支援)
-i:聲明整形變量;
-l:聲明變量并将變量值轉換為小寫字母;
-u:聲明變量并将變量值轉換為大寫字母;
-x:聲明變量并将其導出為環境變量(全局變量);
-r:設定隻讀變量,且無法使用unset撤銷,隻能關閉bash;
例
[wjq@localhost ~]$ declare-l s='HELLO'
[wjq@localhost ~]$ echo $s
hello
[wjq@localhost ~]$ declare-u s='hello'
HELLO
檢視環境變量:
set:
export:
env:
聲明局部變量:
local VARNAME=VALUE(用于函數,僅僅隻在函數的代碼段中有效,當函數調用完畢則失效)
配置檔案:
通用配置檔案:/etc/bashrc,/etc/profile
私人配置檔案:~/.bashrc,~/.bash_profile
将變量放入配置檔案中才是永久生效的;
注意:一般定義變量都是先做先用,并不需要改配置檔案,如果修改聲明變量,有可能會造 成系統漏洞,得不償失,是以沒有不要就不要改;
本文轉自 wujunqi1996 51CTO部落格,原文連結:http://blog.51cto.com/12480612/1911150