#!(sha-bang)--脚本的开始
生活随笔
收集整理的這篇文章主要介紹了
#!(sha-bang)--脚本的开始
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
----正在學習shell,途中做些筆記,整理整理,方便以后翻閱。--------RHEL_6.2_x64,GNU bash version 4.1.2(1)-release----?
幾乎每個shell腳本都是以#!開頭,接下來就講講關于#!的一些東西。1)編寫好的腳本需要一個解釋器,這就需要在腳本的開始利用#!指定你需要用到的解釋器。當然你也可以不指定,不過這樣的話,你的腳本就是一堆命令的集合。如果你的默認shell不是Bash,那許多Bash非常好的特性則不會起作用,更嚴重的是許多命令甚至變量都無法使用,比如Bash的內建命令:echo、read等等。如果不能使用變量的話,當然這也就失去了腳本編程的意義了。
2)#!是指定文件類型的特殊標記,在這種情況下也就是指這是一個腳本文件。在#!之后接著是一個路徑名,這個路徑名就是解釋腳本中命令的解釋程序所在的路徑,可能是一個shell, 也可能是一個程序語言, 也可能是一個工具包中的命令程序。這個解釋程序從頭開始解釋并且執行腳本中的命令(從sha-bang行下邊的一行開始),忽略注釋。
3)指定解釋器種類 #!/bin/sh #!/bin/bash #!/usr/bin/perl #!/usr/bin/tcl #!/bin/sed -f #!/usr/awk -f 上面的每一個腳本的開頭行都是一種解釋器,如果是/bin/sh, 那么就是默認shell (在Linux系統上默認就是 bash), 否則的話就是其他解釋器,如果你只使用默認的解釋器的話,這行也可以不寫。使用 #!/bin/sh, 因為大多數的商業UNIX系統上都是以Bourne shell作為默認shell,這樣可以使腳本移植到non-Linux的機器上,雖然這將會犧牲Bash一些獨特的特征,但是腳本將與POSIX 的sh標準相一致。
4)#!后面緊跟解釋器的路徑。給出的路徑名必須是正確的, 否則將會出現一個錯誤消息 -- 通常是"Command not found" -- 這將是你運行這個腳本時所得到的唯一結果。空白行也被認為是一行,所以不要讓你的腳本以空白行開始。
5)因為這行是以#作為行的開頭,當命令解釋器執行這個腳本的時候,會把它作為一個注釋行。 當然,在這之前, 這行語句已經完成了它的任務,就是調用命令解釋器,如果腳本中還包含有其他的#!行, 那么bash將會把它看成是一個一般的注釋行。
注意:1)那些具有UNIX味道的腳本(基于4.2BSD)需要一個4字節的魔法數字,在#!后邊需要一個空格 -- #! /bin/sh.? 2) 你還可以試試在一個README 文件的開頭加上一個#!/bin/more ,并讓它具有執行權限。結果將是文檔自動列出自己的內容。 (一個使用cat命令的 here document在這里可能是一個更好的選擇。
幾乎每個shell腳本都是以#!開頭,接下來就講講關于#!的一些東西。1)編寫好的腳本需要一個解釋器,這就需要在腳本的開始利用#!指定你需要用到的解釋器。當然你也可以不指定,不過這樣的話,你的腳本就是一堆命令的集合。如果你的默認shell不是Bash,那許多Bash非常好的特性則不會起作用,更嚴重的是許多命令甚至變量都無法使用,比如Bash的內建命令:echo、read等等。如果不能使用變量的話,當然這也就失去了腳本編程的意義了。
2)#!是指定文件類型的特殊標記,在這種情況下也就是指這是一個腳本文件。在#!之后接著是一個路徑名,這個路徑名就是解釋腳本中命令的解釋程序所在的路徑,可能是一個shell, 也可能是一個程序語言, 也可能是一個工具包中的命令程序。這個解釋程序從頭開始解釋并且執行腳本中的命令(從sha-bang行下邊的一行開始),忽略注釋。
3)指定解釋器種類 #!/bin/sh #!/bin/bash #!/usr/bin/perl #!/usr/bin/tcl #!/bin/sed -f #!/usr/awk -f 上面的每一個腳本的開頭行都是一種解釋器,如果是/bin/sh, 那么就是默認shell (在Linux系統上默認就是 bash), 否則的話就是其他解釋器,如果你只使用默認的解釋器的話,這行也可以不寫。使用 #!/bin/sh, 因為大多數的商業UNIX系統上都是以Bourne shell作為默認shell,這樣可以使腳本移植到non-Linux的機器上,雖然這將會犧牲Bash一些獨特的特征,但是腳本將與POSIX 的sh標準相一致。
4)#!后面緊跟解釋器的路徑。給出的路徑名必須是正確的, 否則將會出現一個錯誤消息 -- 通常是"Command not found" -- 這將是你運行這個腳本時所得到的唯一結果。空白行也被認為是一行,所以不要讓你的腳本以空白行開始。
5)因為這行是以#作為行的開頭,當命令解釋器執行這個腳本的時候,會把它作為一個注釋行。 當然,在這之前, 這行語句已經完成了它的任務,就是調用命令解釋器,如果腳本中還包含有其他的#!行, 那么bash將會把它看成是一個一般的注釋行。
注意:1)那些具有UNIX味道的腳本(基于4.2BSD)需要一個4字節的魔法數字,在#!后邊需要一個空格 -- #! /bin/sh.? 2) 你還可以試試在一個README 文件的開頭加上一個#!/bin/more ,并讓它具有執行權限。結果將是文檔自動列出自己的內容。 (一個使用cat命令的 here document在這里可能是一個更好的選擇。
轉載于:https://blog.51cto.com/xuke1668/842471
總結
以上是生活随笔為你收集整理的#!(sha-bang)--脚本的开始的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个民工的数字化生活
- 下一篇: redhat linux加密卷