shell基礎知識

2021-07-04 17:19:50 字數 2063 閱讀 3975

shell    echo

python   print

php      echo print()

unix/linux上常見的shell指令碼直譯器有bash、sh、csh、ksh等,習慣上把它們稱作一種shell。我們常說有多少種shell,其實說的是shell指令碼直譯器。

bash

bash是linux標準預設的shell,本教程也基於bash講解。bash由brian fox和chet ramey共同完成,是bourneagain shell的縮寫,內部命令一共有40個。

linux使用它作為預設的shell是因為它有諸如以下的特色:

可以使用類似dos下面的doskey的功能,用方向鍵查閱和快速輸入並修改命令。

自動通過查詢匹配的方式給出以某字串開頭的命令。

包含了自身的幫助功能,你只要在提示符下面鍵入help就可以得到相關的幫助。

sh

sh 由steve bourne開發,是bourne shell的縮寫,sh 是unix 標準預設的shell。

ash

ash shell 是由kenneth almquist編寫的,linux中占用系統資源最少的乙個小shell,它只包含24個內部命令,因而使用起來很不方便。

cshcsh 是linux比較大的核心,它由以william joy為代表的共計47位作者編成,共有52個內部命令。該shell其實是指向/bin/tcsh這樣的乙個shell,也就是說,

csh其實就是tcsh。

kshksh 是korn shell的縮寫,由eric gisin編寫,共有42條內部命令。該shell最大的優點是幾乎和商業發行版的ksh完全相容,這樣就可以在不用花錢購買商業

版本的情況下嘗試商業版本的效能了。

「#!」 是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種shell

注意,一定要寫成./test.sh,而不是test.sh。執行其它二進位制的程式也一樣,直接寫test.sh,linux系統會去path裡尋找有沒有叫test.sh的,而只有/bin,

/sbin, /usr/bin,/usr/sbin等在path裡,你的當前目錄通常不在path裡,所以寫成test.sh是會找不到命令的,要用./test.sh告訴系統說,就在當前目錄找

執行shell指令碼有兩種方法。

作為可執行程式

將上面的**儲存為test.sh,並 cd 到相應目錄:

chmod +x ./test.sh  #使指令碼具有執行許可權

./test.sh  #執行指令碼

注意,一定要寫成./test.sh,而不是test.sh。執行其它二進位制的程式也一樣,直接寫test.sh,linux系統會去path裡尋找有沒有叫test.sh的,而只有/bin,

/sbin, /usr/bin,/usr/sbin等在path裡,你的當前目錄通常不在path裡,所以寫成test.sh是會找不到命令的,要用./test.sh告訴系統說,就在當前目錄找

。通過這種方式執行bash指令碼,第一行一定要寫對,好讓系統查詢到正確的直譯器。

這裡的"系統",其實就是shell這個應用程式(想象一下windows explorer),但我故意寫成系統,是方便理解,既然這個系統就是指shell,那麼乙個使

用/bin/sh作為直譯器的指令碼是可以省去第一行

作為直譯器引數

這種執行方式是,直接執行直譯器,其引數就是shell指令碼的檔名,如:

/bin/sh test.sh

/bin/php test.php

這種方式執行的指令碼,不需要在第一行指定直譯器資訊,寫了也沒用。

SHELL 基礎知識

1 什麼是shell?shell的本意是 殼 的意思,其實已經很形象地說明了shell在linux系統中的作用。shell就是圍繞在linux核心之外的乙個 殼 程式,使用者在作業系統上完成的所有任務都是通過shell與linux系 統核心的互動來實現的。shell本身是乙個c語言編寫的程式,是使用...

shell 基礎知識

預設變數 傳入指令碼的命令列引數個數 所有命令列引數值,在各個引數值之間留有空格 0 命令本身 shell檔名 1 第乙個命令列引數 2 第二個命令列引數 區域性變數 在變數首次被賦值時加上local 關鍵字可以宣告乙個區域性變數,例s3 bin bash hello var1 echo hello...

shell 基礎知識

預設變數 傳入指令碼的命令列引數個數 所有命令列引數值,在各個引數值之間留有空格 0 命令本身 shell檔名 1 第乙個命令列引數 2 第二個命令列引數 區域性變數 在變數首次被賦值時加上local 關鍵字可以宣告乙個區域性變數,例s3 bin bash hello var1 echo hello...