網(wǎng)站綜合建設(shè)筆記可以免費發(fā)布廣告的平臺有哪些
前言
當你面試的時候,可能要說的架構(gòu)什么都準備好了,也說的七七八八,結(jié)果到最后問了一些基礎(chǔ)的問題答不上來或者沒想起來就很容易造成社會性死亡,一個沒答上來道心被破,后面就更容易懵逼了
通常造成這個問題的原因是寫腳本的頻率和方法,也許對于一個常年工作的人,寫腳本的頻率是幾月寫一次,相似的場景復(fù)用舊腳本修改,時間長了不注意有的基礎(chǔ)就忘了,但是面試的時候面試者可能近期有寫腳本或者隨手一搜shell基礎(chǔ)或者隨口一提
所以預(yù)計分幾篇對這些可能問但有的不常用的shell基礎(chǔ)問題進行匯總,這篇文章主要總結(jié)了$的相關(guān)含義以及具體的應(yīng)用場景
$# $* $@ $0 $1 $2等都代表了什么?
大致的功能基本是用于向腳本內(nèi)傳遞參數(shù),就是說寫一個傳遞參數(shù)的腳本,用于執(zhí)行腳本內(nèi)的某項功能,這種傳參數(shù)類的腳本通常是多功能性的,常和函數(shù)或者case搭配使用。一般來說配置的越復(fù)雜,使用的傳參類型越多的腳本,適應(yīng)的環(huán)境或功能越復(fù)雜,常見于第三方公司或者某些公司為客戶提供以便于用戶使用、開源項目或者外掛式腳本(通過網(wǎng)頁請求和參數(shù)后即可完成某項任務(wù),例如某些病毒以此原理訪問即會下載并傳播)
而備份,還原,部署,定時任務(wù)等只需要完成某一項任務(wù)的腳本中通常很少見到$# $@ $*
示例:
/bin/sh test.sh hook
$# 代表傳給腳本的參數(shù)的個數(shù)
sh test.sh hook#!/bin/bash
echo $#
返回值為:
1代表你執(zhí)行腳本的時候輸入了一個參數(shù),$#可用于判斷執(zhí)行該腳本時是否輸入了參數(shù),如果輸入了參數(shù)執(zhí)行腳本中該參數(shù)代表功能,如果沒輸入?yún)?shù)執(zhí)行默認的設(shè)置或不執(zhí)行
$@ 列出傳給腳本的所有的參數(shù)
sh test.sh 1 2 3 4 5 6#!/bin/bash
echo $@
echo "$@"
echo "+++++++++++++++++++"
for i in "$@"
doecho $i
done
返回值為:
1 2 3 4 5 6
1 2 3 4 5 6
+++++++++++++++++++
1
2
3
4
5
6$@會把你執(zhí)行腳本后面輸入的參數(shù)都列出來,有文檔說加雙引號后,可能輸出的結(jié)果不同,但經(jīng)過Centos7.9和ubuntu18.04的測試,列出的數(shù)量限制和格式都沒區(qū)別
$@傳遞參數(shù)時是把每一個參數(shù)都分開傳了一次
$* 列出傳給腳本的所有的參數(shù)
sh test.sh 1 2 3 4 5 6#!/bin/bash
echo $*
echo "$*"
echo "+++++++++++++++++++"
for i in "$*"
doecho $i
done
返回值為:
1 2 3 4 5 6
1 2 3 4 5 6
+++++++++++++++++++
1 2 3 4 5 6$*也會把你執(zhí)行腳本后面輸入的參數(shù)都列出來,有文檔說加雙引號后,可能輸出的結(jié)果不同,但經(jīng)過Centos7.9和ubuntu18.04的測試,列出的數(shù)量限制和格式也都沒區(qū)別
$*傳遞參數(shù)時是把所有參數(shù)當作了一個字符串
$0 輸出該腳本本身的名字
sh test.sh #!/bin/bash
echo $0
返回值為:
test.sh這個相較于前3個常用,常見于提示性內(nèi)容的輸出中。
當你沒輸入?yún)?shù)或者輸入沒有的參數(shù)時,進行提示。usage: sh $0 check|start|stop|restart
$1 $2… $n代表傳遞給該shell腳本的第幾個參數(shù)
sh test.sh running 1 #!/bin/bash
echo $1
echo $2
返回值為:
running
1這個最常見和顯而易見的,會根據(jù)第幾個參數(shù)執(zhí)行對應(yīng)的命令。
通常用于輸入多個參數(shù)后,當判斷第一個參數(shù)是某個任務(wù)后,之后的參數(shù)配合前一個參數(shù)的任務(wù)進行補充性的執(zhí)行,常見于部署或啟動關(guān)閉服務(wù)等腳本。示例:sh online.sh stop 3 ,假設(shè)這是一個主要是上線相關(guān)功能的腳本,意思是執(zhí)行關(guān)閉任務(wù),關(guān)閉第3個節(jié)點
$$ 顯示腳本運行的當前進程ID號
sh test.sh running 1 #!/bin/bash
echo $$
返回值為:
2913這個是返回執(zhí)行這個腳本時的pid,實際應(yīng)用只能說大多數(shù)人用的都很淺,用于提示性內(nèi)容的輸出,例如 腳本執(zhí)行完成,返回個成功提示,告訴你服務(wù)啟動完成,當前pid是XXX誰有獲得pid后,后續(xù)又用其完成某項功能的 可以評論區(qū)投稿
$? 對上一條命令的執(zhí)行結(jié)果進行反饋,0表示執(zhí)行成功,其余數(shù)字表示執(zhí)行不成功
sh test.sh #!/bin/bash
ls fuck1241d.txt
echo $?
返回值為:
2
因為實際沒有這個文件,返回值不為0這個是最常用的$參數(shù),常見大多數(shù)shell腳本,在shell腳本的實際應(yīng)用為在執(zhí)行某個命令后,判斷是否成功或者失敗,然后再根據(jù)成功或失敗的反饋,執(zhí)行不同情況的相應(yīng)的命令。示例,yum安裝某個軟件,如果安裝失敗后,會通過wget或url等別的方式去再安裝。
其他
$- 顯示 Shell 使用的當前選項
雖然有這個的解釋,但是簡直無法想象生產(chǎn)里實際用到這個或者問這個問題的是什么人,誰實際生產(chǎn)有使用到這個,可以評論區(qū)貼地址,大家去觀摩一下