對於linux shell的使用者來講, 巧妙的應用變量不只可以快速的解決問題,同時可以獲取很是大的樂趣,由於shell的變量內部能夠附加一些運算,使得程序很是簡潔明瞭而且功能強大,如下詳細介紹一下:linux
1.基本變量:shell
變量的命名:以字符,數字,下劃線的組合命名的,好比 x,x1,x_1數組
變量的賦值:a) x=1(賦數值,注意,不要給x賦值浮點數,x=1也並不是真的是將數值1賦給x,x的值須要上下文推測,shell並不是用來作數值運算的,此外x=爲賦空值);bash
b) x="hello world"(字符串);命令行
c) x=$y (將變量y的值提取出來付給x,注意當變量後有字符串跟隨時,要用花括號,好比y="hello",那麼x=${y}world的值爲helloworld);htm
d) x=$((1+2))(算數表達式的值,x值爲3);進程
e) x=$[1+2](至關於d);字符串
f) x=$(ls -lt)(把命令產生的輸出賦值給x);變量
g) x=`ls -lt`(至關於f);擴展
h) x=${y#/*/}(好比y="/home/hello/world/hello.world.txt,那麼x的值就是hello/world/hello.world.txt,${varname#pattern}(leftmost));
i) x=${y##/*/}(y同上,那麼x的值爲hello.world.txt,${varname#pattern}(rightmost);
j) x=${y%.*?}(y同上,那麼x的值爲/home/hello/world/hello.world,%與#的做用方向正好相反,#左%右);
k) x=${y%%.*}(y同上,x的值爲/home/hello/world/hello,%%與##的做用方向相反);
l) x=${y:-word}(假設y存在且不爲null,那麼x=$y,不然x=word);
m)x=${y:+word}(假設y存在且不爲null,那麼x=word,不然x=);
n) x=${y:=word}(假設y存在且不爲null,那麼x=$y,不然y=word,x=word);
o) x=${y:?message}(假設y存在且不爲null,那麼x=$y,不然輸出y:message);
p) x=${#y}(返回$y的字符串長度,POSIX標準);
2.特殊變量:
2a.環境變量:好比 $PATH、$HOME、$ENV
2b.內置變量:
1) $#:命令行參數總數
2) $*,$@:全部命令行參數,區別是$*將全部命令行參數視爲單個字符串"$1,$2,...",而$@將全部命令行參數視爲獨立字符串"$1","$2",...
3) $?:程序的退出狀態
4) $$:shell的進程編號
5) $0:shell的程序名稱
3.bash擴展的數組:
x=($x1,$x2,$x3), 那麼x就是一個包含3個元素的向量了,取第i個元素的方法是${x[i]},另外,${x}意思是取第0個元素${x[0]},取出整個向量要用${x[@]}或者${x[*]},向量的長度爲${#x[*]}
經過以上的總結,咱們能夠看到shell對變量的處理很是的靈活,可以巧妙運用這些變量的使用方法能夠減小代碼的長度,使得代碼更加簡潔高效