shell變量介紹及變量子串的使用

shell變量介紹及變量子串的使用

 

shell變量可分爲兩大類:環境變量(全局變量)和局部變量。環境變量又分爲內置的環境變量和自定義的環境變量。內置的環境變量是Linux操作系統自帶的,而自定義的環境變量是用戶根據實際需要進行自己定義的。下面將詳細介紹各種變量。

1、環境變量

環境變量的作用:一般用於定義shell的運行環境,保證shell命令的正確執行,Shell通過環境變量來確定登陸用戶名,命令路徑,終端類型,登陸目的等。

 

環境變量的創建:可以在命令行中設置創建,但用戶退出命令行時這些變量值就會丟失,因此,若希望永久保存環境變量,可在用戶家目錄下的 .bash_profile 或者 .bashrc 文件中或全局配置 /etc/bashrc /etc/profile 文件或 /etc/profile.d/ 中定義。將環境變量放在這些文件中,每次用戶登陸時這些變量值都會被初始化一次。一般,環境變量都爲大寫,使用export命令導出定義環境變量

2、內置的環境變量

內置的環境變量,如HOME PATH SHELL UIDUSERHOSTNAME 等,都是在用戶登陸之前就已經被/bin/login程序設置好了。

3、自定義的環境變量

自定義的環境變量: 如果想要設置環境變量,就要在給變量賦值之後或設置變量時使用export命令。帶-x選項的declare內置命令也可以完成同樣的功能。(注意:輸出變量時不要在變量名前加$

4、局部變量

本地變量在用戶當前的shell生存期的腳本中使用。在一個函數中將某個變量聲明爲local,則該變量就是一個局部變量,只在本函數中有效。

 

5、shell特殊變量

5.1、位置變量

變量名稱

變量作用

$0

獲取當前執行的shell腳本的文件名,包括路徑

$n

獲取當前執行的shell腳本的第n個參數值,如果n大於10,需要使用{}把數字括起來

$*

獲取當前shell的所有參數,將所有的命令行參數視爲單個字符串

$#

獲取當前shell命令行中參數的總個數

$@

獲取當前shell的所有參數,將所有的命令行參數視爲多個字符串

 

5.2、進程狀態變量

變量名稱

變量作用

$?

返回上一個命令的返回值,一般用於判斷上一個命令是否成功執行

0(表示命令執行成功) 1(命令執行失敗) 2(權限拒絕)

$$

顯示當前shell的進程號

$!

執行上一個指令的進程號

$_

獲取執行的命令或腳本的最後一個參數

 

6、變量子串的常用操作

6.1、計算變量A的字符串長度3種方法

[root@localhost ~]# A="good morning"
[root@localhost ~]# echo ${#A}
12
[root@localhost ~]# echo $A|wc –m
13
[root@localhost ~]# echo $(expr length “$A”)
12

以上三種方法第一種效率最高,第二種效率最低,第三種效率居中

 

6.2、截取變量A的第2個字符後面的所有字符

[root@localhost ~]# echo ${A:2}
od morning

 

6.3、截取變量A的第2個字符後面的5個字符

[root@localhost ~]# echo ${A:2:5}
od mo
[root@localhost ~]# echo $A|cut -c 3-7
od mo

 

6.4、從變量A的字符開頭開始刪除最短匹配”goo”字符串(注意只能從開頭開始)

[root@localhost ~]# echo ${A#goo}
d morning

6.5、從變量A的字符開頭開始刪除最長匹配”goo”字符串

[root@localhost ~]# echo ${A##goo}
d morning

6.6、從變量A的字符結尾開始刪除最短匹配”ing”字符串(注意只能從結尾開始)

[root@localhost ~]# echo ${A%ing}
good morn

6.7、從變量A的字符結尾開始刪除最長匹配”ing”字符串

[root@localhost ~]# echo ${A%%ing}
good morn

 

6.8、使用after字符串來替換A變量中的第一個匹配的morning字符串

[root@localhost ~]# echo ${A/morning/after}
good after

6.9、使用after字符串來替換A變量中的結尾匹配的morning字符串

[root@localhost ~]# echo ${A/%morning/after}
good after

 

6.10、使用hello字符串來代替從A變量的字符串開頭匹配的good字符串

[root@localhost ~]# echo ${A/#good/hello}
hello morning


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章