Shell變量基礎與常用運算符

shell變量的命名規則:

  • 命名只能是字母、數字、下劃線組成,首個字母不能以數字開頭
  • 中間不能有空格,可以使用下劃線
  • 不能使用標點符號,不能使用bash裏面的關鍵字(可用help命令查看保留關鍵字)

注意事項:

1/若指定的變量名已存在,相當於爲此變量重新賦值
2.等號兩邊不要有空格
3.變量名由字母/數字/下劃線組成,區分大小寫
4.變量名不能以數字開頭,不要使用關鍵字和特殊字符
5.查看變量時,若變量名稱和後面的字符串連在一起,則應該以{}將變量名括起來以便於區分(下面有舉例子說明,第4個例子“d”)

定義/賦值變量:

變量名=變量值
在命令行直接定義的變量是臨時變量,想要設置永久的變量需要在相關配置文件裏面設置;
全局文件爲/etc/profile,對所有的用戶有效;
用戶文件爲~/.bash_profile,僅對指定用戶有效;

變量的類型:

  • 環境變量:用於保存操作系統運行時使用的環境參數
  • 位置變量:Bash將傳遞給腳本的參數保存在位置變量中,以便於在腳本中引用這些參數
  • 預定義變量:由系統保留和維護的一組特殊的變量,這些變量通常用於保存程序運行狀態等
  • 自定義變量:由用戶自行定義的變量,可用於用戶編寫的腳本,多個命令間的值傳遞等

常見的環境變量:

PWD:表示當前路徑
PATH:shell尋找命令或者程序的路徑
USER:表示當前用戶
LOGNAME:當前用戶的登錄名
UID:表示用戶的id號
SHELL:表示當前用戶shell的類型
HOME:當前用戶的家目錄
PS1:表示shell環境的以及提示符,即命令行提示符(\u用戶名、\h主機名、\W工作目錄、$權限標識,對於root用戶是#,對於普通用戶是$)
在這裏插入圖片描述

引用變量值: $變量名
查看變量值: echo $變量名,echo ${變量名}
取消變量: unset 變量名
使用env可以查看系統所有的環境變量
使用set可以查看系統的所有變量

實例:
a.定義一個臨時變量a,值爲8:
在這裏插入圖片描述
b.取消變量a:
在這裏插入圖片描述
c.定義一個永久變量b,值爲123:
在/etc/profile文件裏面找一空行添加“b=123”再重新加載/etc/profile文件就可以了
在這裏插入圖片描述
在這裏插入圖片描述
d.定義一個變量abc,值爲5,輸出5RMB:
在這裏插入圖片描述
常見的位置變量跟預定義變量的含義:

$0:輸出腳本的名稱
$1:傳入腳本的第一個參數
$2:傳入腳本的第二個參數
$*:列出傳遞到腳本的所有參數
$#:傳遞到腳本的參數的個數
$$:當前運行的腳本的進程號
$!:後臺運行的最後一個進程號
$?:顯示最後一條命令的推出狀態,輸出值爲0表示沒有錯誤,輸出非0值表示上一條命令運行有錯誤

#可以通過寫這樣的一個簡單腳本驗證一下:
https://img-blog.csdnimg.cn/20190809102428245.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDkwMTU2NA==,size_16,color_FFFFFF,t_70
#運行腳本ceshi.sh,接上參數1 2:
在這裏插入圖片描述
輸出結果的第一行爲$0

輸出結果的第二行爲$1

輸出結果的第三行爲$2

輸出結果的第四行爲$*

輸出結果的第五行爲$#

輸出結果的第六行爲$$

輸出結果的第七行爲$!

輸出結果的第八行爲$?

關係運算符:

-eq:等於(檢測兩個數是否相等,相等爲真),如:[ $a -eq $b ]
-ne:不等於(檢測兩個數是否不相等,不相等爲真),如:[ $a -ne $b ]
-gt:大於(左邊數的數是否大於右邊的,如果是,則爲真),如:[ $a -gt $b ]
-lt:小於(檢測左邊的數是否小於右邊的,如果是,則爲真),如:[ $a -ge $b ]
-ge:大於或者等於(檢測左邊的數是否大於或者等於右邊的,如果是,則爲真),如:[ $a -lt $b ]
-le:小於或者等於(檢測左邊的數是否小於或者等於右邊的數,如果是,則爲真),如:[ $a -le $b ]

邏輯運算符:

&&:&&左邊的命令返回真(即返回0,成功被執行)後,&&右邊的命令才能夠被執行;換句話說,“如果這個命令執行成功&&那麼執行這個命令”。(邏輯的and)

||:||則與&&相反。如果||左邊的命令未執行成功,那麼就執行||右邊的命令;或者換句話說,“如果這個命令執行失敗了||那麼就執行這個命令“。(邏輯的or)

字符串運算符:

=:檢測兩個字符串是否相等
!=:檢測兩個字符串是否不相等
-z:檢測字符串長度是否爲0(爲空)
-n:檢測字符串長度是否不爲0(不爲空)
$:檢測字符串是否爲空

==:可用於判斷變量是否相等
=:除了可用於判斷變量是否相等外,還可以表示賦值

#=與==在[ ]中表示判斷(字符串比較)時是等價的

文件測試運算符:

-b:檢測文件是否爲塊設備
-c:檢測文件是否是字符設備文件
-d:檢測文件是否是目錄,如果是,則返回true
-f:檢測文件是否是普通文件(既不是目錄,也不是設備文件)
-g:檢測文件是否設置了SGID位,如果是,則返回true
-k:檢測文件是否設置了粘着位(Sticky Bit),如果是,則返回true
-u:檢測文件是否設置了SUID位,如果是,則返回true
-r:檢測文件是否可讀,如果是,則返回true
-w:檢測文件是否可寫
-x:檢測文件是否可執行
-s:檢測文件是否爲空,文件大小不爲0(內容長度不爲0)爲真
-e:檢測文件(包括目錄)是否存在,如果是,則返回true
-o:是or,左右條件任意一條成立
-a:是and,左右條件兩者都要成立
!:取非

shell腳本中常見的特殊字符的含義:

\b:Backspace
\c:顯示後不換行
\f:在終端上屏幕的開始處顯示
\n:表示換行
\r:回車
\t:製表符,也就是我們常說的tab鍵
\v:垂直製表符
\:反斜槓,轉義符
‘‘:單引號,界定範圍,可以取消範圍內特殊字符的含義,例如:想要使轉義符“\”成爲普通的反斜槓,可以在命令中給轉義符“\”外面套上單引號,單引號可以解決變量賦值空格的問題
“”:雙引號,界定範圍,不可以取消範圍內特殊字符的含義,可以解決變量賦值空格的問題
``:反引號,相當於$(),將範圍內命令輸出的結果不受範圍外命令的影響,輸出的結果可以直接參與到範圍外的命令的執行

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