官术网_书友最值得收藏!

Shell是Linux操作系統指令集的概稱,是屬于操作系統層面的、基于指令集的人機交互界面的腳本級程序運行環境。

Shell是一種操作系統的應用級腳本。Shell腳本提供了一個人機交互界面,用戶通過該界面訪問可操作系統內核的服務。

1.初識Shell腳本

計算機只能理解由0和1組成的二進制語言。

早期計算機通過二進制語言來執行指令。二進制語言對人類來說難以理解,讀、寫都很不友好。后來,操作系統里提供了一種叫作Shell的特殊程序,Shell接收英文格式(大多數情況下是英文)指令,如果指令有效,就會被傳遞給內核,并執行一系列操作。

Shell是用戶和Linux內核溝通的“橋梁”,用戶的大部分工作是通過Shell完成的。Shell既是一種指令語言,又是一種腳本設計語言。作為指令語言,它交互式地解釋和執行用戶輸入的指令;作為腳本設計語言,它定義了各種變量和參數,并提供了許多在高級語言中才具有的控制結構,包括循環和分支。

Shell腳本不是Linux內核的一部分,但它調用了系統核心的大部分功能來執行腳本、建立文件,并以并行的方式協調各個腳本的運行。因此,對用戶來說,Shell腳本是重要的實用腳本,深入了解和熟練掌握Shell腳本的特性及其使用方法,是用好Linux的關鍵。實際上,Shell可被看作一個提供給用戶用來交互的軟件,它可以通過標準輸入設備(通常是鍵盤)或者文件讀取指令,并且解釋執行用戶的指令。

用戶與Shell交互的過程如圖1-1所示。

圖1-1 用戶與Shell交互的過程

Shell通過系統調用來執行腳本,如創建文件等。Linux中包含各種不同版本的Shell,查看當前操作系統支持哪些Shell類型,代碼如下。

[root@laohan_httpd_server ~]# cat /etc/Shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/bash

查看當前操作系統默認使用的Shell類型,代碼如下。

1 [root@laohan_httpd_server ~]# echo $SHELL
2 /bin/bash
3 [root@laohan_httpd_server ~]#

從上述代碼第2行中可以看到,當前操作系統默認使用的Shell類型是Bash程序。

2.Shell腳本執行方式

Shell腳本有如下兩種執行方式。

(1)交互式(Interactive)。Shell解釋器執行用戶輸入的指令,用戶輸入一條指令,Shell解釋器執行一條。

[root@laohan-Shell-1 ~]# date
2019年12月 06日星期五 15:27:39 CST
[root@laohan-Shell-1 ~]# whoami
root
[root@laohan-Shell-1 ~]# echo "我的名字是老韓" 
我的名字是老韓

上述代碼中,用戶輸入的指令會逐條執行,結果會輸出到當前終端(顯示器)。

(2)批處理。用戶可事先寫一個Shell腳本(Script)文件,腳本文件中有很多條指令,Shell解釋器可以一次性把這些指令執行完畢,并將指令運行狀態返回給用戶。

1 [root@laohan-Shell-1 chapter-1]# cat multi-command.sh
2 uname -n
3 current_date=$(date +%F-%T)
4 echo $current_date
5 whoami
6 echo
7 echo "我的名字是老韓"
8 echo $?

上述代碼第2~8行會依次執行,輸出結果如下。

[root@laohan-Shell-1 chapter-1]# bash multi-command.sh
laohan-Shell-1
2019-12-06-15:29:43
root

我的名字是老韓
0

3.Shell腳本的局限性

Shell只定義了一種非常簡單的編程語言,如果腳本復雜度較大,或者要操作的數據結構比較復雜,建議使用Python等其他編程語言解決對應的問題。

建議根據不同的使用場景有選擇性地使用不同的編程語言。因為Shell在處理復雜的業務邏輯(如前后端數據交互)方面的能力很弱,此時建議使用Python腳本進行處理,Shell腳本的局限性如下。

Shell腳本中函數只能返回字符串,無法返回數組。

Shell腳本不支持面向對象,無法實現一些優雅的設計模式。

Shell腳本是解釋型語言,邊解釋邊執行。如果腳本包含錯誤(如調用了不存在的函數),只要沒調用函數代碼庫,系統就不會報錯。

主站蜘蛛池模板: 马关县| 桂平市| 天峨县| 嘉善县| 简阳市| 庆城县| 观塘区| 鄂尔多斯市| 安仁县| 上高县| 邵东县| 桐城市| 上虞市| 乌兰县| 错那县| 郁南县| 亳州市| 辽中县| 怀仁县| 绥德县| 临沂市| 浮山县| 瑞丽市| 长沙县| 调兵山市| 横山县| 长寿区| 凉城县| 五华县| 宽甸| 孝感市| 高陵县| 绥中县| 南平市| 泾源县| 澳门| 灵山县| 望奎县| 广平县| 樟树市| 济源市|