1、shell模組
shell指令碼中可以載入配置檔案或呼叫已經完成函式或指令碼。
a、載入配置檔案
新建配置檔案config,插入以下**:
1 reboot_mode=true
在同一路徑下,新建檔案module.sh,插入以下**:
1 #!/bin/bash2#可以簡寫為:. config
3source config
4echo
"reboot mode is: $
"
輸出:
1 reboot mode is: true
b、使用其它檔案中定義的函式
新建檔案add.sh,插入以下**:
1 #!/bin/bash2function
add() + $`
"6 }
在同一路徑下module.sh中,插入以下**:
1 #!/bin/bash2#可以簡寫為:. config
3source config
4echo
"reboot mode is: $"5
6#載入add模組
7 . add.sh
8echo
"1 + 2 result is: $(add 1 2)
"
輸出:
1reboot mode is: true
21 + 2 result is: 3
2、區域性變數和全域性變數
1#區域性變數只能在函式中定義,不加local即為全域性變數,語法如下:
2 local var_name=val
示例:
1function
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 總用量 202 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:52cst2 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:00cst2 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=12echo $
輸出1:
11
示例2:
1 declare -i n="hello"2
echo $
輸出2:
10
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
1echo
"first arg is: $1"2
echo
"second arge is :$2"3
echo
"all args is : $*"4
echo
"total args num is:$#
輸出2:
1first 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/bash2function
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 1232 + 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...