Shell學習筆記,shell指令碼
一、變數的命名
變數名必須以字母或底線開頭,由字母、數字、或底線組成,變數名的長度不能超過255個字元。
二、變數的分類
1. 使用者自訂變數
2. 環境變數
3. 位置參數變數
4. 預定義變數
三、使用者自訂變數
使用者自訂變數是“局部變數”,只能在當前的Shell中生效
1. 定義變數
變數名=變數值
樣本:
注意:等號前後不能有空格,否則會出現以下錯誤提示:
2. 變數調用
$變數名 或 ${變數名}
樣本:
3. 變數疊加
樣本:
或:
4. 刪除變數
unset 變數名
樣本:
5. 查看變數
1) env:查看所有的環境變數
2) set:查看所有的變數(包括使用者自訂變數)
四、環境變數
環境變數是“全域變數”,在當前Shell和這個Shell的所有子Shell中生效
1. 設定環境變數
export 變數名=變數值
或
變數名=變數值
export 變數名
樣本:
注意:設定環境變數時,建議使用大寫,避免與使用者自訂變數或系統命令(都是小寫)衝突。
2. 刪除環境變數,環境變數調用,查看環境變數
使用者自訂變數的使用方式相同
3. 設定PS1環境變數
PS1環境變數會影響使用者提示符資訊,樣本如下:
五、位置變數1. $n
n為數字,$0代表命令本身,$1-$9代表第一到第九個參數,十以上的參數需要用大括弧包含,如${10}。
樣本:
#!/bin/basha=$1b=$2sum=$(($a +$b))echo $sum
2. $*
這個變數代表命令列中所有的參數,$*把所有的參數看成一個整體
#!/bin/bashfor i in "$*"do echo $idone#運行:test.sh 1 2 3#輸出:1 2 3#解釋:$*中的所有參數被看成是一個整體,所以這個for迴圈只會迴圈一次
3. $@
這個變數也代表命令列中所有的參數,不過$@把每個參數區分對待
#!/bin/bashfor i in "$@"do echo $idone
#運行:test.sh 1 2 3#輸出:
1 2 3#解釋:$@中的每個參數被看成獨立的,所以這個for迴圈會迴圈多次
4. $#
這個變數代表命令列中的所有參數的個數
#!/bin/bashecho $##運行:test.sh 1 2 3#輸出:3
六、預定義變數1. $?
最後一次執行的命令的返回狀態。如果這個值為0,則說明上一個命令執行正確;如果這個值不為0,則代表上一個命令執行的錯誤碼。
樣本:
2. $$
當前進程的進程號(PID)
樣本:
3. $!
後台啟動並執行最後一個進程的進程號(PID)
#!/bin/bashfind /root -name "test.sh" &echo $!
七、read命令
接受鍵盤輸入
1. 參數說明
-p "提示資訊": 在等待read輸入時,輸出的提示資訊
-t 秒數:read命令會一直等待使用者輸入,使用此參數可以指定等待時間
-n 字元數:read命令只接受指定的字元數,就會繼續執行
-s : 隱藏輸入的資料,適用於機密資訊的輸入
2. 樣本
#!/bin/bashread -p "please input username:" usernameread -p "please input password:" -s passwordecho -e "\n"read -p "please input sex[F/M]:" -n 1 sexecho -e "\n"echo "Welcome $username[$sex]"