shell指令碼:變數
首行:#!/bin/bash
#!符號能夠被核心識別成為一個指令碼的開始,這一行必須位於指令碼的首行
註釋:#
除去第一行的#
內容:可執行結構和內容
建立檔案的方式:
touch
echo “” > first.sh 注:向檔案輸入””中的內容 > 是覆蓋 >> 是追加
vim
chmod +x first.sh 給檔案賦予許可權
執行指令碼:
絕對路勁、相對路徑 會新開一個bash,不同的bash中的變數無法共享
bash first.sh 會新開一個bash,不同的bash中的變數無法共享
source first.sh source只在同一個bash執行,共享變數
變數設定規則
變數名稱可以由字母、數字和下劃線組成,但是不能以數字開頭,環境變數名,建議大寫便於區分
在bash中,變數的預設型別是字串型別,乳溝要進行數值運算,則必須指定變數型別為數值型別
變數等號連線,等號兩邊不能有空格(單雙引號中可以使用空格)
變數分類
使用者自定義變數、環境變數、位置引數變數、預定義變數
可以通過set檢視系統中的所有變數
位置引數變數:主要是用來向指令碼中傳遞引數或資料,變數名不能自定義,變數作用固定
預定義變數:是bash中已經定義好的變數,變數名不能自定義,變數的作用是固定的
使用者自定義變數
將一個命令賦值於一個變數
a=`ls` #1前面的那個符號
a=$(ls)
將一個變數賦值於另一個變數
a=$b
a=$(b)
a=”$b” #單引號不是賦值,雙引號才是賦值
刪除變數
uset
注:使用者自定義變數,作用域為當前的shell環境,如果通過bash進入子shell環境,就取不到值了
環境變數
使用者自定義變數只在當前shell中生效,而環境變數會在當書籤shell和子shell中生效,如果把環境變數寫入相應的配置檔案,那麼環境變數會在所有的shell中生效
export 變數名=變數值 #宣告變數
位置引數變數
$n $0代表命令本身,$1-$9代表順序引數編號,大於10的話使用括號,如${10}
$* 把所有引數當作整體
[email protected] 把每個引數分開對待
$# 所有引數的個數
eg:./**.sh 11 22 33 44
echo "所有引數個數:$#" 4
echo "所有引數:$*" 11 22 33 44
echo "所有引數:[email protected]" 11 22 33 44(這個是一個一個輸出的)
位置變數和預定義變數一個指令碼
#!/bin/bash
echo '$0 獲取當前執行的Shell指令碼檔名: ' "$0"
echo '$n 獲取當前執行的Shell指令碼的第n個引數值,n=1..9 ' '$1'=$1,'$2'=$2,'$3'=$3
echo '$ 獲取當前Shell的所有引數 $1 $2 $3 ...注意與[email protected]的區別:' $
echo '$# 獲取當前Shell命令列中的引數總個數:' $#
echo '$$ 獲取當前Shell的程序號(PID): '$$
sleep 3 &
echo '$! 執行上一個指令的PID: ' $!
echo '$? 獲取執行的上一個指令的返回值: ' $?
echo '[email protected] 獲取當前Shell的所有引數 "$1" "$2" "$3" "...":' [email protected]
echo '$ 在此之前的命令或指令碼的最後一個引數: '$
EOF
sh positional.sh a b c d e
$0 獲取當前執行的Shell指令碼檔名: positional.sh
$n 獲取當前執行的Shell指令碼的第n個引數值,n=1..9 $1=a,$2=b,$3=c
$* 獲取當前Shell的所有引數 $1 $2 $3 ...注意與[email protected]的區別: a b c d e
$# 獲取當前Shell命令列中的引數總個數: 5
$$ 獲取當前Shell的程序號(PID): 1979
$! 執行上一個指令的PID: 1980
$? 獲取執行的上一個指令的返回值: 0
[email protected] 獲取當前Shell的所有引數 "$1" "$2" "$3" "...": a b c d e
$_ 在此之前的命令或指令碼的最後一個引數: e