shell获取命令行参数

1.获取传递给脚本的参数个数($#)

#!/bin/bash
echo $#

[root@iZbp170thpr4impaes41fzZ args]# ./1.sh a b c d e
5

2.获取脚本的名称以及第i个参数($0, $i)

#!/bin/bash
echo "执行脚本的名称为: $0"
echo "获取传入脚本的第二个参数为: $2"

[root@iZbp170thpr4impaes41fzZ args]# sh 2.sh mahua choudoufu
执行脚本的名称为:2.sh
执行脚本所传入的第二个参数为:choudoufu

3.获取脚本当前运行的进程号($$)

#!/bin/bash
echo "当前脚本运行的进程号为: $0"

[root@iZbp170thpr4impaes41fzZ args]# sh 3.sh 
“当前脚本运行的进程号为:25968

4.显示最后命令的退出状态,0表示没有错误,其他表示有错误($?)

#!/bin/bash
if [ $1 -lt 10 ];
then 
    echo "hello,world!"
else
    $[1/0]
fi

[root@iZbp170thpr4impaes41fzZ args]# sh 4.sh 4
hello,world!
[root@iZbp170thpr4impaes41fzZ args]# echo $?
0
[root@iZbp170thpr4impaes41fzZ args]# sh 4.sh 20
4.sh: line 7: 1/0: division by 0 (error token is "0")
[root@iZbp170thpr4impaes41fzZ args]# echo $?
1

5.显示传入脚本的所有参数($*, $@)

区别:$@是传给脚本的所有参数的列表,而$* 是以一个单字符串显示所有向脚本传递的参数,正常访问时没有区别,但当需要遍历时,$@一次输出一个命令行参数,而$*一次输出所有命令行参数

#!/bin/bash
#一次输出一个命令行参数
for i in "$@";
do
    echo $i
done
#一次全部输出命令行参数
for i in "$*";
do
    echo $i
done

[root@iZbp170thpr4impaes41fzZ args]# sh 5.sh a b c d e
a
b
c
d
e
a b c d e