shell 初步之執行方式

2021-08-28 20:07:54 字數 3309 閱讀 3904

shell的作用是解釋執行使用者的命令,使用者輸入一條命令,shell就解釋執行一條,這種方式稱為互動式(interactive),shell還有一種執行命令的方式稱為批處理(batch,類似與windows 下的批處理.bat 檔案),使用者事先寫乙個shell指令碼(script),其中有很多條命令,讓shell一次把這些命令執行完,而不必一條一條地敲命令。shell指令碼和程式語言很相似,也有變數和流程控制語句,但shell指令碼是解釋執行的,不需要編譯,shell程式從指令碼中一行一行讀取並執行這些命令,相當於乙個使用者把指令碼中的命令一行一行敲到shell提示符下執行。

常見的 shell 有 sh、bash、csh、tcsh、ash 等。

shell 是乙個程式,一般都是放在/bin 或者/user/bin目錄下,當前linux 系統可用的shell 都記錄在/etc/shells檔案中。如果你希望檢視當前 linux 的預設 shell,那麼可以輸出 shell 環境變數:

echo $shell

vim /etc/passwd

其中最後一列顯示了使用者對應的shell型別

使用者在命令列輸入命令後,一般情況下shell會fork並exec該命令,但是shell的內建命令例外,執行內建命令相當於呼叫shell程序中的乙個函式,並不建立新的程序。以c常用的cd、alias、umask、exit等命令即是內建命令,凡是用which命令查不到程式檔案所在位置的命令都是內建命令,內建命令沒有單獨的man手冊,要在man手冊中檢視內建命令,應該執行

man bash-builtins
或者

man builtins
shell 執行方式

當 shell 指令碼以非互動的方式執行時,它會先查詢環境變數env,該變數指定了乙個環境檔案(通常是. bashrc),然後從該環境變數檔案開始執行,當讀取了env檔案後,shell才開始執行 shell 指令碼中的內容。 shell指令碼的執行通常可以採用以下三種方式:

bash script-name或 sh script-name(推薦使用)

path/ script-name或 ./script-name(當前路徑下執行指令碼)

source script-name或. script-name#一注意「.」點號和script-name 之間有空格。

執行說明:

第二種方法需要先將指令碼檔案的許可權改為可執行(即檔案加x位),具體方法: chmod u+x script-name或 chmod755 script-name,然後通過指令碼路徑就可以直接執行指令碼了。

第三種方法通常是使用source 或者 "."號讀入或載入指定的shell 指令碼檔案(son.sh),然後,依次執行該指定shell 指令碼檔案son.sh 中的所有的語句。這些語句將作為當前父shell 指令碼father.sh 程序的一部分執行。因此,使用source 或者"." 號可以將子shell(son.sh) 自身指令碼中的變數的值或者函式等的返回值傳遞到當前父shell 指令碼(father.sh) 中使用。這是第三種方法和前兩種方法的最大區別,在linux 中很多配置檔案修改後就是直接source  執行的。

source 或者 "." 點號命令的功能是在當前shell 中執行source 或者"." 點號載入並執行的相關指令碼檔案中的命令及語句,而不是產生乙個子shell 來執行命令檔案中的命令。

由上面執行結果可以看出,. 或 source 方式執行指令碼與前面兩種執行方式的不同點--以這種方式執行的指令碼中宣告的變數, 都可以在當前shell 中得以繼續使用,使用.(點號)方式的時候一定要注意,點號和執行指令碼之間的空格。

shell執行方式備忘

sh是用預設的shell執行的,而直接執行是用bash執行的。ls l which sh lrwxrwxrwx 1 root root 4 3月 30 2012 bin sh dash bash shell 指令碼的方法有多種,現在作個小結。假設我們編寫好的shell指令碼的檔名為hello.sh,...

shell的執行方式

首先我們了解最基礎的,輸出hello world!1.echo 輸出命令 root linux study echo 選項 輸出內容 選項 e 支援反斜線控制的字元轉換 root linux study echo hello word bash event not found 在shell中有特殊作...

shell指令碼執行方式

echo輸出命令 echo 選項 輸出內容 選項 e 支援反斜線控制的字元轉換 shell指令碼 指令碼都以.sh結束,指令碼第一行 bin bash 以hello.sh簡單指令碼為例 指令碼執行有兩種方法 這裡出現了no such file or directory 原因是格式不匹配,解決方案 d...