一、變量
在多數語言中,變量一般都包括四個特性:作用、名稱、類型、值。
1、變量的命名規則:
1.1、變量的名稱可以是由字母、數字、下划線組成,但不可以以數字開頭。
1.2、在bash中,變量的默認類型是字符串型。如執行數字運算,則需要指定變量類型為數值型。
1.3、與其他語言一樣,變量與值之間使用“=”連接,但“=”左右不能存在空格。
1.4、變量的值如果有空格,需要使用單引號或者雙引號括起來。
1.5、變量的值是可以疊加的。
1.6、變量的名稱使用大寫,目的是與Linux的系統命令區分開來。
2、變量的分類:
用戶自定義變量:最常見的變量,可以由用戶自由定義變量的作用、名稱、類型、值。
環境變量分為兩種:
用戶自定義環境變量:可以由用戶自由定義變量的作用、名稱、類型、值。
系統環境變量:這種變量的作用、名稱、類型都是系統固定好的,一旦修改便會出現問題。變量的值可以由用戶自己修改但不可隨意修改。
位置參數變量:與預定義變量一致。
預定義變量:就是shell設計者事先已經定義好的變量,可以直接在shell腳本中使用。變量的作用、名稱、類型都是固定的,用戶可以自定義值。
3、用戶自定義變量的增用改查刪。
注意:下面這個圖中的QQ變量,第一個是本不存在的變量,第二個我賦予了空值(空值也是一個值)。但兩者的輸出結果一樣,我們沒法分辨。這時候就需要(set -u)命令來區分。
下圖中刪除了QQ變量,然后使用了(set -u)命令,此時再次輸出變量QQ,就顯示報錯。
4、用戶自定義環境變量。
與用戶自定義變量大致相同。不過需要執行export命令,可以將用戶自定義變量變為用戶自定義環境變量。
兩者的區別:用戶自定義變量只能適用於當前的shell,不存在與其他子shell中。而用戶自定義環境變量在整個系統中都是生效的。
執行(pstree)命令(沒有此命令可以安裝 psmisc 依賴包),可以查看進程樹。這里顯示的當前bash(也成為父shell)。
當執行(bash)命令后,便進入了子shell。
輸入exit,可以退回到上一級shell中。
5、系統環境變量。
最常用的PATH環境變量
在執行命令的時候,我們輸入的都是命令本身,並沒有填寫路徑,但是卻可以在任意目錄執行。這里使用到的就是PATH環境變量。
上面圖可以看到,PATH變量定義的是一些路徑,通過(:)來進行分開。所以,我們將寫好的腳本放在一個固定目錄中。再將目錄的絕對路徑保存在PATH變量中,調用腳本時,任意目錄直接輸入腳本名稱就可以執行。
上面添加的PATH環境變量也是臨時的,一旦重啟就會消失。要想永久生效,需要寫入配置文件中。
6、位置參數變量
6.1、$n:其中,n為數字,0代表命令本身,1-9代表從第一至第九個參數,若參數十個以上時舉例{10}。
一個簡單的加法計算器1
上面的圖總共輸出了兩行。而前面輸入的79 21 就是執行命令后面添加的兩個參數,分別賦值給了num1與num2進行加法計算,輸出100;而第二行是echo $0 輸出命令本身。
6.2、$*、$@:代表執行命令時后面的參數。$*會把所有的參數看成為一個整體;而$@是把每個參數當作一個整體。
兩種不同的輸出結果,第一種結果是變量a將輸入的五個參數作為一個值輸出;第二種結果是變量b將五個參數作為五個值輸出。
6.3、$#:統計變量的個數。
6.4、接收鍵盤輸入
上面的輸入都需要在命令后面加上參數,也可以設置成為帶有提示信息的等待用戶輸入。
read 選項 變量
選項:-p “提示信息”:在等待鍵盤輸入時給予的提示信息
-t 數字:等待時間(單位秒)
-n 數字:限制用戶的輸入長度
-s:隱藏用戶的輸入(密文輸入)
簡易加法計算器2
7、預定義變量
7.1、$?:最后一次命令的執行狀態。在多數默認情況下,返回值為0,則代表上一條命令程序正常執行;若返回值非0,則代表上一條命令程序執行不准確。
7.2、$$:當前進程的進程號(PID)。
7.3、$!:后台運行的最后一個進程的進程號(PID)。
8、變量的類型
在shell中,變量的默認類型是字符串類型。如果想要改變變量的類型可以有以下幾種方法。
8.1、declare +/- 選項 變量
其中 + :取消設定變量的類型
- :設定變量的類型
a :設定/取消變量為數組型
i :設定/取消變量為整數型
-x :將變量設定為環境變量
-r :將變量設定為只讀變量
-p :查詢變量的類型
export可以將變量變為環境變量,實際上export命令就是調用的declare -x 這個命令;declare -r可以將變量變為只讀變量,只讀變量不能修改變量名、不能修改值、不能刪除,但這種變量除了系統自帶的,用戶自動設定的都是臨時生效,一旦系統重啟,變量就會消失。所有的變量的與變量類型都可以使用declare -p 命令查詢。
8.2、調用expr命令進行數值運算
要注意“+”的兩邊都有空格
8.3、調用let命令進行數值的運算
8.3、使用"$(())"、“$[]”格式進行數值的運算
上面這些數值運算都是整數型數值運算,小數點后直接舍棄,不會四舍五入。
二、運算
1、運算符
四則運算符:(+ - * /);有括號的先算括號內的;%取模(21%4,相當於21/4=5····1,所以21%4的結果為1)。
2、變量的運算
2.1、整數變量運算
2.2、數組型變量運算
通常情況下,一個變量內保存一個值。但是數組型的變量,一個變量內保存的多個值,而區分這些值靠的就是變量的下標。
正常的標准寫法是declare -a num[0]=123。但是由於num[0]這個寫法就比較特別,所以將 declare -a 省略系統也是認識的。
下標一般情況下從0開始。
3、變量的測試與內容置換