linux開發 一 shell程式設計要點

2021-07-27 06:36:56 字數 3483 閱讀 6976

linux開發(一) shell簡單程式設計

1、變數賦值時,不需要加$符,只有取變數值的時候,需要加$符

2、雙引號可以進行變數值替換,單引號和\不能進行變數替換

3、主要的環境變數(常量):$home 當前使用者的家目錄;$path 以冒號分隔的用來搜尋命令的目錄列表;$ps1 命令提示符,通常是$字元,但在bash中,你可以使用一些更複雜的值,例如字串[\u@\h \w]\$,它給出使用者名稱、機器名和當前目錄名;$ps2 二級提示符,用來表示後續的輸入,通常是》字元;$ifs  輸入域分隔符,當shell讀取輸入時,它給出用來分隔單詞的一組字元,它們通常是空格、製表符和換行符;$0 shell指令碼的名字;$# 傳遞給指令碼的引數個數;$$ shell指令碼的程序號,指令碼程式通常會用它來生成乙個唯一的臨時檔案,如/tmp/tmpfile_$$

4、$1,$2...根據位置取指令碼的輸入引數,最多到$9,下文同;$*在乙個變數中列出所有的引數,各個引數之間用環境變數ifs中的第乙個字元分隔,如果ifs被修改了,那麼$*將命令列分隔為引數的方式隨之改變;$@它是$*的變體,它不使用ifs環境變數,所有即使ifs為空,引數也不會擠在一起

5、測試命令:test或[符號,使用後者時,為了便於閱讀,通常加乙個]進行匹配,[ statement ]和內部的語句必須用空格分開。測試分三類:(1)字串:str1=str2,str1!=str2,-n str不為空則真,-z str為null則真;(2)算術:-eq,-ne,-gt,-ge,-lt,-le,!(表示式為假則結果為真);(3)檔案:-d,檔案是目錄則真,-e,如果檔案存在則真(不可移植,建議使用-f),-f,檔案是普通檔案則真,-g,如果檔案的set-group-id位被設定則真,-r,檔案可讀則真,-s,檔案大小不為0則真,-u,檔案的set-user-id位被設定則真,-w,檔案可寫則真,-x,檔案可執行則真。

8、if語句:if condition;then statement;else statment;fi

9、elif語句:if condition;then statement;elif condition;then statement;else statment;fi

10、for語句:for variable in values;do statement;done 迴圈直到values遍歷完

11、while語句:while condition;do statement;done 迴圈直到condition為假

12、util語句:util condition;do statement;done 迴圈直到condition為真

13、case語句:case variable in pattern[!pattern]...) statement;;pattern[!pattern]...) statement;;...esac

14、條件測試時,如果條件是字串,最好用"$var",即雙引號把變數括起來,這樣可以防止變數為空字串時的錯誤

15、and列表(&&):statement1&&statement2&&statement3&&...,只有前面的語句執行結果為真時,才執行後面的語句,如果某個語句返回假,則整個語句返回假

16、or列表(||):statement1||statement2||statement3||...,只有前面的語句執行結果為假時,才執行後面的語句,如果某個語句返回真,則整個語句返回真,該語句後面的語句將不會執行,

17、{}語句塊:可以在只允許單條語句的地方放入多條語句

18、函式:func_name() 函式被呼叫前必須先定義,所以最好把所有的函式定義放在指令碼的開始,也就是任何乙個呼叫之前

19、local關鍵字:在函式內部定義變數,變數作用範圍限於函式內部,如果外部變數(全域性變數)和區域性變數同名,則區域性變數會覆蓋全域性變數的值。在函式名後空格分隔的變數或字串作為函式引數,在函式內部用$1,$2...位置引數來引用引數

20、break命令:可以跳出迴圈,提供數值時表明跳出幾層迴圈,預設一層

21、:命令:是乙個空命令,相當於true的別名,執行速度比true快,但是可讀性差

23、.命令:在命令列下,在當前shell中執行命令(或另乙個命令)。一般情況下,在指令碼內執行外部命令或其他指令碼程式時,它會建立乙個新的子shell,外部命令和其他指令碼在該shell中執行,執行完後返回結果並丟棄子shell,所以無法使用當前shell的環境變數也不能保持子shell的環境變數。這時候用.命令執行外面命令或指令碼,則不會建立子shell,而是在當前shell執行。類似於把外部命令和其他指令碼包含到了本環境中

24、eval命令:對引數進行求值

25、exec命令:典型用法是替換當前shell為乙個不同的程式,替換後該命令後面的語句不再執行,因為當前shell已經不存在

26、exit命令:0成功,1-125使用者自定義錯誤碼,126檔案不可執行,127命令未找到,128及以上出現乙個訊號

27、export命令:匯出當前的變數,作為子shell的環境變數,在子shell中可以直接使用,而且可以被後續依次呼叫的所有shell使用

28、expr命令:把他的引數當做表示式求值,主要用於數值計算。使用方法`expr statement`(反引號)或$(expr statement)。可以執行加減乘除比較或與等運算

29、printf命令:和c語言的printf類似,只是不支援浮點數輸出

30、return命令:用作函式返回,如果沒有數值引數作為返回值,則返回最後一條命令的退出碼

31、set命令:為shell設定引數變數,可以用來儲存函式或命令的返回值,尤其返回值是空格分隔的多個值時很有效,可以用$1,$2...按位置取set的引數

32、shift命令:把所有引數變數左移一位,$0不變,$2變為$1,$1被丟棄,如果指定乙個數值,則表示左移n次,結果會影響$* $@ $#的值(因為有引數被丟棄)。當引數超過9個時,可以用它來丟棄前面的引數,然後訪問第十個及以後的引數

33、trap命令:在接收到訊號時要做的處理,格式:trap command signal,第乙個引數處理方法,第二個引數是訊號名稱(沒有sig字首)。忽略某個訊號,只需要把command設定為空字串'',恢復預設處理,只需要把command設定為-

34、unset命令:從環境中刪除變數或函式,不能刪除唯讀變數(如環境變數)。刪除和置為空不同,刪除後變數不再存在,置為空變數仍存在

35、$、$()、$(())的區別:$expression是取變數的值,$(expression)是執行命令expr並返回輸出結果(不是退出狀態\退出碼),$((expression))計算expr表示式的值,主要用於數值計算,用於替代expr命令,後者計算時需要啟動子shell,效率很低

36、xargs把命令的標準輸出轉化為一組引數,可以用位置訪問

37、$:引數替換,注意這裡是大括號,不是小括號(小括號的用法見上面35)。常見替換規則:$,如果param為空,則使用default的值,$,給出param的長度,$,從param的尾部開始刪除與word匹配的最小部分,返回刪除後剩餘部分,$,刪除最長部分,返回剩餘部分,$,從頭部開始刪除最小部分,$,刪除最長部分

38、$:如果foo不為空則返回foo,否則把bar賦值給foo並返回該值;$:在foo不存在或為空時輸出foo:bar並異常終止程式;$:foo存在且不為空時返回bar

Linux的shell程式設計 一

shell本身是乙個用c語言編寫的程式,它是使用者使用linux 的橋梁。shell既是一種命令語言,又是一種程式語言。作為命令語言,它互動式地解釋和執行使用者輸入的命令 作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。它雖然不是linux系統核心的一...

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 本...