Shell變數基本操作與常用符號詳解

2020-08-12 20:20:56

一 shell指令碼建立、許可權、執行

1.1 shell指令碼的建立

touch hellloworld.sh
或vi helloworld.sh

1.2 賦予執行許可權

chmod +x helloworld.sh

1.3 執行指令碼

命令 註釋
[root@localhost ~]# ./helloworld.sh 指令碼檔案路徑(絕對路徑與相對路徑) ===>需要可執行許可權
[root@localhost ~]# sh helloworld.sh sh 指令碼檔案路徑 ===>可以不需要執行許可權
[root@localhost ~]# source helloworld.sh source 指令碼檔案路徑 ===>本身的路徑會變化
[root@localhost ~]# . helloworld.sh 通過點號來載入指令碼

二 管道符號與重定向符號

2.1 管道操作

管道操作爲不同命令之間的協同工作提供了一種機制 機製,位於管道符號"|"左側的命令輸出結果作爲右側命令的輸入(處理物件),同一行命令中可以用多個管道。
cmd 命令 1 | cmd 命令 2 | cmd 命令 n
例如:
free -m | grep 「Mem」 | awk ‘{print $6}’

2.2 重定向操作

型別 操作符 用途
重定向輸入 < 從指定的檔案讀取數據,而不是從鍵盤輸入
重定向輸出 > 將輸出結果儲存到指定的檔案(覆蓋原有內容)
重定向輸出 >> 將輸出結果追加到指定的檔案尾部
標準錯誤輸出 2> 將錯誤資訊儲存到指定的檔案(覆蓋原有內容)
標準錯誤輸出 2>> 將錯誤資訊追加到指定的檔案尾部
混合輸出 &> 將標準輸出、標準錯誤內容儲存到指定的檔案(覆蓋原有內容)
混合輸出 &>> 將標準輸出、標準錯誤內容追加到指定的檔案尾部

三 shell變數

3.1 變數型別

自定義變數:由使用者自己定義、修改和使用
特殊變數:環境變數(USER HOME LANG PATH)、只讀變數、位置變數($1,$2,$3……)、預定義變數
預定義變數:

變數 註釋
$# 命令列中位置變數的個數
$* 所有位置變數的內容
$? 上一條命令執行後返回的狀態,返回狀態值爲0表示執行正常,非0值表示異常或出錯
$0 當前執行的進程/程式名(即返回當前程式)

3.2 變數賦值注意點

3.2.1 雙引號(")

主要用來界定字串,當要賦值的內容中包含空格時必須用雙引號括起來,其他情況則可以省略。
在这里插入图片描述
在雙引號範圍內可以使用"$"符號參照其他變數的值。
在这里插入图片描述

3.2.2 單引號(’)

在單引號的範圍內,無法參照其他變數的值,所有字元均作爲普通字元看待。
在这里插入图片描述

3.2.3 反撇號(`)

反撇號內必須是能夠執行的命令列,即把反撇號裏面的內容作爲命令輸入終端,再把輸出結果作爲一條新的命令輸入終端。
在这里插入图片描述
圖中「expr」表示計算,計算「12+13」的結果,得出「25」,把25作爲一條命令輸入,結果找不到命令……
注意:
反撇號難以多級巢狀,可使用"$()"來代替。
例如:在这里插入图片描述

3.2.4 read命令

read命令用來提示使用者輸入資訊,實現簡單的互動過程。執行時從鍵盤讀入一行內容。以空格作爲分隔符,把讀入的各欄位依次賦值給指定的變數。
在这里插入图片描述
read命令可以結合"-p"和"-t"選項來設定提示資訊與等待時間(預設爲秒)
例如:
在这里插入图片描述
再來一次
在这里插入图片描述

3.3 變數作用範圍

預設情況下,新定義的變數是區域性變數,只在當前環境下有效。當輸入命令「bash」進入子shell環境時,區域性變數將無法使用。
在这里插入图片描述
可以通過命令「export」將指定變數導出爲「全域性變數」,可以同時操作多個變數,變數名之間以空格分隔。
在这里插入图片描述