1. 程式人生 > >shell指令碼:變數

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