Shell 参数


# Shell 参数

脚本获取参数:$n

n:代表参数的位置

#!/bin/bash

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

$ chmod +x test.sh 
$ ./test.sh 1 2 3
------------------------------------
结果:
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

处理参数的特殊字符:

  • $#:传递到脚本的参数个数

    #!/bin/bash
    echo "第一个参数为:$#";
    
    $ ./test.sh 1 2 3
    ---------------------------------
    结果:
    参数个数为:3
    
    1
    2
    3
    4
    5
    6
    7
  • $*: 以一个单字符串显示所有向脚本传递的参数

    #!/bin/bash
    echo "传递的参数作为一个字符串显示:$*";
    
    $ ./test.sh 1 2 3
    ------------------------------------
    结果:
    传递的参数作为一个字符串显示:1 2 3
    
    1
    2
    3
    4
    5
    6
    7
  • $$: 脚本运行的当前进程 ID 号

    #!/bin/bash
    echo "当前脚本id:$$";
    
    $ ./test.sh 1 2 3
    ------------------------------------
    结果:
    当前脚本id:11105
    
    1
    2
    3
    4
    5
    6
    7
  • $!: 后台运行的最后一个进程的 ID 号

    #!/bin/bash
    echo "最后一个进程id:$$";
    
    $ ./test.sh 1 2 3
    ------------------------------------
    结果:
    最后一个进程id:11107
    
    1
    2
    3
    4
    5
    6
    7
  • $@: 与 $* 相同,但是使用时加引号,并在引号中返回每个参数

    #!/bin/bash
    
    echo "-- \$* 演示 ---"
    for i in "$*"; do
        echo $i
    done
    
    echo "-- \$@ 演示 ---"
    for i in "$@"; do
        echo $i
    done
    
    $ ./test.sh 1 2 3
    -----------------------------------
    结果:
    -- $* 演示 ---
    1 2 3
    -- $@ 演示 ---
    1
    2
    3
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
  • $-: 显示 Shell 使用的当前选项

  • $?: 显示最后命令的退出状态,0 表示没有错误

$ 与 $@ 区别:*

  • 相同点:都是引用所有参数
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)