日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell脚本头,#!/bin/sh与#!/bin/bash的区别.

發布時間:2024/8/22 编程问答 39 如意码农
生活随笔 收集整理的這篇文章主要介紹了 shell脚本头,#!/bin/sh与#!/bin/bash的区别. 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為今天寫了個小腳本,死活不成功,總是報文件或者目錄不存在,問了一下我們馬同學的正常寫法,發現只有腳本頭的區別,也就是今天本文要講的#!/bin/sh與#!/bin/bash.

本文參考:https://www.cnblogs.com/aaronLinux/p/6885288.html和http://www.cnblogs.com/baizhantang/archive/2012/09/11/2680453.html

一:解釋

#!/bin/sh是指此腳本使用/bin/sh來解釋執行,#!是特殊的表示符,其后面跟的是此解釋此腳本的shell的路徑。

$ cat /etc/shells可以查看系統支持的shell格式

其實第一句的#!是對腳本的解釋器程序路徑,腳本的內容是由解釋器解釋的,我們可以用各種各樣的解釋器來寫對應的腳本。

比如說/bin/csh腳本,/bin/perl腳本,/bin/awk腳本,/bin/sed腳本,/bin/python腳本,甚至/bin/echo等等。

#!/bin/bash同理。

二:區別

腳本test.sh內容:

#!/bin/sh

source pcy.sh #pcy.sh并不存在

echo hello

執行./test.sh,屏幕輸出為:

./test.sh: line 2: pcy.sh: No such file or directory

由此可見,在#!/bin/sh的情況下,source不成功,不會運行source后面的代碼。

修改test.sh腳本的第一行,變為#!/bin/bash,再次執行./test.sh,屏幕輸出為:

./test.sh: line 2: pcy.sh: No such file or directory

hello

由此可見,在#!/bin/bash的情況下,雖然source不成功,但是還是運行了source后面的echo語句。

但是緊接著我又試著運行了一下sh ./test.sh,這次屏幕輸出為:

./test.sh: line 2: pcy.sh: No such file or directory

表示雖然腳本中指定了#!/bin/bash,但是如果使用sh 方式運行,如果source不成功,也不會運行source后面的代碼。

為什么會有這樣的區別呢?

junru同學作了解釋

  1. sh一般設成bash的軟鏈

    [work@zjm-testing-app46 cy]$ ll /bin/sh

    lrwxrwxrwx 1 root root 4 Nov 13 2006 /bin/sh -> bash
  2. 在一般的linux系統當中(如redhat),使用sh調用執行腳本相當于打開了bash的POSIX標準模式
  3. 也就是說 /bin/sh 相當于 /bin/bash --posix

所以,sh跟bash的區別,實際上就是bash有沒有開啟posix模式的區別

so,可以預想的是,如果第一行寫成 #!/bin/bash --posix,那么腳本執行效果跟#!/bin/sh是一樣的(遵循posix的特定規范,有可能就包括這樣的規范:“當某行代碼出錯時,不繼續往下解釋”)

總結

以上是生活随笔為你收集整理的shell脚本头,#!/bin/sh与#!/bin/bash的区别.的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。