Unix/Linux - 什麼是Shell?



Shell 提供了與 Unix 系統互動的介面。它收集你的輸入並根據該輸入執行程式。程式執行完畢後,它會顯示該程式的輸出。

Shell 是一個執行命令、程式和 shell 指令碼的環境。Shell 的種類很多,就像作業系統一樣。每種 Shell 都有自己的一套可識別的命令和函式。

Shell 提示符

Shell 發出的提示符 $ 稱為命令提示符。顯示提示符時,您可以鍵入命令。

按下Enter鍵後,Shell 讀取您的輸入。它透過檢視輸入的第一個單詞來確定要執行的命令。單詞是一組連續的字元。空格和製表符分隔單詞。

下面是一個簡單的date命令示例,它顯示當前日期和時間:

$date
Thu Jun 25 08:30:19 MST 2009

您可以使用環境變數 PS1(在環境教程中解釋)自定義您的命令提示符。

Shell 型別

在 Unix 中,主要有兩種型別的 Shell:

  • Bourne shell - 如果你使用的是 Bourne 型 Shell,則$字元是預設提示符。

  • C shell - 如果你使用的是 C 型 Shell,則 % 字元是預設提示符。

Bourne Shell 有以下子類別:

  • Bourne shell (sh)
  • Korn shell (ksh)
  • Bourne Again shell (bash)
  • POSIX shell (sh)

不同的 C 型 Shell 包括:

  • C shell (csh)
  • TENEX/TOPS C shell (tcsh)

最初的 Unix Shell 是 20 世紀 70 年代中期由 Stephen R. Bourne 在新澤西州的 AT&T Bell Labs 編寫的。

Bourne shell 是第一個出現在 Unix 系統上的 shell,因此被稱為“the shell”。

Bourne shell 通常安裝在大多數 Unix 版本的/bin/sh目錄下。因此,它是編寫可在不同 Unix 版本上使用的指令碼的首選 shell。

本章將介紹大部分基於 Bourne Shell 的 Shell 概念。

Shell 指令碼

Shell 指令碼的基本概念是一個命令列表,這些命令按執行順序排列。一個好的 shell 指令碼將包含註釋(以#符號開頭),描述各個步驟。

它包含條件測試(例如,值 A 大於值 B)、迴圈(允許我們處理大量資料)、用於讀取和儲存資料的檔案以及變數,並且指令碼可能包含函式。

我們將在接下來的部分編寫許多指令碼。它將是一個簡單的文字檔案,我們將在其中放置所有命令以及其他一些必要的結構,這些結構告訴 shell 環境做什麼以及何時做。

Shell 指令碼和函式都是解釋執行的。這意味著它們不會被編譯。

示例指令碼

假設我們建立一個test.sh指令碼。請注意,所有指令碼都將具有.sh副檔名。在向指令碼新增任何其他內容之前,您需要提醒系統正在啟動一個 shell 指令碼。這是使用shebang結構完成的。例如:

#!/bin/sh

這告訴系統以下命令將由 Bourne shell 執行。它被稱為 shebang,因為#符號稱為雜湊,而!符號稱為感嘆號

要建立一個包含這些命令的指令碼,請先放置 shebang 行,然後新增命令:

#!/bin/bash
pwd
ls

Shell 註釋

您可以如下在指令碼中添加註釋:

#!/bin/bash

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls

儲存上述內容並使指令碼可執行:

$chmod +x test.sh

現在 shell 指令碼可以執行了:

$./test.sh

執行後,您將收到以下結果:

/home/amrood
index.htm  unix-basic_utilities.htm  unix-directories.htm  
test.sh    unix-communication.htm    unix-environment.htm

注意 - 要執行當前目錄中可用的程式,請使用./program_name

擴充套件的 Shell 指令碼

Shell 指令碼有一些必要的結構,用來告訴 shell 環境做什麼以及何時做。當然,大多數指令碼都比上面的要複雜。

畢竟,shell 是一種真正的程式語言,包含變數、控制結構等等。無論指令碼多麼複雜,它仍然只是一系列按順序執行的命令。

以下指令碼使用read命令,該命令從鍵盤獲取輸入並將其賦值給變數 PERSON,最後將其列印到 STDOUT。

#!/bin/sh

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:

echo "What is your name?"
read PERSON
echo "Hello, $PERSON"

以下是指令碼的示例執行:

$./test.sh
What is your name?
Zara Ali
Hello, Zara Ali
$
廣告