Linux的shell程式設計

2021-09-30 08:54:55 字數 4482 閱讀 1068

shell指令碼第一行必須以 #!/bin/sh 開頭。

對shell來講,所有變數的取值都是乙個字串,shell程式採用$var的形式來引用名為var的變數的值。

1.1.1、shell定義的環境變數

shell在開始執行的時候就已經定義了一些和系統的工作環境相關的變數,這些變數使用者還可以重新定義。

home

使用者儲存註冊目錄的完全路徑名。

path

用於儲存用冒號分隔的目錄路徑名,shell將按path變數中給出的順序搜尋這些目錄,找到的第乙個與命令名稱一致的可執行文件將被執行。

term

終端的型別。

uid當前使用者的識別字。

pwd當前工作目錄的絕對路徑,該變數的取值隨cd命令的使用而變化。

ps1主提示符,在root使用者下,預設的是#,在普通使用者下,預設是$。

ps2在shell接收使用者輸入的命令過程中,如果使用者在輸入行末尾輸入「/」然後回車,或者當使用者按回車鍵時shell判斷使用者輸入的命令沒有結束時,顯示這個輔助提示符,提示使用者繼續輸入命令的其餘部分,預設的輔助提示符是「>」。

1.1.2、使用者定義變數

變數名=變數值

1、在定義變數時,變數名前不應加$,在引用變數的內容時,則應該在變數名前加$。

2、在給變數賦值時,等號兩邊一定不能有空格,若變數本身就包含了空格,則整個字串都要用雙引號括起來。

定義常量        readly 變數名

定義公用變數  export 變數名

export命令可以將乙個區域性變數提供給shell執行的其它命令使用,在shell以後執行的所有命令或程式中都可以訪問到。

1.1.3、位置引數

在呼叫shell程式的命令列中按照各自的位置決定的變數。

$1、$2,依次類推

$0是乙個特殊變數,它是當前這個shell程式的檔名,所以$0不是乙個位置引數。在顯示當前所有位置引數時,不包括$0

1.1.4、預定義變數

預定義變數和環境變數類似,也是在shell一開始時就定義了變數。不同的是,使用者者能使用預定義變數,而不能重定義它。所有預定義變數都是由$符號和另乙個符號組成的。

$#位置引數的變數

$*所有位置引數的內容

$? 命令執行後返回的狀態(用於檢查上乙個命令是否執行正確,linux中,命令退出狀態0表示正確,任何非0表示命令出錯)

$$ 當前程序的程序號(最常見的用途是用作暫存檔案的名字以保證暫存檔案不會重名)

$! 後台執行的最後乙個程序號

$0當前執行的程序名

1.1.5、引數置換變數

變數=$

如果設定了引數,則引數的值替換變數值,否則,用word置換

變數=$

變數置換成word後,引數也替換成word。位置引數不能使用這種方式

變數=$

如果設定了引數,則用引數的值替換變數的值,否則顯示word並從shell中退出,如果省略了word,則顯示標準資訊(長用於出錯提示)

變數=$

如果設定了引數,則用word置換,否則不置換

1.2.1、測試命令

1.2.1.1、數值測試

-eq

等於為真

-ne不等於為真

-gt大於為真

-ge

大於等於為真

-lt 

小於為真

-le

小於等於為真

1.2.1.2、字串測試

=等於為真

!= 不等於為真

-z 字串

字串長度偽則為真

-n 字串

字串長度不偽則為真

1.2.1.3、檔案測試

-e 檔名

如果檔案存在為真

-r 檔名

如果檔案存在並且可讀為真

-w 檔名

如果檔案存在並且可寫為真

-x 檔名

如果檔案存在並且可執行為真

-s 檔名

如果檔案存在並且至少有乙個字元則為真

-d 檔名

如果檔案存在且為目錄則為真

-f 檔名

如果檔案存在且為普通檔案則為真

-c 檔名

如果檔案存在且為字元型特殊檔案則為真

-b 檔名

如果檔案存在且為塊特殊檔案則為真

1.2.1.4、與或非!非

-o或

-a與

! 最高  -a 其次  -o 最低

1.2.1.5、算數運算

var1=2

var2=$[var1*10+1]

var2的值為21

1.2.2、if條件語句

if 條件1; then

命令1elif 條件2; then

命令2else

命令3fi

1.2.3、for迴圈

for 變數名 [in 數值列表]

do若干命令列

done

for 變數名 in 檔案正規表示式

do若干命令列

done

for i in $*

do若干命令列

done

1.2.4、while迴圈

while 判斷真假

do若干命令列

done

為真時繼續執行

1.2.5、until迴圈

until 判斷真假

do若干命令列

done

為假時繼續執行

1.2.6、case條件選擇

case 變數 in

字串1)

命令列表1

字串2)

命令列表2

字串n)

命令列表n

其它命令列

esac

1.2.7、無條件控制語句

break

continue

1.2.8、函式定義

1.2.8.1、定義

funcitonname 」

當shell執行()中的命令時將再建立乙個新的子程序,這個子程序進去執行()中的命令。如果使用者在執行命令時不想讓命令執行時對狀態集合,如環境變數、當前工作目錄等的改變影響到下面語句的執行時,就應該把這些命令放到()中,這樣就可以保證所有改變只會對子程序產生影響,不會對父程序產生任何干擾。

{}用於將順序執行的命令的輸出結果用於另乙個命令的輸入。

注:當我們真正需要使用「()」和「{}」時,則需要在其前面加上轉義符號/,以便讓shell知道它們不是用於命令執行的控制所用。

1.2.10、訊號

trap命令???

sh shell程式檔名

用chmod命令使shell檔案具有可執行許可權

bash -引數 shell程式檔名

常用引數

-e如果乙個命令失敗就立即退出(shell預設情況下,若遇到不存在或不可執行的命令、重定向失敗或命令非正常結束,如果未重定向,則錯誤資訊會顯示在螢幕上,而shell程式仍將繼續執行)

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

-u使用未賦值變數時退出程式並顯示錯誤資訊(shell預設設定允許使用未賦值的變數)

-vshell在執行程式過程中,把它讀入的每乙個命令列都顯示出來

-xshell在執行程式過程中,把它執行的每乙個命令在行首用乙個+加上命令名顯示出來,並且把每乙個變數和該變數的值也顯示出來

上面的選項也可以在shell程式內部用「set -常用引數」的形式引用,而「set +常用引數」則將禁止該選擇項起作用。

echo -n(不換行) arg

在螢幕上列印出arg指定的字串

eval args

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

exec 命令 命令引數

當shell程式執行到exec語句時,不會去建立新的子程式,而是轉去指定命令,當指定命令執行完畢,該程序終止,exec後面的語句將不再執行

export 變數名

export 變數名=值

shell可以用export把它的變數向下帶入子shell程式而讓子程序繼承父程序中的環境變數,但shell不能用此命令把它的變數帶入父shell

注:不帶任何變數的export則將顯示出當前所有的export變數

readonly 變數名

定義常量,不帶變數的readonly則顯示出所有常量

read -p(提示語句) -n(字元個數) -t(等待時間) -s(不回顯) 變數名錶

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

shift

shift 跳轉數字

使用此命令將位置引數向左移動乙個位置,並使位置引數$#減一,直到減到0

wait

shell等待後台啟動的所有子程序結束,wait的返回值總是真

exit

退出shell程式,在exit後可選擇乙個數作為返回狀態。如 exit 0

. shell程式檔名

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

Linux的Shell程式設計 Shell基本語法

像高階程式語言一樣,shell也提供說明和使用變數的功能。對shell來講,所有變數的取值都是乙個字串,shell程式採用 var的形式來引用名為var的變數的值。shell基本語法 像高階程式語言一樣,shell也提供說明和使用變數的功能。對shell來講,所有變數的取值都是乙個字串,shell程...

shell程式設計 linux

shell 指令碼程式的編寫步驟如下 1 用編輯器 如 vi 編輯包含所有操作的 sh檔案 2 修改檔案的許可權為可讀可執行 3 執行當前 shell 程式 注意 1 指令碼檔案中 注釋行有 開始 2 指令碼一般第一行為 bin sh 可以在執行別的型別的指令碼的時候直接執行這種型別的指令碼 3 執...

shell程式設計(Linux)

c語言 編譯型,main.c main.exe,執行效率高,開發效率低。shell程式設計 解釋型main.sh通過需要通過乙個直譯器,解釋執行main.sh執行效率高開發效率低。python 解釋型語言。指令碼其實是傳給直譯器的引數,指令碼主要用在系統維護上。shell的基本語法 1.變數 1 本...