大家都知道普通的bash命令后邊可以跟任意的參數(shù),那我們自己編寫(xiě)的腳本是否也支持傳遞參數(shù)呢?答案當(dāng)然是肯定的
成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(成都創(chuàng)新互聯(lián)).為客戶提供專業(yè)的棕樹(shù)數(shù)據(jù)中心,四川各地服務(wù)器托管,棕樹(shù)數(shù)據(jù)中心、多線服務(wù)器托管.托管咨詢專線:13518219792執(zhí)行“vim test.sh”創(chuàng)建一個(gè)新的shell腳本。腳本test.sh的內(nèi)容如下:
#!/bin/sh
name=$1
echo "the ${name} are great man!"
給新創(chuàng)建的test.sh的腳本賦可執(zhí)行權(quán)限,命令為“chmod +x test.sh”
執(zhí)行'./test.sh "xiao wang" '命令,可以看到自己編寫(xiě)腳本的結(jié)果“the xiao wang are great man!”
"name=$1"中$1為系統(tǒng)提供的位置參數(shù),$0代表程序的名稱(./test.sh),[$1 $2...]從1開(kāi)始為傳遞的參數(shù)。linux系統(tǒng)除了提供位置參數(shù)還提供內(nèi)置參數(shù),所有內(nèi)置參數(shù)如下:
$0 ----當(dāng)前腳本文件名
$n ----傳遞給腳本或函數(shù)的參數(shù),n是一個(gè)數(shù)字,表示第幾個(gè)參數(shù),$1表示第一個(gè)參數(shù),$2表示第二個(gè)參數(shù) ...
$# ----傳遞給腳本或函數(shù)的參數(shù)個(gè)數(shù)
$* ----傳遞給腳本或函數(shù)的所有參數(shù),當(dāng)它被雙引號(hào)(" ")包含時(shí),"$*" 會(huì)將所有的參數(shù)作為一個(gè)整體,以"$1 $2 ... $n"的形式輸出所有參數(shù)
$@ ----傳遞給腳本或函數(shù)的所有參數(shù),當(dāng)它被雙引號(hào)(" ")包含時(shí),與$*稍有不同,"$@" 會(huì)將各個(gè)參數(shù)分開(kāi),以"$1" "$2" … "$n" 的形式輸出所有參數(shù)
$* 和$@不被雙引號(hào)(" ")包含時(shí),都以"$1" "$2" … "$n" 的形式輸出所有參數(shù)
下面寫(xiě)個(gè)小程序?qū)嵺`一下$* 和$@
$? ----上一個(gè)命令的退出狀態(tài),或函數(shù)的返回值,如果正常退出則返回0,反之為非0值
$$ ----當(dāng)前shell進(jìn)程pid,對(duì)于shell腳本,就是這些腳本所在的進(jìn)程ID
$! ----上一個(gè)命令的pid
新建test.sh chmod +x test.sh 執(zhí)行./test.sh "a" "b" "c" "d",觀察打印結(jié)果done
打印結(jié)果: