Bash shell簡單語法總結

2021-09-22 17:59:30 字數 4403 閱讀 3021

「#」開頭的正文行表示注釋行。

命令 < 檔名

here文件的重定向操作符使用<<。當前命令的標準輸入來自命令列。

一般形式為:命令》檔名。如果》符號後邊的檔案已存在,那麼這個檔案將被重寫。

追加重定向操作符》。形式為:命令》檔名。

錯誤輸出也可以重新定向。使用符號2>(或追加符號2>>)表示對錯誤輸出裝置重定向。

(&>)將標準輸出和錯誤輸出同時送到同一檔案中。

管道可以把一系列命令連線起來,這意味著第乙個命令的輸出會作為第二個命令的輸入通過管道傳給第二個命令,第二個命令的輸出又會作為第三個命令的輸入,以此類推。

通過使用管道符「|」來建立乙個管道行。

命令替換: 將乙個命令的輸出作為另外乙個命令的引數。command1 `command2`

連同標準錯誤輸出一起送入管道:command1| &command2[|& command3...]

只作為普通字元解釋

除$、、』、和」這幾個字元仍是特殊字元並保留其特殊功能外,其餘字元仍作為普通字元對待。

反引號括起來的字串被shell解釋為命令列,在執行時,shell首先執行該命令列,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。

賦值: 變數名=變數值(等號兩邊一定不能留空格)

引用: $變數名

為了使變數名和命令名相區別,建議所有的變數名都用大寫字母來表示。

常量定義:readly 常量名

此次登陸有效:export 變數名

位置引數是一種在呼叫shell程式的命令列中按照各自的位置決定的變數,是在程式名之後輸入的引數。位置引數之間用空格分隔,shell取第乙個位置引數替換程式檔案中的$1……

預定義變數: 只能使用變數,而不能重定義它。由$符和另乙個符號組成的。

變數=$:如果設定了引數,則用引數的值置換變數的值,否則用word置換。

變數=$:如果設定了引數,則用引數的值置換變數的值,否則把變數設定成word然後再用word替換引數的值。

變數=$:如果設定了引數,則用引數的值置換變數的值,否則就顯示word並從shell中退出,如果省略了word,則顯示標準資訊。

變數=$:如果設定了引數,則用word置換變數,否則不進行置換。

shell用於指定條件值的不是布林表示式而是命令和字串。

-eq:等於則為真

-ne:不等於則為真

-gt:大於則為真

-ge:大於等於則為真

-lt:小於則為真

-le:小於等於則為真

=:等於則為真

!=:不相等則為真

-z 字串:字串長度偽則為真

-n 字串:字串長度不偽則為真

-e 檔名:如果檔案存在則為真

-r 檔名:如果檔案存在且可讀則為真

-w 檔名:如果檔案存在且可寫則為真

-x 檔名:如果檔案存在且可執行則為真

-s 檔名:如果檔案存在且至少有乙個字元則為真

-d 檔名:如果檔案存在且為目錄則為真

-f 檔名:如果檔案存在且為普通檔案則為真

-c 檔名:如果檔案存在且為字元型特殊檔案則為真

-b 檔名:如果檔案存在且為塊特殊檔案則為真

linux還提供了與(「!」)、或(「-o)、非(「-a」)三個邏輯操作符用於將測試條件連線起來,其優先順序為:「!」最高,「-a」次之,「-o」最低。

格式如下:$[expression]

if 條件命令串

then

條件為真時的命令串

else

條件為假時的命令串

fifor 變數名 [in 數值列表]

do 若干個命令列

done

while

若干個命令列1

do 若干個命令列2

done

只要while的「若干個命令列1」中最後乙個命令的返回狀態為真,while迴圈就繼續執行do...done之間的「若干個命令列2」。

until

若干個命令列1

do 若干個命令列2

done

until迴圈和while迴圈的區別在於:while迴圈在條件為真時繼續執行迴圈,而until則是在條件為假時繼續執行迴圈。

case string in

exp-1)

若干個命令列1

;; exp-2)

若干個命令列2

;; ……

*) 其他命令列

esac

shell通過計算字串string的值,將其結果依次和表示式exp-1、exp-2等進行比較,直到找到乙個匹配的表示式為止,如果找到了匹配項則執行它下面的命令直到遇到一對分號(;;)為止。

在case表示式中也可以使用shell的萬用字元通常用「*」作為case命令的最後表示式以便使在前面找不到任何相應的匹配項時執行「其他命令列」的命令。

格式為:

functionname

呼叫函式的格式為:

functionname param1 param2 ……

shell函式可以有自己的退出狀態,在函式定義時不用帶引數說明,但在呼叫函式時可以帶有引數,此時shell將把這些引數分別賦予相應的位置引數$1、$2、...及$*。

在shell中有兩種命令分組的方法:「()」和「{}」,前者當shell執行()中的命令時將再建立乙個新的子程序,然後這個子程序去執行圓括弧中的命令。當使用者在執行某個命令時不想讓命令執行時對狀態集合(如位置引數、環境變數、當前工作目錄等)的改變影響到下面語句的執行時,就應該把這些命令放在圓括弧中,這樣就能保證所有的改變只對子程序產生影響,而父程序不受任何干擾;{}用於將順序執行的命令的輸出結果用於另乙個命令的輸入(管道方式)。

當我們要真正使用圓括弧和花括弧時(如計算表示式的優先順序),則需要在其前面加上轉義符(\)以便讓shell知道它們不是用於命令執行的控制所用。

按照shell程式設計的慣例,以bash為例,程式的第一行一般為「#!/bin/bash」,其中#表示該行是注釋,嘆號「!」告訴shell執行嘆號之後的命令並用檔案的其餘部分作為輸入,也就是執行/bin/bash並讓/bin/bash去執行shell程式的內容。

優點是可以利用shell除錯功能。

選擇:當剛建立乙個shell程式,對它的正確性還沒有把握時,應當使用第一種方式進行除錯。當乙個shell程式已經除錯好時,應使用第三種方式把它固定下來,以後只要鍵入相應的檔名即可,並可被另乙個程式所呼叫。

呼叫bash的形式是:

bash -選擇項 shell程式檔名

幾個常用的選擇項是:

-e:如果乙個命令失敗就立即退出(不存在或不可執行的命令、重定向失敗或命令非正常結束等情況時)

-n:讀入命令但是不執行它們

-u:置換時把未設定的變數看作出錯(引用了乙個未賦值的變數就終止shell程式的執行)

-v:當讀入shell輸入行時把它們顯示出來

-x:執行命令時把命令和它們的引數顯示出來

上面的所有選項也可以在shell程式內部用「set -選擇項」的形式引用,而「set +選擇項」則將禁止該選擇項起作用。如果只想對程式的某一部分使用某些選擇項時,則可以將該部分用上面兩個語句包圍起來。

使用echo命令把必要的資訊顯示出來

命令格式:echo arg

功能:在螢幕上列印出由arg指定的字串。

命令格式:eval args

功能:當shell程式執行到eval語句時,shell讀入引數args,並將它們組合成乙個新的命令,然後執行。

命令格式:exec 命令命令引數

功能:當shell執行到exec語句時,不會去建立新的子程序,而是轉去執行指定的命令,當指定的命令執行完時,該程序,也就是最初的shell就終止了,所以shell程式中exec後面的語句將不再被執行。

命令格式:export 變數名或:export 變數名=變數值

功能:shell可以用export把它的變數向下帶入子shell從而讓子程序繼承父程序中的環境變數。但子shell不能用export把它的變數向上帶入父shell。

注意:不帶任何變數名的export語句將顯示出當前所有的export變數。

命令格式:readonly 變數名

功能:將乙個使用者定義的shell變數標識為不可變的。不帶任何引數的readonly命令將顯示出所有唯讀的shell變數。

命令格式:

read變數名錶

功能:從標準輸入裝置讀入一行,分解成若干字,賦值給shell程式內部定義的變數。

功能:shift語句按如下方式重新命名所有的位置引數變數:$2成為$1,$3成為$2……在程式中每使用一次shift語句,都使所有的位置引數依次向左移動乙個位置,並使位置引數「$#」減一,直到減到0。

功能:是shell等待在後台啟動的所有子程序結束。wait的返回值總是真。

功能:退出shell程式。在exit之後可有選擇地指定乙個數字作為返回狀態。

命令格式:. shell程式檔名

功能:使shell讀入指定的shell程式檔案並依次執行檔案中的所有語句。

日語N2語法簡單總結

大致時空範圍 三月 下旬 四月 桜 花 咲 言 言 言 立場 角度 見 見 見 見 角度 從 可判斷出 今 成績 言 大學 無理 彼 態度 反省 思 食 彼女 食慾何 正因為 忠告 言 只根據 不能 得出體 大 言 強 言 既然以上 受験 合格 否定不 就不能 肯定 之後才 日本語 勉強 日本 留學...

韓語語法總結

注意 韓語的構詞方式不管是書寫還是發均是按照從左到右的原則例如 1 母音 2 母音 收音 3 子音 母音 4子音 母音 收音 常用語解釋 謂詞 可以作謂語的詞,在韓語中就是動詞和形容詞謂詞詞幹 即是謂詞中除掉的部分 體詞 可以作主語或賓語的詞,在韓語中就是名詞和代詞開音節 即是沒有收音的詞閉音節 有...

韓語語法總結

韓語topik常用語法 用於動詞末尾,表示某行動未完成而中斷。例子 1 是啊,沒有辦法,就幹著幹著撂下不管啦?2 下雨了,本想出去的,就算了。3 朋友們找來了,吉洙學習著就不幹了,跑了出去。4 剛才沒說完的話是什麼話?5 剛才沒吃完剩下的點心還有嗎?用於動詞末尾,表示某種主觀努力沒有達到預期結果。例...