LinuxShell——變數 摘要:本文主要學習了Shell命令中的變數。 什麼是變數 簡單的說,變數就是讓某一個特定字串代表不固定的內容。 變數是電腦記憶體的單元,其中存放的值可以改變。當Shell腳本需要保存一些信息時,如一個文件名或一個數字,就把它存放在一個變數中。 每個變數都有一個名字,所以 ...
LinuxShell——變數
摘要:本文主要學習了Shell命令中的變數。
什麼是變數
簡單的說,變數就是讓某一個特定字串代表不固定的內容。
變數是電腦記憶體的單元,其中存放的值可以改變。當Shell腳本需要保存一些信息時,如一個文件名或一個數字,就把它存放在一個變數中。
每個變數都有一個名字,所以很容易引用它。變數可以定製用戶本身的工作環境。使用變數可以保存有用信息,使系統獲知用戶相關設置。變數也可以用於保存暫時信息。
變數的命名規範
在定義變數時,有一些規則需要遵守。
1)變數名可以由字母、數字和下畫線組成,但是不能以數字開頭。
2)變數用等號“=”連接,“=”左右兩側不能有空格。這是Shell語言特有的格式要求。在絕大多數的其他語言中,“=”左右兩側是可以加入空格的。但是在Shell中如果在“=”左右兩側加入空格,那麼Linux會誤以為這是系統命令,是會報錯的。
3)變數值中如果有空格,則需要使用單引號或雙引號包括。雙引號括起來的特殊字元可以保留原有含義,而單引號括起來的內容都是普通字元。
例如:設置變數 var="lang is $LANG" ,獲取變數 echo $var ,得到結果 lang is zh_CN.UTF-8 。
4)在變數值中,可以使用轉義符“\”將特殊字元變成普通字元。
例如:設置變數 var=Hello\ Word ,獲取變數 echo $var ,得到結果 Hello Word 。
5)如果要把命令的執行結果作為變數值賦予變數,則需要使用反引號`命令`或$(命令),建議使用$(命令)。
例如:設置變數 var=$(date) ,獲取變數 echo $var ,得到結果 2019年 07月 15日 星期一 10:14:33 CST 。
6)在BASH中,變數的預設類型都是字元串型,如果要進行數值運算,則必須指定變數類型為數值型。
例如:設置變數 var=1+2 ,獲取變數 echo $var ,得到結果 1+2 。
7)如果需要増加變數值,那麼可以進行變數疊加,變數疊加可以使用"$變數名"或${變數名},建議使用${變數名}。
例如:設置變數 var=123 ,修改變數 var=${var}456 ,獲取變數 echo $var ,得到結果 123456 。
8)自定義變數建議小寫,環境變數名建議大寫,便於區分。
用戶自定義變數
說明
用戶自定義變數是最常用的變數類型,其特點是變數名和變數值都是由用戶自由定義的。
設置和修改變數
變數的設置和修改很簡單,使用“=”符號連接左邊的變數名和右邊的變數值即可:
1 [root@localhost ~]# 變數名=變數值
顯示和使用變數
可以使用echo命令來獲取變數,但是在使用變數時,需要在變數名前面加上“$”符號:
1 [root@localhost ~]# $變數名
也可以使用set命令查看所有的變數,包括用戶自定義變數和環境變數:
1 [root@localhost ~]# set
刪除變數
要想刪除自定義變數,可以使用unset命令:
1 [root@localhost ~]# unset 變數名
環境變數
說明
環境變數和用戶自定義變數最主要的區別在於,環境變數是全局變數,而用戶自定義變數是局部變數。用戶自定義變數只在當前的Shell中生效,而環境變數會在當前Shell和這個Shell的所有子Shell中生效。如果把環境變數寫入相應的配置文件,那麼這個環境變數就會在所有的Shell中生效。
這是有區別的,如果環境變數不寫入配置文件,那麼當前Shell一旦終止,這個環境變數就會消失,而只有寫入配置文件才會永久地在所有Shell中生效。
在Linux中一般通過環境變數配置操作系統的環境,如提示符、查找命令的路徑、用戶家目錄等,這些系統預設的環境變數的變數名是固定的,我們只能修改變數的值。
子程式
如果目前這個shell的情況下,去啟用另一個新的shell,新的那個shell就是子程式。
在一般的狀態下,父程式的自定義變數是無法在子程式內使用的。但是通過export將變數變成環境變數後,就能夠在子程式里使用了。
設置變數
環境變數和用戶自定義變數的設置方法相比,只需通過export命令將變數聲明為環境變數即可:
1 [root@localhost ~]# export var=hello
也可以先把變數聲明為本地變數,再用export聲明為環境變數:
1 [root@localhost ~]# var=hello 2 [root@localhost ~]# export var
顯示和使用變數
環境變數也可以使用echo命令來獲取:
1 [root@localhost ~]# $變數名
set既可以查詢用戶自定義變數,也可以查詢環境變數。也可以使用env命進行環境變數的查詢,env命令不會顯示用戶自定義變數:
1 [root@localhost ~]# env
刪除變數
環境變數的刪除方法和用戶自定義變數是一樣的,都使用unset命令:
1 [root@localhost ~]# unset 變數名
其他類型的變數
位置參數變數
在Linux的命令行中,當一條命令或腳本執行時,後面可以跟多個參數,我們使用位置參數變數來表示這些參數。
其中,$0代表命令行本身,$1代表第1個參數,$2代表第2個參數,依次類推。當參數個數超過10個時,就要用大括弧把這個數字括起來,例如,${10}代表第10個參數。
在Shell中可以識別的位置參數變數:
1 $n:n為數字,$0代表命令本身,$1到$9代表第1個到第9個參數,10以上的參數需要用大括弧包含,如${10}。 2 $*:這個變數代表命令行中所有的參數,把所有的參數看成一個整體。 3 $@:這個變數也代表命令行中所有的參數,不過$@把每個參數區別對待。 4 $#:這個變數代表命令行中所有參數的個數。
預定義變數
預定義變數是在Shell一開始時就定義的變數,這一點和預設環境變數有些類似。不同的是,預定義變數不能重新定義,用戶只能根據Shell的定義來使用這些變數。
嚴格來說,位置參數變數也是預定義變數的一種,知識位置參數變數的作用比較統一,所以我們把位置參數變數單獨劃分為一類數量。
Shell中主要的預定義變數:
1 $?:最後一次執行的命令的返回狀態。如果這個變數的值為0,則證明上一條命令正確執行。如果這個變數的值不為0,則證明上一條命令執行錯誤。 2 $$:當前進程的進程號(PID)。 3 $!:後臺運行的最後一個進程的進程號(PID)。
聲明變數類型
所有變數的預設類型是字元串型,使用declare命令可以聲明變數的類型。
基本語法
1 [root@localhost ~]# declare [+/-] [選項] 變數名
選項說明
1 -:給變數設定類型屬性。 2 +:取消變數的類型屬性。 3 -a:將變數聲明為數組型。 4 -i:將變數聲明為整數型。 5 -r:將變數聲明為只讀變數。註意,一旦設置為只讀變數,既不能修改變數的值,也不能刪除變數,甚至不能通過+r取消只讀屬性。 6 -x:將變數聲明為環境變數。 7 -p:顯示指定變數的被聲明的類型。