檔案名稱test.sh
USER=nihaoecho "hello $USER"#$0 指令碼名echo "script name is : `basename $0`"#$1 第一個變數名echo "first param is : $1"#$* 所有變數echo "all params are : $*"#$# 變數長度echo "params' length is : $# "#$@ 所有變數echo "all params are : '$@'"#$$ 當前指令碼進程echo "process id of this script is : $$"#$? exit 退出狀態echo "exit status is : $?"#$! 最後一個守護進程pid,last daemon process (&) process idecho "last daemon process id is : $!"
輸出結果:
[admin@v035114 shuohai]$ ./test.sh a b chello nihaoscript name is : test.shfirst param is : aall params are : a b cparams' length is : 3 all params are : 'a b c'process id of this script is : 10837exit status is : 0last daemon process id is :
選擇第一個參數、最後一個、倒數第二個、從第二個連續的幾個參數
[admin@arch036088.sqa.cm4 ~]$ cat test.sh #all params 全部參數echo $@#all params 全部參數echo $*#length of params 參數的長度echo $##first param 第一個參數echo $1#last param 最後一個參數echo ${@:${#@}}#last 2 param 最後兩個參數echo ${@:${#@}-1}#last 2nd param 倒數第二個參數echo ${@:${#@}-1:1}#from 2nd to last param 從第二個到最後一個參數echo ${@:2}#from 2nd, count 2 從第2個參數開始,連續2個參數echo ${@:2:2}
輸出結果
12 23 43 3 3412 23 43 3 34512343 34323 43 3 3423 43
讀取最後一個參數另一種方法 ${$#} 但是大括弧中不能使用美元$符號,要用! 代替
[admin@v035114 shuohai]$ cat ./test.sh echo ${!#}[admin@v035114 shuohai]$ ./test.sh 12 34 4 5 5
遍曆所有參數的另一種方法
[admin@v035114 shuohai]$ cat ./test.sh INDEX=1 for param in $@do echo $INDEX "--" $param INDEX=$[ $INDEX+1 ]doneINDEX=1for param in $*do echo $INDEX "--" $param INDEX=$[ $INDEX+1 ]done[admin@v035114 shuohai]$ ./test.sh 12 34 4 5 1 -- 122 -- 343 -- 44 -- 51 -- 122 -- 343 -- 44 -- 5
只列印第2個到第4個參數,一共5個參數
[admin@v035114 shuohai]$ cat param.sh INDEX=1 for param in $@do if [ $INDEX -ge 2 ] && [ $INDEX -le 4 ]; then echo $INDEX "--" $param fi INDEX=$[ $INDEX+1 ]done[admin@v035114 shuohai]$ ./param.sh 12 34 4 52 -- 343 -- 44 -- 5
訪問第10個參數之後,不能直接使用$10訪問了,要使用大括弧
[admin@v035114 shuohai]$ cat test.sh echo $*echo $11 #錯誤的方式echo $[ ${10} ]echo $[ ${11} ][admin@v035114 shuohai]$ ./test.sh 12 34 4 5 5 6 7 8 9 10 1112 34 4 5 5 6 7 8 9 10 11121 1011