鍍金池/ 教程/ Linux/ shell 學習第二天
shell 學習四十五天---xargs
shell學習第三天
shell 學習十五天---join 連接字段
shell 學習第二天
shell 學習四十三天---臨時性文件的建立與使用
shell 學習第六天---小結
shell 學習三十三天---關于重定向
shell 學習二十九天---循環(huán)
shell 學習二十四天---提取開頭或結尾數行
shell 學習第十天---sed 查找與替換
shell 學習第十一天---sed 正則的精確控制
shell 學習三十天---break,continue,shift,getopts
shell 學習---小結
shell 學習三十一天---函數問題
shell 學習第四天---華麗的 printf 輸出
shell 學習三十五天---波浪號展開與通配符
shell 學習十九天---文本塊排序
shell 學習十二天---行與字符串
shell 學習二十一天---重新格式化段落
shell 學習十八天---文本排序
shell 學習十三天---sed 案例分析
shell 學習四十一天---列出文件 ls 和 od 命令
shell 學習十七天---awk 命令
shell 學習三十六天---命令替換
shell 學習十六天---join 練習
shell 學習三十二天---read 讀取一行
shell 學習二十二天---計算行數,字數以及字符數
shell 學習小總結---本章小結
shell 學習第八天---擴展正則表達式(ERE)
shell 學習四十二天---使用 touch 更新文件時間
shell 學習二十八天---case 語句
shell 學習三十九天---內建命令
shell 學習第一天
shell 學習三十四天---printf 詳解
shell 學習二十六天---變量與算數
shell 學習三十八天---執(zhí)行順序和 eval
shell 學習四十四天---尋找文件
shell 學習二十五天---神器的管道符
shell 學習十四天---使用 cut 選定字段
shell 學習第五天---基本的I/O重定向
shell 學習四十天---awk 的驚人表現
shell 學習二十天---sort 的其他內容以及 uniq 命令
shell 學習二十三天---打印
shell 學習第九天---分組
shell 學習四十八天---文件校驗和匹配
shell 學習二十七天---退出狀態(tài)和 if 語句
shell 學習四十七天---文件比較 cmp,diff,patch
shell 學習第七天---基礎正則表達式(BRE)
shell 學習四十六天---文件系統(tǒng)的空間信息 df 和 du 命令
shell 學習三十七天---引用
shell 學習小結

shell 學習第二天

腳本位于第一行的#!
當 shell 執(zhí)行一個程序時,會要求 linux 內核啟動一個新的進程,以便在該進程里執(zhí)行所指定的程序。內核知道如何為編譯性程序做這件事。但是我們的 nusers Shell 腳本并非編譯性程序;當 shell 要求內核執(zhí)行它的時候,內核無法處理,并且回應“not executable format file”,接著會啟動一個新的/bin/sh(標準 shell)副本來執(zhí)行該程序。

當系統(tǒng)只有一個 shell 是,“退回到/bin/sh”的機制很方便。但是現在的 linux 都擁有好幾個 shell,因此需要通過一宗方式,告知 linux 內核用哪個 shell 來執(zhí)行所指定的 shell 及哦啊本。
linux 有多個 shell 帶來的好處是有助于執(zhí)行機制通用化,讓用戶得以直接引用任何程序語言解釋器,而非只是一個命令 shell。
例如:文件開頭存在#! /bin/csh 則說明執(zhí)行的是 csh 腳本,相同的,例如我們可以這樣引用獨立的 awk 程序:
#! /bin/awk -f
此處是 awk 程序
shell 腳本的第一行通常是#! /bin/sh。如果不這樣是不符合標準的,自覺修改這個路徑,將其改為符合 POSIX 標準的 shell。

以下是幾個初級的陷阱:

  1. #!這一行的長度盡量不要超過 64 個字符。
  2. 腳本的可移植性取決于是否有完整的路徑名稱。
  3. 不要在選項之后放置任何空白,因為空白也會跟著選項一起傳遞給被引用的程序。
  4. 需要知道解釋器的完成路徑的名稱。這樣可以規(guī)避可移植性的問題,廠商不同,同樣的東西可能放在不同的地方。
  5. 一些較久的系統(tǒng),內核不具備#!的能力,有些 shell 會自行處理,這些 shell 對于#!與緊隨其后的解釋器名稱之間是否可以有空白,可能有不同的解釋。

查看當前發(fā)行版本可以使用的shell:cat /etc/shells
查看系統(tǒng)默認的shell:echo $SHELL:一般情況下是輸出/bin/bash。

如果想切換 shell 的版本,只需要直接輸入 shell 的版本。例如想使用 csh,直接輸入 csh 即可,使用 exit 退出當前 shell 回到原 shell。