溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux命令sh指的是什么

發(fā)布時(shí)間:2023-04-19 10:32:11 來(lái)源:億速云 閱讀:185 作者:iii 欄目:建站服務(wù)器

本篇內(nèi)容主要講解“l(fā)inux命令sh指的是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“l(fā)inux命令sh指的是什么”吧!

linux命令sh是linux中運(yùn)行shell的命令,是shell的解釋器,shell腳本是linux中殼層與命令行界面,用戶可以在shell腳本輸入命令來(lái)執(zhí)行各種各樣的任務(wù)。

1. 可能需要的執(zhí)行方式

linux下執(zhí)行.sh文件的方法

.sh文件就是文本文件,如果要執(zhí)行,需要使用chmod a+x xxx.sh來(lái)給可執(zhí)行權(quán)限。

2. 開頭:#!/bin/sh

shell程序必須以“#!/bin/sh”開始。shell中#一般表示注釋的意思,所以很多時(shí)候認(rèn)為"#!"也是注釋,但實(shí)際上并不是。

"#!/bin/sh"是對(duì)shell的聲明,說(shuō)明你所用的是哪種類型的shell及其路徑所在。

#!/bin/是指此腳本使用.bin/sh來(lái)執(zhí)行。

#!是特殊的表示符,其后面跟的是解釋此腳本的shell的路徑,如果沒有聲明,則腳本將在默認(rèn)的shell中執(zhí)行,默認(rèn)shell是由用戶所在的系統(tǒng)定義為執(zhí)行shell腳本,如果腳本被編寫為在Kornshell ksh中運(yùn)行,而默認(rèn)運(yùn)行shell腳本的為C shell csh,則腳本在執(zhí)行過(guò)程中很可能失敗。所以建議大家就把"#!/bin/sh"當(dāng)成C 語(yǔ)言的main函數(shù)一樣,寫shell必須有,以使shell程序更嚴(yán)密。

3. 變量

在其他編程語(yǔ)言中必須使用變量。在shell編程中,所有變量都由字符串組成,并且不需要對(duì)變量進(jìn)行聲明。要賦值給一個(gè)變量,可以這樣寫:

#!/bin/sh
 #對(duì)變量賦值:
 a=”hello world”# 現(xiàn)在打印變量a的內(nèi)容:
 echo “A is:” echo $a

有時(shí)候變量名很容易與其他文字混淆,比如:

 num=2
 echo “this is the $numnd”

這并不會(huì)打印出”this is the 2nd",而僅僅打印"this is the ",因?yàn)閟hell會(huì)去搜索變量numnd的值,但是這個(gè)變量是沒有值的。因此,可以使用花括號(hào)來(lái)告訴shell我們要打印的是num變量:

 num=2
 echo “this is the ${num}nd”

這樣才會(huì)打印”this is the 2nd"

4. Shell命令和流程控制

在shell腳本中可以使用以下命令:

Unix命令

雖然在shell腳本中可以使用任意的unix命令,但還是有一些相對(duì)更常用的命令。這些命令通常是用來(lái)進(jìn)行文件和文字操作的。
如:

 echo "some text" #將文字內(nèi)容打印在屏幕上
 ls #文件列表
 cp sourcefile destfile #文件拷貝
 mv oldname newname #重命名文件或移動(dòng)文件
 rm file #刪除文件
 grep 'pattern' file #在文件內(nèi)搜索字符串,如:grep 'searchstring' file.txt
 cat file.txt #輸出文件內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)上
 read var #顯示用戶輸入,并將輸入賦值給變量

概念:管道,重定向和backtick(反斜線)

  1. 管道 | 將一個(gè)命令的輸出作為另外一個(gè)命令的輸入。

grep "hello" file.txt | wc -l

上述代碼表示為:在 file.txt 中搜索包含有 “hello” 的行并計(jì)算其行數(shù)。在這里grep命令的輸出作為wc命令的輸入。

需要注意的是,管道后的命令是子命令,并不會(huì)出現(xiàn)在接下來(lái)的命令中(有點(diǎn)像C++在{}內(nèi)和{}外賦值的區(qū)別),如以下命令:

#!/bin/shecho 1 2 3 | { read a b c ; echo $a $b $c ; } # 打印結(jié)果為: 1 2 3echo $a $b $c # 打印結(jié)果為空
  1. 重定向:將命令的結(jié)果輸出到文件,而不是標(biāo)準(zhǔn)輸出(屏幕)。
    >寫入文件并覆蓋舊文件
    >>追加到文件的尾部,保留舊文件內(nèi)容。

  2. 反短橫線 “`”:使用反短橫線可以將一個(gè)命令的輸出作為另一個(gè)命令的一個(gè)命令行參數(shù)。

 find . -mtime  -1  -type  f  -print

上述語(yǔ)句用來(lái)查找過(guò)去24小時(shí)(-mtime -2則表示過(guò)去48小時(shí))內(nèi)修改過(guò)的文件。如果想將所有查找到的文件打一個(gè)包,則可以使用一下linux腳本:

 #!/bin/sh
 # The ticks are backticks (`) not normal quotes (‘):
 tar -zcvf  lastmod.tar.gz `find . -mtime -1 -type f -print`

流程控制

if
if 表達(dá)式,如果條件為真則執(zhí)行 then 后面的部分:

 if ….; then
 …. elif ….; then
 …. else
 …. fi #注意是以fi結(jié)尾

大多數(shù)情況下,可以使用測(cè)試命令來(lái)對(duì)條件進(jìn)行測(cè)試。比如可以比較字符串、判斷文件時(shí)都存在以及是否可讀等等…

while
while 循環(huán)的語(yǔ)法結(jié)構(gòu)為:

# expression 1# while循環(huán):當(dāng)expresssion成立的時(shí)候,執(zhí)行cmdwhile (expresssion)do
  cmddone# expression 2,可以直接使用truewhile true(或 :)do 
	cmddone

該命令配合可以配合管道使用,如:

# 尋找 ${path} 路徑下唯一首字母為‘E’的子目錄,并 cd 到該目錄find ${path}/E* -type d | while read corresp_pathdo
	cd ${corresp_path}done

測(cè)試條件
通常使用“[ ]”來(lái)表示測(cè)試條件。注意這里的空格很重要,要確保方括號(hào)里的空格。

 [ -f "somefile" ] #判斷文件是否存在
 [ -d "testResults/" ] #判斷目錄testResults/是否存在
 [ -x "/bin/ls" ] #判斷/bin/ls文件是否存在并有可執(zhí)行權(quán)限
 [ -n "$var" ] #判斷$var變量是否有值
 [ "$a" = "$b" ] #判斷$a和$b是否相等

快捷操作符
熟悉C語(yǔ)言可能會(huì)喜歡一下表達(dá)式:

  [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”

這里“&&”就是一個(gè)快捷操作符,如果左邊的表達(dá)式為真則執(zhí)行右邊的語(yǔ)句。當(dāng)然也可以將上述表達(dá)式認(rèn)為是邏輯運(yùn)算中的與操作。

同樣或操作“||”在shell編程中也是可用的:

 #!/bin/sh
 mailfolder=/var/spool/mail/james [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; } #感覺這里的‘’應(yīng)該是||
 echo “$mailfolder has mail from:” grep “^From ” $mailfolder

該腳本首先判斷mailfolder是否可讀。如果可讀則打印該文件中的”From” 一行。如果不可讀則或操作生效,打印錯(cuò)誤信息后腳本退出。這里有個(gè)問(wèn)題,那就是我們必須有兩個(gè)命令:
◆打印錯(cuò)誤信息
◆退出程序
我們使用花括號(hào)以匿名函數(shù)的形式將兩個(gè)命令放到一起作為一個(gè)命令使用。一般函數(shù)將在下文提及。
不用‘與’和‘或’操作符,我們也可以用if表達(dá)式作任何事情,但是使用與或操作符會(huì)更便利很多。

到此,相信大家對(duì)“l(fā)inux命令sh指的是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI