linux中$符號(hào)的基礎(chǔ)用法總結(jié)
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 ~]#
$符號(hào)草集
目標(biāo)
$符號(hào)在linux系統(tǒng)的有著很多很重要的作用,特別是在編寫bash腳本的時(shí)候,隨處可見$的身影。由于他的千變?nèi)f化,多種多樣,使對(duì)他的掌握和使用,尤其是記憶帶來(lái)了挑戰(zhàn),所以,現(xiàn)在,我們來(lái)一起將它的用法做一次匯總,形成草集。掌握他們不會(huì)讓你工資大漲,因?yàn)槊嬖嚥粫?huì)問到,但是會(huì)提高你的工作效率,擴(kuò)展你的視野
目前,我所知道的$用法有$、"$"、$0 $1 $n、$#、$@ $*、$?、$()、${}、${#}、$[]、$-、$!、$$。額外!$,!!,依次詳說
$ 獲取變量值
$可獲取變量的值
[root@izbp10lqlgy2g31s41bt94z ~]# a=1 [root@izbp10lqlgy2g31s41bt94z ~]# echo $a 1
"$" 獲取變量值時(shí)最好使用"括起來(lái)
為什么有這個(gè)建議呢,看實(shí)例
[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
可以看到,有無(wú)"雙引號(hào)括起來(lái)似乎效果是一樣的。別早下結(jié)論,往下看
[root@izbp10lqlgy2g31s41bt94z ~]# a="i am skyler" [root@izbp10lqlgy2g31s41bt94z ~]# [ $a == "i am skyler" ] -bash: [: 參數(shù)太多
這里解析下[],[]是條件判斷符號(hào),相當(dāng)于test命令。他的意思是判斷a變量的值是否等于"i am skyler"。
那么為什么會(huì)報(bào)錯(cuò)呢,因?yàn)閇 $a == "i am skyler"]這種寫法變量解析后成為[ i am skyler == "i am skyler" ],很明顯,這個(gè)判斷式無(wú)法判斷等號(hào)兩邊的字符串,我們想要的是[ "i am skyler" == "i am skyler" ]的比較。所以平時(shí)我們?cè)谑莕ame"
[root@izbp10lqlgy2g31s41bt94z ~]# [ "$a" == "i am skyler" ] [root@izbp10lqlgy2g31s41bt94z ~]# echo $? 0
使用雙引號(hào)后就可以了,這里提前用了下$?,他的意思是判斷前一個(gè)命令執(zhí)行結(jié)果是否正確。輸出的結(jié)果中,0表示執(zhí)行成功,非零值表示出錯(cuò)
${}用于區(qū)分變量的邊界,明確告訴程序要取哪個(gè)變量的值
如下實(shí)例,不加{}程序無(wú)法判斷ab $abc哪個(gè)是變量,無(wú)法解析
[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 ~]#
${#}獲取變量值的長(zhǎng)度
[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 獲取文件名稱和參數(shù)值,一般在bash腳本中較多
$0 表示shell腳本文件名;從1開始表示第幾個(gè)參數(shù),1表示第一個(gè)參數(shù)。這里我們創(chuàng)建一個(gè)test.sh可執(zhí)行文件
創(chuàng)建一個(gè)test.sh文件并填充代碼 [root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $0 $1 $2' > test.sh [root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh echo $0 $1 $2 執(zhí)行test.sh 并傳入變量 [root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh i am skyler test.sh i am
可以看到,三個(gè)參數(shù)中前兩個(gè)打印出來(lái)了,因?yàn)槲覀儧]有聲明$3,所有打印出了文件名稱和前兩個(gè)參數(shù)
$# 獲取參數(shù)數(shù)量
[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
$@ $* 數(shù)組的形式引用參數(shù)列表
它們的區(qū)別在于使用雙引號(hào)括起來(lái)用時(shí),假設(shè)傳入的參數(shù)為1 2 3,那么"*的值為”1 2 3”一個(gè)變量
test.sh echo '$@的數(shù)組參數(shù)格式' for x in "$@" do echo + $x done echo '$*的數(shù)組參數(shù)格式' for x in "$*" do echo + $x done root@izbp10lqlgy2g31s41bt94z:~# sh test.sh 1 2 3 $@的數(shù)組參數(shù)格式 + 1 + 2 + 3 $*的數(shù)組參數(shù)格式 + 1 2 3
$? 判斷上一個(gè)命令執(zhí)行是否成功
執(zhí)行成功值時(shí)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
$() 等同于使用雙引號(hào)的作用
略
$[] 表達(dá)式計(jì)算
此時(shí)的[]不是用于判斷式的場(chǎng)景,[]作為判斷式一般用于bash腳步中if while等條件語(yǔ)句
[root@izbp10lqlgy2g31s41bt94z ~]# echo $[5 + 5] 10
$- 顯示shell所使用的當(dāng)前選項(xiàng)
[root@izbp10lqlgy2g31s41bt94z ~]# echo $- himBH 解釋:himBH每一個(gè)字符是一個(gè)shell的選項(xiàng),詳情man bash然后搜索 -h -B 等。詳情參考:http://kodango.com/explain-shell-default-options
$! 獲取后臺(tái)運(yùn)行最后一個(gè)進(jìn)程的pid,更多應(yīng)用在bash腳本
[root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh & [1] 362 [root@izbp10lqlgy2g31s41bt94z ~]# echo $# $0 $1 ^C [1]+ 完成 cat test.sh [root@izbp10lqlgy2g31s41bt94z ~]# echo $! 362
!$ 將上一條命令的參數(shù)傳遞給下一條命令的參數(shù),平時(shí)用于更方便,更多應(yīng)用在bash腳本
[root@izbp10lqlgy2g31s41bt94z ~]# cd /Users/skyler/project/test [root@izbp10lqlgy2g31s41bt94z ~]# ll !$ [root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test 362
!! 將上一條命令輸出 ,平時(shí)用于更方便,更多應(yīng)用在bash腳本
[root@izbp10lqlgy2g31s41bt94z ~]# !! [root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test
$$ 獲取當(dāng)前進(jìn)程pid
[root@izbp10lqlgy2g31s41bt94z ~]# echo $$ 31268 [root@izbp10lqlgy2g31s41bt94z ~]# ps -ef|grep 31268 root 31268 31266 0 08:10 pts/0 00:00:00 -bash
當(dāng)前的進(jìn)程是bash,pid是31268
平日多加練習(xí),用時(shí)隨心索取
段進(jìn)行分頁(yè)拉取也是可以達(dá)到效果的,具體還是要由業(yè)務(wù)場(chǎng)景來(lái)定。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。
上一篇:Ubuntu16.04安裝Jenkins的方法圖文詳解
欄 目:Linux/apache
下一篇:Linux下查看壓縮文件內(nèi)容的10種方法(小結(jié))
本文標(biāo)題:linux中$符號(hào)的基礎(chǔ)用法總結(jié)
本文地址:http://mengdiqiu.com.cn/a1/Linux_apache/10695.html
您可能感興趣的文章
- 04-02linux關(guān)閉串口命令 關(guān)閉linux端口命令
- 04-02linux文件命令重命名 linux重命名文件名命令
- 04-02linux命令注入過濾 linux 代碼注入
- 04-02linux中jobs命令 shell jobs命令
- 04-02linux依次執(zhí)行命令 linux命令的執(zhí)行過程是怎樣的?新手必讀
- 04-02linux命令免輸入 linux配置免密登錄
- 04-02linux命令注銷vnc linux命令行注銷用戶
- 04-02軟交換linux命令 軟交換網(wǎng)絡(luò)主要協(xié)議有哪些
- 04-02linux命令歷史記錄 linux查看歷史記錄的操作命令
- 04-02linux命令頁(yè)面 linux命令頁(yè)面中文


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02linux關(guān)閉串口命令 關(guān)閉linux端口命令
- 04-02linux文件命令重命名 linux重命名文件名
- 04-02linux中jobs命令 shell jobs命令
- 04-02linux命令注入過濾 linux 代碼注入
- 04-02linux依次執(zhí)行命令 linux命令的執(zhí)行過程
- 04-02linux命令注銷vnc linux命令行注銷用戶
- 04-02linux命令免輸入 linux配置免密登錄
- 04-02軟交換linux命令 軟交換網(wǎng)絡(luò)主要協(xié)議
- 04-02linux命令歷史記錄 linux查看歷史記錄的
- 04-02linux命令頁(yè)面 linux命令頁(yè)面中文
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?