shell高階特性 4

2022-04-10 09:42:52 字數 4395 閱讀 5463

1、shell模組

shell指令碼中可以載入配置檔案或呼叫已經完成函式或指令碼。

a、載入配置檔案

新建配置檔案config,插入以下**:

1 reboot_mode=true

在同一路徑下,新建檔案module.sh,插入以下**:

1 #!/bin/bash

2#可以簡寫為:. config

3source config

4echo

"reboot mode is: $

"

輸出:

1 reboot mode is: true

b、使用其它檔案中定義的函式

新建檔案add.sh,插入以下**:

1 #!/bin/bash

2function

add() + $`

"6 }

在同一路徑下module.sh中,插入以下**:

1 #!/bin/bash

2#可以簡寫為:. config

3source config

4echo

"reboot mode is: $"5

6#載入add模組

7 . add.sh

8echo

"1 + 2 result is: $(add 1 2)

"

輸出:

1

reboot mode is: true

21 + 2 result is: 3

2、區域性變數和全域性變數

1

#區域性變數只能在函式中定義,不加local即為全域性變數,語法如下:

2 local var_name=val

示例:

1

function

say_hi(),$,nice to meet you!"5

}6 say_hi "

vicent"7

8#在函式外列印name和str1

9#str1為區域性變數,無法在函式外引用

10echo

"val of str1 is: $"11

#name為全部變數,輸出為vicent

12echo

"val of name is: $

"

輸出:

1 hi,vicent,nice to meet you!

2val of str1 is:

3 val of name is: vicent

3、重定向

重定向分為輸入重定向和輸出重定向向兩種。重定向就是改變標準輸入和輸出的方向。標準的輸入方向為從鍵盤到程式,標準的輸出方向是從程式到螢幕。

為了區別檔案,給每個檔案分配乙個整數,這個就是檔案描述符。

標準輸入的檔名為stdin,檔案描述符為0

標準輸出的檔名為stdout,檔案描述符為1

標準錯誤輸出檔名為stderr,檔案描述符為2

輸出重定向是值輸出不再是螢幕,一般是檔案,這樣可以方便儲存與檢視。

示例1:

1 #命令》檔案,以覆蓋的方式把命令的正確結果輸出到檔案中

2ls -all >a.txt

3cat a.txt

輸出1:

1 總用量 20

2 drwxr-xr-x 2 stephen stephen 4096 4月 4

18:54

.3 drwxr-xr-x 61 stephen stephen 4096 4月 4

18:15

..4 -rw-rw-r-- 1 stephen stephen 69 4月 4

18:25 add.sh

5 -rw-r--r-- 1 stephen stephen 0 4月 4

18:54

a.txt

6 -rw-r--r-- 1 stephen stephen 17 4月 4

18:15

config

7 -rw-rw-r-- 1 stephen stephen 557 4月 4

18:54 module.sh

示例2:

1

#ll命令不存在,所以會報錯。以覆蓋的方式把標準輸出和標準錯誤輸出重定向到檔案b.txt中

2date;ll > b.txt 2>&1

3cat b.txt

輸出2:

1 2023年 04月 04日 星期四 18:59:52

cst2 module.sh: 行 24: ll: 未找到命令

示例3:

1

#ll命令不存在,所以會報錯

2#ll命令不存在,所以會報錯。以追加的方式把標準輸出和標準錯誤輸出重定向到檔案b.txt中

3date >b.txt

4date;ll >> b.txt 2>&1

5cat b.txt

輸出3:

1 2023年 04月 04日 星期四 19:04:00

cst2 2023年 04月 04日 星期四 19:04:00

cst3 module.sh: 行 27: ll: 未找到命令

4、宣告變數型別

1

#用來設定變數的屬性,語法如下:

2 declare [+/-] [aaffgilprtux] [name=val]

3 #+設定屬性,取消屬性 ,i表示整數 r表示唯讀變數等

示例1:

1 declare -i m=1

2echo $

輸出1:

1

1

示例2:

1 declare -i n="

hello"2

echo $

輸出2:

1

0

5、read和位置引數

示例1:

1

#用來從標準輸出中讀取資料並賦值

2#示例

3 read -t 20 -sp "

please input your password :

"passwd

4if [ $ = "

123456

" ] ;then

5echo

"login sucess."6

else

7echo

"login fail."8

fi

輸出1:

1 please input your password : login sucess.

位置引數

示例2:

插入以下**並儲存為module.sh

1

echo

"first arg is: $1"2

echo

"second arge is :$2"3

echo

"all args is : $*"4

echo

"total args num is:$#

輸出2:

1

first arg is: hello

2second arge is :world

3all args is : hello world

4 total args num is:2

6、shell除錯

使用-x引數除錯shell指令碼,通過-x可以看到執行過程中變數取值與運**況。

示例1:

以下**儲存到test.sh中

1 #!/bin/bash

2function

say_hi(),$,nice to meet you!"6

}7 say_hi "

vicent

"

除錯指令碼test.sh

1 /bin/bash  -x test.sh

預期輸出為:

1 hi,vicent,nice to meet you!

實際輸出1:

1 + say_hi vicent 123

2 + local str1=hi

3 + declare -i name=vicent

4 + echo

'hi,0,nice to meet you!

'5 hi,0,nice to meet you

通過 -x列印出來的資訊可以看到name變數為強制宣告為整數,所以把字串裝換成了數字0。

高階shell特性

如果歷史命令和命令補充等有用的shell特性不能工作,請看一下內容。b 1 環境變數 b bash shell 維護大量已經執行命令 多種配置引數的設定 正在操作的環境等資訊,其中很多資訊儲存在 shell 環境中,因此稱作 環境變數 environment variable 可以通過輸入 prin...

Python 筆記 4 高階特性

取乙個list或tuple的部分元素是非常常見的操作。python提供了切片操作符,來完成部分元素的選取 除了上例簡單的下標範圍取元素外,python還支援一些其他的騷操作,如下 如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代 itera...

Shell程式設計 shell特性

linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...