bash指令碼case與函式

2021-09-16 21:48:26 字數 1834 閱讀 3873

case語句支援的模式

a|b:a或者b

*:匹配任意長度的任意字元

?:匹配任意單個字元

[-]:範圍匹配

case語法格式

case 表示式 in 

模式1)

條件1;; 模式2)

條件2;; 模式n)

條件n;; *)

剩餘條件

;; esac

bash指令碼函式

函式:function 實現可被呼叫模組

兩種返回值:

1.正常返回值

函式中的列印語句,如echo或print

最後一句執行成功

2.執行狀態返回值

取決於函式中執行的最後一條語句

自定義: return n

函式可以接受位置引數:

$1,$#,$0,$*,$@,$?

如果想把指令碼的全部位置引數,統統傳遞給指令碼中函式使用,怎麼辦?

使用$*傳遞

函式作用域

變數作用域:local==declare -i

函式體可以呼叫函式體 那麼函式體裡宣告變數

先內層函式體變數 在外層函式體變數 在主程式變數 在bash內建環境變數 如果沒有不會報錯 則為空顯示0

在函式中使用了在主程式中宣告的變數:重新賦值會影響主程式中的變數

如果不期望函式與主程式中的變數衝突,函式中使用變數都用local裝飾;即使用區域性變數

在函式中使用了序中在主程沒有宣告的變數:在函式執行結束後即被撤銷,無論是否使用local裝飾符

案例

[root@mm ~]#bash a.shh

10xy

20[root@mm ~]#cat a.shh

#!/bin/bash

declare -i a=10

built()

show()

echo $a(主程式變數)

built

show

函式語法

方法一

funcname()

方法二function funcname

案例

寫乙個指令碼,完成如下功能(使用函式):

1、提示使用者輸入乙個可執行命令;

2、獲取這個命令所依賴的所有庫檔案(使用ldd命令);

3、複製命令至/mnt/sysroot/對應的目錄中

解釋:假設,如果複製的是cat命令,其可執行程式的路徑是/bin/cat,那麼就要將/bin/cat複製到/mnt/sysroot/bin/目錄中,如果複製的是useradd命令,而useradd的可執行檔案路徑為/usr/sbin/useradd,那麼就要將其複製到/mnt/sysroot/usr/sbin/目錄中;

4、複製各庫檔案至/mnt/sysroot/對應的目錄中,其要求命令;

bash指令碼程式設計之case語句及指令碼選項高階

case語句及指令碼選項高階詳解 面向過程程式語言中的控制流 即程式當中的語句 預設是順序執行的。程式語言的控制結構一共有三類 1,順序結構 2,選擇結構 1 if語句 單分支的if語句 格式 if condition1 then expression fi 雙分支的if語句 格式 if condi...

Bash基礎 條件結構case

case word in pattern pattern command list esacbash在執行case結構前,會對word做 擴充套件,引數擴充套件,命令擴充套件,算術擴充套件和刪除引號 對pattern做 擴充套件,引數擴充套件,命令擴充套件和算術擴充套件 command list後的...

bash中case的用法

看到一些很實用的指令碼,由於之前對於bash指令碼的積累都比較離散,沒有乙個全面的了解,在這裡記錄一下 bash的case語句用法 case語句的語法規則是 case 變數名 in 模式1 命令序列1 模式2 命令序列2 預設執行的命令序列 esac 注意的是,case比較的是pattern,然後既...