一 用戶自定義變量
1 變量定義
name=”shen chao”
注意 變量名不能以數字開頭,可以不加雙引號,但如果有空格,就必須加雙引號或單引號
2變量疊加
如果需要增加變量的值,那麼可以進行變量值的疊加,形式可以是
3 查看變量set
4 刪除變量unset 變量名
比如unset aa
二 環境變量
1 環境變量是什麼
用戶自定義變量只能在當前Shell中生效,而環境變量會在當前Shell和這個Shell的所有子Shell中生效,如果把環境變量寫入相應的配置文件,那麼這個環境變量就會在所有的Shell中生效
什麼事Shell的子Shell呢,我們可以通過pstree來查看下
我們看到中間一行 -login-bash-pstree
如果我輸入命令csh,就是切換到當前Shell的子Shell csh
再用pstree看下
如果想退出當前子Shell用exit
再來pstree看下
恢復到之前的Shell了
2 設置環境變量
export 變量名=變量值 ,比用戶自定義變量多了一個export
env查詢環境變量
unset 變量名 刪除變量
我們用env查看下
3 系統常見環境變量
PATH:系統查找命令的路徑
這個環境變量的意思是如果用戶輸入一個命令或可執行文件,不加絕對路徑或者相對路徑,只是命令或可執行文件本身的名字,那麼系統就會到這個路徑下尋找該可執行文件,如果我們寫了一個命令或腳本,可以把自己的路徑加進來
PATH=”$PATH”:/root/sh
PS1:定義系統提示符的變量
什麼是系統提示符
這個就是系統提示符
\d:顯示日期,格式為”星期 月 日”
\h:顯示簡寫主機名,如默認主機名為”localhost”
\t:顯示24小時制時間,格式為”HH:MM:SS”
\T:顯示12小時制時間,格式為”HH:MM:SS”
\A:顯示24小時制時間,格式為”HH:MM”
\u:顯示當前系統名
\w:顯示當前所在目錄的完整名稱
\W:顯示所在目錄的最後一個目錄
\#:執行的第幾個命令
\$ 如果是root用戶,會顯示為#,如果是普通用戶顯示$
我們來看幾個例子
三 位置參數變量
$n n為數字,$0代表命令本身,$1到$9代表第1到9個參數,10以上需要加{} ${10}
$* 這個變量代表命令行中的所有參數,$*把所有參數看成一個整體
$@ 這個變量也代表命令行中的所有參數,$@把每個參數分別對待
$# 這個變量代表命令行中參數的個數
例子1
我們來寫一個腳本 canshu1.sh
輸出兩個數相加的結果
例子2
例子3
$*與$@的區別
$*中的所有參數看成一個整體,所以for循環只會執行一次
$@中的每個參數都看成是獨立的,所以有幾個參數,就會循環幾次
四 預定於變量
$? 最後一次執行的命令的返回狀態,如果這個變量的值為0,證明上一個命令正確執行,如果這個變量的值為非0(具體是哪個數,由命令自己決定),證明上一個命令執行不正確
$$ 當前進程的id號(PID)
\$! 後台運行的最後一進程的id號(PID)
find最後的&號代表是後台執行
接收鍵盤輸入
read 選項 變量名
-p “提示信息” :在等待read輸入時,輸出提示信息
-t 秒數:指定等待的時間
-n 字符數:不用按回車,達到指定字符數,就會執行
-s :隱藏數據的輸入,適用於機密的輸入
五 數值運算與運算符
我們先來看一個例子
aa和bb相加的結果依然是字符串,而不是我們想象到的33,這是因為Shell中默認是字符串,那如果我想要整數想加的結果怎麼辦呢
declare +/- 選項 變量名
- :給變量設定類型屬性
+ : 取消變量的類型屬性
-i :將變量聲明為整數型
-x:將變量聲明為環境變量
-p:顯示變量被聲明的類型
所以剛才如果用declare -i cc=$aa+$bb
就可以得到我們整數運算的值了
還可以用數值運算工具
expr
注意,要用這種方式,+號左右必須有空格
感覺很麻煩,推薦用下面這種方式
在Shell中常見的運算符
注意,這裡是優先級的數字越大,優先級越高
六 變量測試與運算符
主要是用在Shell編程中判斷y值的
因為y不存在,所以x=new
好了,Linux Shell基礎-Bash變量就總結到這裡,如有問題,歡迎指正,謝謝。