向shell腳本傳送參數數據
我們可以在執行 Shell 腳本時,可以向腳本傳遞參數數據。腳本內獲取參數的格式為:$n。(n 代表一個數字,0為所執行的shell腳本名稱,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推……)
舉例說明
我們先編寫一個腳本,名字為test.sh,她的內容如下:
#!/bin/bash
echo"Shell 輸出腳本名稱及參數";
echo"執行的腳本名:$0";
echo"第一個參數為:$1";
echo"第二個參數為:$2"
;echo"第三個參數為:$3";
我們再給腳本賦予運行許可權後,運行輸出:
$chmod+x test.sh
#Shell 傳遞參數實例!
$ ./test.sh123
腳本運行結果:
執行的文件名:./test.sh
第一個參數為:1
第二個參數為:2
第三個參數為:3
處理參數擴展
除了上面的使用方式,我們經常還會用到這些,大家都知道普通的bash命令後邊可以跟任意的參數,那我們自己編寫的腳本是否也支持傳遞參數呢?答案當然是肯定的
執行「vim test.sh」創建一個新的shell腳本。腳本test.sh的內容如下:
#!/bin/sh
name=$1
echo "the $ are great man!"
給新創建的test.sh的腳本賦可執行許可權,命令為
chmod +x test.sh
執行"./test.sh "xiao wang" "命令,可以看到
腳本的結果「the xiao wang are great man!」
"name=$1"中$1為系統提供的位置參數,$0代表程序的名稱(./test.sh),[$1 $2...]從1開始為傳遞的參數。linux系統除了提供位置參數還提供內置參數,所有內置參數如下:
$0 ----當前腳本文件名
$n ----傳遞給腳本或函數的參數,n是一個數字,表示第幾個參數,$1表示第一個參數,$2表示第二個參數 ...
$# ----傳遞給腳本或函數的參數個數
$* ----傳遞給腳本或函數的所有參數,當它被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 ... $n"的形式輸出所有參數
$@ ----傳遞給腳本或函數的所有參數,當它被雙引號(" ")包含時,與$*稍有不同,"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數
$* 和$@不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數
下面寫個小程序實踐一下$* 和$@
$? ----上一個命令的退出狀態,或函數的返回值,如果正常退出則返回0,反之為非0值
$$ ----當前shell進程pid,對於shell腳本,就是這些腳本所在的進程ID
$! ----上一個命令的pid
新建test.sh chmod +x test.sh 執行./test.sh "a" "b" "c" "d",觀察列印結果
#!/bin/bash
echo "$*=" $*
echo "$@=" $@
echo "print each param from $*"
for var in $*
do
echo $var
done
echo "print each param from $@"
for var in $@
do
echo $var
done
echo "print each param from "$*""
for var in "$*"
do
echo $var
done
echo "print each param from "$@""
for var in "$@"
do
echo $var
done
列印結果:
堅持就是勝利,掌握好紮實的理論基礎。!
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
TAG:雲運維智慧 |