小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

#!/bin/bash

 閱文書(shū)苑 2014-07-11
 #!/bin/bash是指此腳本使用/bin/bash來(lái)解釋執(zhí)行。
其中,#!是一個(gè)特殊的表示符,其后,跟著解釋此腳本的shell路徑。
bash只是shell的一種,還有很多其它shell,如:sh,csh,ksh,tcsh,...
我們可以通過(guò)以下一個(gè)示例來(lái)進(jìn)行實(shí)驗(yàn),了解#!/bin/bash的使用。
1)#!/bin/bash只能放在第一行,如果后面還有#!,那么只能看成是注釋。
這里有三個(gè)腳本(腳本都要使用”chmod +x  scriptname“命令來(lái)獲得可執(zhí)行權(quán)限):
tbash1.sh:
#!/bin/sh
source abc
echo "hello abc"

tbash2.sh:
#!/bin/bash
source abc
echo "hello abc"

tbash3.sh:
source abc
echo "hello abc"

三個(gè)腳本執(zhí)行的結(jié)果:
[nsvc@localhost other]$ ./tbash1.sh 
./tbash1.sh: line 2: abc: No such file or directory
注:當(dāng)source命令執(zhí)行有問(wèn)題時(shí),sh不再往下面執(zhí)行。
[nsvc@localhost other]$ ./tbash2.sh 
./tbash2.sh: line 2: abc: No such file or directory
hello abc
注:當(dāng)source命令執(zhí)行有問(wèn)題時(shí),bash繼續(xù)執(zhí)行下面命令。
[nsvc@localhost other]$ ./tbash3.sh 
./tbash3.sh: line 1: abc: No such file or directory
hello abc
注:自身登錄系統(tǒng)所在的shell是bash。所以,當(dāng)source命令執(zhí)行有問(wèn)題時(shí),bash繼續(xù)執(zhí)行下面命令。

如果將tbash1.sh改成:
echo "abc"
#!/bin/sh
source abc
echo "hello abc"
那么,執(zhí)行結(jié)果是:
[nsvc@localhost other]$ ./tbash1.sh 
abc
./tbash1.sh: line 3: abc: No such file or directory
hello abc
也就是說(shuō),腳本忽略了第二行“#!/bin/sh",直接使用當(dāng)前所在的shell(也就是bash)來(lái)解釋腳本。

當(dāng)把tbash1.sh改成:
#!/bin/sh
#!/bin/bash
source abc
echo "hello abc"
執(zhí)行結(jié)果為:
[nsvc@localhost other]$ ./tbash1.sh 
./tbash1.sh: line 3: abc: No such file or directory
當(dāng)執(zhí)行完source命令時(shí),并沒(méi)有往下執(zhí)行。說(shuō)明,#!/bin/sh這一行起到作用了,但#!/bin/bash并沒(méi)有起作用。在腳本中,不在第一行的#!/bin/bash,只是一個(gè)注釋。

2)#!后面的路徑一定要正確,不正確會(huì)報(bào)錯(cuò)。
假如,我們把tbash1.sh中第一行的#!后面加了一個(gè)不存在的路徑”/home/sh“:
#!/home/sh
source abc
echo "hello abc"
執(zhí)行結(jié)果為:
[nsvc@localhost other]$ ./tbash1.sh 
-bash: ./tbash1.sh: /home/sh: bad interpreter: No such file or directory
系統(tǒng)會(huì)提示/home/sh的路徑不存在。

3)如果一個(gè)腳本在第一行沒(méi)有加上#!+shell路徑這一行,那么,腳本會(huì)默認(rèn)當(dāng)前用戶(hù)登錄的shell,為腳本解釋器。
在1)中,腳本tbash3.sh的執(zhí)行結(jié)果,就是用當(dāng)前自己登錄的shell(bash)解釋后的結(jié)果。我們通常所用的shell都是bash,如果哪天登錄到sh,再使用以上類(lèi)型的腳本,就會(huì)有問(wèn)題。以下是自己登錄到sh下,執(zhí)行tbash3.sh的結(jié)果:
-sh-3.2$ ./tbash3.sh 
./tbash3.sh: line 1: abc: 沒(méi)有那個(gè)文件或目錄
與1)中的執(zhí)行結(jié)果是不一樣的。
因此,大家應(yīng)該養(yǎng)成腳本首行加上#!+shell路徑的習(xí)慣。

4)/bin/sh相當(dāng)于/bin/bash --posix
我們將腳本tbash1.sh改為:
#!/bin/bash --posix
source abc
echo "hello abc"
執(zhí)行結(jié)果:
[nsvc@localhost other]$ ./tbash1.sh 
./tbash1.sh: line 2: abc: No such file or directory
與tbash1.sh原腳本執(zhí)行的結(jié)果一樣。

我們還可以以tbash3.sh為示例。
用以下命令來(lái)執(zhí)行該腳本:
[nsvc@localhost other]$ bash tbash3.sh
tbash3.sh: line 1: abc: No such file or directory
hello abc
[nsvc@localhost other]$ sh tbash3.sh 
tbash3.sh: line 1: abc: No such file or directory
[nsvc@localhost other]$ bash --posix tbash3.sh 
tbash3.sh: line 1: abc: No such file or directory
 "bash tbash3.sh"表示使用bash來(lái)作為腳本解釋器來(lái)執(zhí)行tbash3.sh。同樣,也可以使用如”sh 腳本名“這樣的命令,來(lái)用sh作為腳本解釋器。
從結(jié)果可以看出,/bin/bash --posix與/bin/sh的執(zhí)行結(jié)果相同??偨Y(jié)起來(lái),sh跟bash的區(qū)別,實(shí)際上是bash有沒(méi)開(kāi)啟posix模式的區(qū)別。遵守posix規(guī)范,可能包括,”當(dāng)某行代碼出錯(cuò)時(shí),不繼續(xù)往下執(zhí)行?!?/div>

最后加上一點(diǎn)說(shuō)明,每個(gè)腳本開(kāi)頭都使用"#!",#!實(shí)際上是一個(gè)2字節(jié)魔法數(shù)字,這是指定一個(gè)文件類(lèi)型的特殊標(biāo)記,在這種情況下,指的就是一個(gè)可執(zhí)行的腳本。在#!之后,接一個(gè)路徑名,這個(gè)路徑名指定了一個(gè)解釋腳本命令的程序,這個(gè)程序可以是shell,程序語(yǔ)言或者任意一個(gè)通用程序。

總結(jié)起來(lái),要規(guī)規(guī)舉舉地按照秩序行。

耶穌愛(ài)你。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多