A:Shell是一種用C語言編寫的程序,它是用戶與Linux操作系統溝通的橋梁。用戶既可以輸入命令執行,又可以利用 Shell腳本編程,完成更加復雜的操作。它是命令語言、命令解釋程序及程序設計語言的統稱。它的作用就是遵循一定的語法將輸入的命令加以解釋並傳給系統。
命令解釋程序:shell是一個命令語言解釋器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程序所調用。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。它由輸入設備讀取用戶輸入的命令,再將其轉為計算機可以了解的機械碼,然後執行它。
命令語言:它互動式地解釋和執行用戶輸入的命令。當普通用戶成功登錄,系統將執行一個稱為shell的程序。正是shell進程提供了命令行提示符。對普通用戶用“$”作提示符,對超級用戶(root)用“#”作提示符。 一旦出現了shell提示符,就可以鍵入命令名稱及命令所需要的參數。shell將執行這些命令。如果一條命令花費了很長的時間來運行,或者在屏幕上產生了大量的輸出,可以從鍵盤上按ctrl+c發出中斷信號來中斷它(在正常結束之前,中止它的執行)。 當用戶准備結束登錄對話進程時,可以鍵入logout命令、exit命令或文件結束符(EOF)(按ctrl+d實現),結束登錄。
程序設計語言(也就是shell腳本):shell的另一個重要特性是它自身就是一個解釋型的程序設計語言,shell程序設計語言支持絕大多數在高級語言中能見到的程序元素,如函數、變量、數組和程序控制結構。任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中。 作為程序設計語言,它定義了各種變量和參數,並提供了許多在高階語言中才具有的控制結構,包括循環和分支。它雖然不是 Linux系統內核的一部分,但它調用了系統內核的大部分功能來執行程序、創建文檔並以並行的方式協調各個程序的運行。簡單的說shell腳本就是一個包含若干行Shell或者Linux命令的文件。對於一次編寫,多次使用的大量命令,就可以使用單獨的文件保存下來。以便日後重復使用
第一個shell程序,此程序保存為mayuan.sh文件(通常shell腳本以.sh為後綴):
#! :這是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種Shell。如:#!/bin/sh,#!/bin/bash,#!/bin/csh,#!/bin/tcsh和,#!/bin/ksh等。
第二行以 # 開頭,代表是注釋行,會被解釋器忽略。除了第一行以外,其他行以 # 開頭都是注釋行;sh裡沒有多行注釋,只能每一行加一個#號。如果在開發過程中,遇到大段的代碼需要臨時注釋起來,過一會兒又取消注釋,怎麼辦呢?每一行加個#符號太費力了,可以把這一段要注釋的代碼用一對花括號括起來,定義成一個函數,沒有地方調用這個函數,這塊代碼就不會執行,達到了和注釋一樣的效果。
第三行定義了一個變量name,值為:mayaun 。注意變量名(name)和 = 間不能有空格,否則執行腳本時會提示command not found。
第四行echo:命令用於向窗口輸出文本。$(美元符號)表示變量替換,即用其後面指定的變量的值來代替變量。
執行shell腳本有兩種方法:
1、作為可執行程序
將代碼保存為mayuan.sh,並cd到相應目錄:
chmod +x ./mayuan.sh #使腳本具有執行權限
./mayuan.sh #執行腳本
注意,一定要寫成./mayuan.sh,而不是mayuan.sh,運行其它二進制的程序也一樣,直接寫mayuan.sh,linux系統會去PATH裡尋 找有沒有叫mayuan.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH裡,你的當前目錄通常不在PATH裡,所以寫成mayuan.sh是會找不到命令的,要用. /mayuan.sh告訴系統說,就在當前目錄找。如下圖所示:
2、作為解釋器參數
這種運行方式是,直接運行解釋器,其參數就是shell腳本的文件名,如:
/bin/bash mayuan.sh
這種方式運行的腳本,不需要在第一行指定解釋器信息,寫了也沒用。