Linux shll中的$符号 -- 读取命令行参数

来源:互联网 发布:linux安装eclipse 编辑:程序博客网 时间:2024/06/05 06:10

文件名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