何為Shell腳本:
(1)為實現某個任務,將許多命令組合后,寫入一個可執行的文本文件的方法,稱為Shell腳本編程。
(2)Shell 腳本其實就是文本文件,建立新的腳本文件時,可以使用Vi、Emacs等文本編輯器。
(3)Shell腳本通常不需要特殊處理,對腳本文件加上可執行權限,就可以像應用程序一樣執行;
(4)Shell腳本分許多類型,最常見的是應用於Bash和Tcsh的腳本。通常Bash腳本文件名以sh結尾,Tcsh腳本文件以csh結尾
通俗地講,shell腳本就是寫有一堆系統命令+簡單的shell語法(變量、if判斷、循環語句等)的一個文件,執行這文件能把所有命令一次性都執行了並實現一定的目的。
Shell第一行:
- 它不是注釋,"#!/bin/sh"是對shell的聲明,說明你所用的是那種類型的shell及其路徑所在;
-
告訴操作系統, 此腳本的解釋器為 /bin/sh 這個可執行文件
類似地, 如果你的腳本用 bash, ksh, 解釋, 第一行就應該是
#!/bin/bash
#!/bin/ksh
之類的
或者, 你自己定義一種腳本語言, 再自己寫個解釋器去執行它, 比如說叫 xshell, 放在 /usr/local/bin 下, 你的腳本第一行就應該是
#!/usr/local/bin/xshell
如果沒有這樣定義的第一行, 不同 unix 類操作系統會用默認 shell 來解釋腳本, 如 unix 往往是 sh, linux 往往是用 bash, .... - 當Shell執行一個程序時,會要求內核啟動一個新的進程(process),以便在該進程里執行所指定的程序。內核知道如何為編譯型程序做這件事。比如sh.sh文件可以執行,但是不是編譯程序。
當Shell要求內核執行它時,內核無法完成這一要求,並回應“不是可執行的格式文件”提示信息。Shell收到此錯誤信息的時候,會判斷不是編譯程序,那么一定是Shell腳本,因此會執行一個新的Shell副本來執行該程序,這也就是Shell執行的過程。
在unix中為/bin/sh 在linux一般為/bin/bash 這個你懂的!!!
然而,一般的unix/linux系統一般都不止一個shell 比如ksh、csh、bash(學習中).....如果在系統中提供一種方式來解釋Shell執行,那不是很棒?因此,在一般的Shell腳本中會添加第一行為#!/bin/*sh的字符 比如:csh的腳本 #!/bin/csh -f 意思就是這是一個csh
在書中講到了#!這一行的長度是有限制的 從63到1024個字符都有,進來不要超過 64個。
腳本是否具有可移植性,取決於是否具有完整的路徑名稱。
另外,在選項之后盡量不要放置任何的空白,因為空白也會跟着選項一起傳遞給引用程序。
Shell編寫者應該清楚解釋器的完整路徑名稱。因為不同的系統會放在不同的位置。(例如/bin/awk和/usr/bin/awk)。