您好,登錄后才能下訂單哦!
這篇文章給大家介紹$符號如何在linux中使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
linux使用版本: CentOS 7
[root@azfdbdfsdf230lqdg1ba91 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@azfdbdfsdf230lqdg1ba91 ~]# uname -a Linux azfdbdfsdf230lqdg1ba91 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [root@azfdbdfsdf230lqdg1ba91 ~]#
$符號草集
目標
$符號在linux系統的有著很多很重要的作用,特別是在編寫bash腳本的時候,隨處可見$的身影。由于他的千變萬化,多種多樣,使對他的掌握和使用,尤其是記憶帶來了挑戰,所以,現在,我們來一起將它的用法做一次匯總,形成草集。掌握他們不會讓你工資大漲,因為面試不會問到,但是會提高你的工作效率,擴展你的視野
目前,我所知道的$用法有$、"$"、$0 $1 $n、$#、$@ $*、$?、$()、${}、${#}、$[]、$-、$!、$$。額外!$,!!,依次詳說
$ 獲取變量值
$可獲取變量的值
[root@izbp10lqlgy2g31s41bt94z ~]# a=1 [root@izbp10lqlgy2g31s41bt94z ~]# echo $a 1
"$" 獲取變量值時最好使用"括起來
為什么有這個建議呢,看實例
[root@izbp10lqlgy2g31s41bt94z ~]# echo get value of a = $a get value of a = 1 [root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = $a" get value of a = 1
可以看到,有無"雙引號括起來似乎效果是一樣的。別早下結論,往下看
[root@izbp10lqlgy2g31s41bt94z ~]# a="i am skyler" [root@izbp10lqlgy2g31s41bt94z ~]# [ $a == "i am skyler" ] -bash: [: 參數太多
這里解析下[],[]是條件判斷符號,相當于test命令。他的意思是判斷a變量的值是否等于"i am skyler"。
那么為什么會報錯呢,因為[ $a == "i am skyler"]這種寫法變量解析后成為[ i am skyler == "i am skyler" ],很明顯,這個判斷式無法判斷等號兩邊的字符串,我們想要的是[ "i am skyler" == "i am skyler" ]的比較。所以平時我們在是name"
[root@izbp10lqlgy2g31s41bt94z ~]# [ "$a" == "i am skyler" ] [root@izbp10lqlgy2g31s41bt94z ~]# echo $? 0
使用雙引號后就可以了,這里提前用了下$?,他的意思是判斷前一個命令執行結果是否正確。輸出的結果中,0表示執行成功,非零值表示出錯
${}用于區分變量的邊界,明確告訴程序要取哪個變量的值
如下實例,不加{}程序無法判斷ab $abc哪個是變量,無法解析
[root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = $abc" get value of a = [root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = ${a}bc" get value of a = 1bc [root@izbp10lqlgy2g31s41bt94z ~]#
${#}獲取變量值的長度
[root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}" get length of a = 1 [root@izbp10lqlgy2g31s41bt94z ~]# a=11111 [root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}" get length of a = 5 [root@izbp10lqlgy2g31s41bt94z ~]# a=skyler [root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}" get length of a = 6 [root@izbp10lqlgy2g31s41bt94z ~]#
$0 $1 $n 獲取文件名稱和參數值,一般在bash腳本中較多
$0 表示shell腳本文件名;從1開始表示第幾個參數,1表示第一個參數。這里我們創建一個test.sh可執行文件
創建一個test.sh文件并填充代碼 [root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $0 $1 $2' > test.sh [root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh echo $0 $1 $2 執行test.sh 并傳入變量 [root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh i am skyler test.sh i am
可以看到,三個參數中前兩個打印出來了,因為我們沒有聲明$3,所有打印出了文件名稱和前兩個參數
$# 獲取參數數量
[root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $# $0 $1' > test.sh [root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh echo $# $0 $1 [root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh I am a shuashua 4 test.sh I
$@ $* 數組的形式引用參數列表
它們的區別在于使用雙引號括起來用時,假設傳入的參數為1 2 3,那么"*的值為”1 2 3”一個變量
test.sh echo '$@的數組參數格式' for x in "$@" do echo + $x done echo '$*的數組參數格式' for x in "$*" do echo + $x done root@izbp10lqlgy2g31s41bt94z:~# sh test.sh 1 2 3 $@的數組參數格式 + 1 + 2 + 3 $*的數組參數格式 + 1 2 3
$? 判斷上一個命令執行是否成功
執行成功值時0,失敗是非0
[root@izbp10lqlgy2g31s41bt94z ~]# ll 總用量 172 -rw-r--r-- 1 root root 49392 2月 25 2019 hs_err_pid24203.log -rw-r--r-- 1 root root 49425 2月 13 2019 hs_err_pid25726.log [root@izbp10lqlgy2g31s41bt94z ~]# echo $? 0 [root@izbp10lqlgy2g31s41bt94z ~]# ca ff -bash: ca: 未找到命令 [root@izbp10lqlgy2g31s41bt94z ~]# echo $? 127
$() 等同于使用雙引號的作用
略
$[] 表達式計算
此時的[]不是用于判斷式的場景,[]作為判斷式一般用于bash腳步中if while等條件語句
[root@izbp10lqlgy2g31s41bt94z ~]# echo $[5 + 5] 10
$- 顯示shell所使用的當前選項
[root@izbp10lqlgy2g31s41bt94z ~]# echo $- himBH 解釋:himBH每一個字符是一個shell的選項,詳情man bash然后搜索 -h -B 等。詳情參考:http://kodango.com/explain-shell-default-options
$! 獲取后臺運行最后一個進程的pid,更多應用在bash腳本
[root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh & [1] 362 [root@izbp10lqlgy2g31s41bt94z ~]# echo $# $0 $1 ^C [1]+ 完成 cat test.sh [root@izbp10lqlgy2g31s41bt94z ~]# echo $! 362
!$ 將上一條命令的參數傳遞給下一條命令的參數,平時用于更方便,更多應用在bash腳本
[root@izbp10lqlgy2g31s41bt94z ~]# cd /Users/skyler/project/test [root@izbp10lqlgy2g31s41bt94z ~]# ll !$ [root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test 362
!! 將上一條命令輸出 ,平時用于更方便,更多應用在bash腳本
[root@izbp10lqlgy2g31s41bt94z ~]# !! [root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test
$$ 獲取當前進程pid
[root@izbp10lqlgy2g31s41bt94z ~]# echo $$ 31268 [root@izbp10lqlgy2g31s41bt94z ~]# ps -ef|grep 31268 root 31268 31266 0 08:10 pts/0 00:00:00 -bash
關于$符號如何在linux中使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。