文件名test.sh
USER=nihao
echo "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 id
echo "last daemon process id is : $!"
输出结果:
[admin@v035114 shuohai]$ ./test.sh a b c
hello nihao
script name is : test.sh
first param is : a
all params are : a b c
params' length is : 3
all params are : 'a b c'
process id of this script is : 10837
exit status is : 0
last 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 34
12 23 43 3 34
5
12
34
3 34
3
23 43 3 34
23 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 ]
done
INDEX=1
for param in $*
do
echo $INDEX "--" $param
INDEX=$[ $INDEX+1 ]
done
[admin@v035114 shuohai]$ ./test.sh 12 34 4 5
1 -- 12
2 -- 34
3 -- 4
4 -- 5
1 -- 12
2 -- 34
3 -- 4
4 -- 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 5
2 -- 34
3 -- 4
4 -- 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 11
12 34 4 5 5 6 7 8 9 10 11
121
10
11