初識shell
1、shell是什麼
我們經常使用的操作系統(Windows、Mac OS、Android、iOS 等)都是帶圖形界面的,簡單直觀。
然而在計算機的早期並沒有圖形界面,我們只能通過一個一個地命令來控制計算機,這些命令有成百上千之多,且不說記住這些命令非常困難,每天面對沒有任何色彩的“黑屏”本身就是一件枯燥的事情;這個時候的計算機還遠遠談不上炫酷和普及,只有專業人員才能使用。
對於圖形界面,用戶點擊某個圖標就能啓動某個程序;對於命令行,用戶輸入某個程序的名字(可以看做一個命令)就能啓動某個程序。這兩者的基本過程都是類似的,都需要查找程序在硬盤上的安裝位置,然後將它們加載到內存運行。也就是說,圖形界面和命令行要達到的目的是一樣的,都是讓用戶控制計算機。
然而,真正能夠控制計算機硬件(CPU、內存、顯示器等)的只有操作系統內核(Kernel),圖形界面和命令行只是架設在用戶和內核之間的一座橋樑。
由於安全、複雜、繁瑣等原因,用戶不能直接接觸內核(也沒有必要),需要另外再開發一個程序,讓用戶直接使用這個程序;該程序的作用就是接收用戶的操作(點擊圖標、輸入命令),並進行簡單的處理,然後再傳遞給內核。如此一來,用戶和內核之間就多了一層“代理”,這層“代理”既簡化了用戶的操作,也保護了內核。
用戶界面和命令行就是這個另外開發的程序,就是這層“代理”。在Linux下,這個命令行程序叫做 Shell。
2、shell的作用
Shell 除了能解釋用戶輸入的命令,將它傳遞給內核,還可以調用其他程序,給其他程序傳遞數據或參數,並獲取程序的處理結果;也可以在多個程序之間傳遞數據,把一個程序的輸出作爲另一個程序的輸入;Shell 本身也可以被其他程序調用。由此可見,Shell 是將內核、程序和用戶連接了起來。
Shell 本身支持的命令並不多,但是它可以調用其他的程序,每個程序就是一個命令,這使得 Shell 命令的數量可以無限擴展,其結果就是 Shell 的功能非常強大,完全能夠勝任Linux 的日常管理工作,如文本或字符串檢索、文件的查找或創建、大規模軟件的自動部署、更改系統設置、監控服務器性能、發送報警郵件、抓取網頁內容、壓縮文件等。
3、shell的簡單介紹
Shell 並不是簡單的堆砌命令,我們還可以在 Shell 中編程,這和使用 C/C++、Java、Python 等常見的編程語言並沒有什麼兩樣。
Shell 雖然沒有 C/C++、Java、Python 等強大,但也支持了基本的編程元素,例如:if...else 選擇結構,switch...case 開關語句,for、while、until 循環;可使用變量、數組、字符串、註釋、加減乘除、邏輯運算等概念;也可以使用函數,包括用戶自定義的函數和內置函數(例如 printf、export、eval 等)。
Shell 也是一種編程語言,它的編譯器(解釋器)是 Shell 這個程序。我們平時所說的 Shell,有時候是指連接用戶和內核的這個程序,有時候又是指 Shell 編程。
Shell 主要用來開發一些實用的、自動化的小工具,而不是用來開發具有複雜業務邏輯的中大型軟件,例如檢測計算機的硬件參數、一鍵搭建Web開發環境、日誌分析等,Shell 都非常合適。使用 Shell 的熟練程度反映了用戶對 Linux 的掌握程度,運維工程師、網絡管理員、程序員都應該學習 Shell。它使得我們能夠自動化地管理服務器集羣,否則你就得一個一個地登錄所有的服務器,對每一臺服務器都進行相同的設置,而這些服務器可能有成百上千之多,會浪費大量的時間在重複性的工作上。
Shell 是一種腳本語言,我們編寫完源碼後不用編譯,直接運行源碼即可。
3、常用的shell有哪些
Shell 既是一種腳本編程語言,也是一個連接內核和用戶的軟件。常見的 Shell 有 sh、bash、csh、tcsh、ash 等。
Shell 是一個程序,一般都是放在/bin或者/user/bin目錄下,當前 Linux 系統可用的 Shell 都記錄在/etc/shells文件中。/etc/shells是一個純文本文件,你可以在圖形界面下打開它,也可以使用 cat 命令查看它。
在現代的 Linux 上,sh 已經被 bash 代替,/bin/sh往往是指向/bin/bash的符號鏈接。
3.1、sh
sh 的全稱是 Bourne shell,由 AT&T 公司的 Steve Bourne開發,爲了紀念他,就用他的名字命名了。
sh 是 UNIX 上的標準 shell,很多 UNIX 版本都配有sh。sh也是第一個流行的 Shell。
3.2、csh
sh之後另一個廣爲流傳的 shell 是由柏克萊大學的 Bill Joy 設計的,這個 shell 的語法有點類似C語言,所以才得名爲C shell ,簡稱爲csh。
Bill Joy 是一個風雲人物,他創立了 BSD 操作系統,開發了vi編輯器,還是 Sun 公司的創始人之一。BSD 是 UNIX 的一個重要分支,後人在此基礎上發展出了很多現代的操作系統,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就連 Mac OS X 在很大程度上也基於BSD。
3.3、tcsh
tcsh 是 csh 的增強版,加入了命令補全功能,提供了更加強大的語法支持。
3.4、ash
一個簡單的輕量級的 Shell,佔用資源少,適合運行於低內存環境,但是與下面講到的 bash shell 完全兼容。
3.5、bash
bash shell 是 Linux 的默認 shell,後面的文章也基於bash編寫。bash 由 GNU 組織開發,保持了對sh shell 的兼容性,是各種 Linux 發行版默認配置的 shell。
bash 兼容 sh 意味着,針對 sh 編寫的 Shell 代碼可以不加修改地在bash 中運行。儘管如此,bash 和 sh 還是有一些不同之處:一方面,bash 擴展了一些命令和參數;另一方面,bash 並不完全和 sh 兼容,它們有些行爲並不一致,但在大多數企業運維的情況下區別不大,特殊場景可以使用 bash 代替 sh。