天天看點

Linux Shell之一 Shell簡介

   玩Linux不知道Shell,那就是不懂Linux。這句話足以見證shell在Linux運維中的地位。一直想好好寫下shell,但總是不知道如何寫起,不是因為Shell太難,而是因為她太龐大,也可能是因為自己shell能力上的不足,怕不能體系化地了解Shell,但是要開始的終究還是要開始,Come On!

什麼是Shell

     Shell是作業系統的最外層,Shell可以合并程式設計語言以控制程序和檔案,以及啟動和控制其它程式。shell 通過提示您輸入,向作業系統解釋該輸入,然後處理來自作業系統的任何結果輸出來管理您與作業系統之間的互動。

    Shell是一個使用者跟作業系統之間的一個指令解釋器。Shell是使用者與Linux作業系統之間溝通的橋梁。使用者可以輸入指令執行,又可以利用 Shell腳本程式設計去運作。

    Shell本身是一個用C語言編寫的程式,它是使用者使用Unix/Linux的橋梁,使用者的大部分工作都是通過Shell完成的。

    Shell既是一種指令語言,又是一種程式設計語言。作為指令語言,它互動式地解釋和執行使用者輸入的指令;作為程式設計語言,它定義了各種變量和參數,并提供了許多在進階語言中才具有的控制結構,包括循環和分支。    

Shell與編譯型語言的差異

編譯型語言

    很多傳統的程式設計語言,例如Fortran、Ada、Pascal、C、C++和Java,都是編譯型語言。這類語言需要預先将我們寫好的源代碼(source code)轉換成目标代碼(object code),這個過程被稱作“編譯”。運作程式時,直接讀取目标代碼(object code)。由于編譯後的目标代碼(object code)非常接近計算機底層,是以執行效率很高,這是編譯型語言的優點。但是,由于編譯型語言多半運作于底層,所處理的是位元組、整數、浮點數或是其他機器層級的對象,往往實作一個簡單的功能需要大量複雜的代碼。例如,在C++裡,就很難進行“将一個目錄裡所有的檔案複制到另一個目錄中”之類的簡單操作。 

解釋型語言

    解釋型語言也被稱作“腳本語言”。執行這類程式時,解釋器(interpreter)需要讀取我們編寫的源代碼(source code),并将其轉換成目标代碼(object code),再由計算機運作。因為每次執行程式都多了編譯的過程,是以效率有所下降。

腳本程式設計語言的好處

    使用腳本程式設計語言的好處是,它們多半運作在比編譯型語言還高的層級,能夠輕易處理檔案與目錄之類的對象;缺點是它們的效率通常不如編譯型語言。不過權衡之下,通常使用腳本程式設計還是值得的:花一個小時寫成的簡單腳本,同樣的功能用C或C++來編寫實作,可能需要兩天,而且一般來說,腳本執行的速度已經夠快了,快到足以讓人忽略它性能上的問題。腳本程式設計語言的例子有awk、Perl、Python、Ruby與Shell。

Shell有兩種執行指令的方式:

    互動式(Interactive):解釋執行使用者的指令,使用者輸入一條指令,Shell就解釋執行一條。

    批處理(Batch):使用者事先寫一個Shell腳本(Script),其中有很多條指令,讓Shell一次把這些指令執行完,而不必一條一條地敲指令。

Linux Shell種類:

    常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的Shell語言的文法有所不同,是以不能交換使用。

最常用的shell是Bash,也就是Bourne Again Shell,由于易用和免費,Bash在日常工作中被廣泛使用,也是大多數Linux系統預設的Shell。接下來我們來寫一個簡單的shell腳本。(shell腳本一般檔案名以.sh結尾{非必須,但是很有必要},同時檔案第一行定義該腳本為shell腳本)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<code>[root@shell ~]</code><code># vim first.sh</code>

<code>[root@shell ~]</code><code># cat first.sh </code>

<code>#!/bin/bash</code>

<code>#DATE 2015.04.28</code>

<code>#Author jacken</code>

<code>#USE:  This is my first shell</code>

<code>echo</code> <code>"Hello World!"</code>

<code>[root@shell ~]</code><code># bash first.sh </code>

<code>Hello World!</code>

<code>[root@shell ~]</code><code># ./first.sh</code>

<code>-</code><code>bash</code><code>: .</code><code>/first</code><code>.sh: Permission denied</code>

<code>[root@shell ~]</code><code># chmod +x first.sh </code>

<code>[root@shell ~]</code><code>#</code>

注釋:

想很很多人學Shell都是從“世界,你好!”開始的,Me too!

Shell是用來執行的,是以要有執行(x)的權限,或者直接 bash first.sh 告訴系統,這就是一個腳本(無需執行權限)

第一行的#!/bin/bash是指定這個腳本要用哪種語言來解釋,除了第一行當"#"辨別出哪種語言外,剩餘的全部“#”後的都是注釋、說明。

Linux Shell之一 Shell簡介

本文轉自Jacken_yang 51CTO部落格,原文連結:http://blog.51cto.com/linuxnote/1639640,如需轉載請自行聯系原作者