shell 中的位置参数

1、位置变量

        位置变量并不是用户自定义的,而在shell中可以直接使用,这样一些约定俗成的规则就可以了。

        定义:当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数

2、位置参数变量

$n : n为数字,

$0代表脚本本身

$1~$9代表第1~9参数,10以上的参数需要用大括号包含,如:${10}

$@:命令行所有参数,但每个参数区别对待,推荐使用这个

$*:命令行所有参数,所有参数视为一个整体

$#:参数总个数

$$:脚本运行的当前进程ID号

$!: 上一个进程的ID号

3、 $@和 $*的区别

$*:命令行所有参数,所有参数视为一个整体

$@:命令行所有参数,但每个参数区别对待

# 双引号中"*"和"@"区别
echo "\$*的输出如下:"
for i in "$*"; do  # 多个参数当成一个参数传递了
   echo $i
done

echo "  "
echo "\$@的输出如下:"
for i in "$@"; do  # 多个参数分开传递
   echo $i
done

 

 4、set -- 和 exec 的用法

4.1 在Shell中,set -- a b c 的命令用于设置位置参数(Positional Parameters)。

  • 语法set -- [arguments]

  • 用途:

    • set -- 用于重新定义位置参数,即 $1$2, ... ,通常用于重设或覆盖脚本启动时传递给它的参数。
    • 在 set -- /bin/node_exporter "$@" 中:
      • /bin/node_exporter 被设置为新的位置参数 $1
      • "$@" 表示传递给当前脚本的所有原始参数,被添加为从 $2 开始的后续位置参数。
  • 结果: 在此命令执行后,位置参数的第一个元素为 /bin/node_exporter,随后是所有原有的参数。这样做的效果是准备好一组命令和参数供后续执行。

#!/bin/bash
set -- a b c echo "First argument: $1" echo "Second argument: $2" echo "Third argument: $3" 

4.2 exec

exec

  • 语法exec [command] [arguments]

  • 用途:

    • exec 用于用指定的命令替换当前的 Shell 进程。执行此命令后,原来的 Shell 进程会终止并被新的命令进程所替代。
    • 在 exec "$@" 中:
      • "$@" 展开为所有位置参数,所以 exec 实际上在执行 node_exporter 程序以及所有准备好的参数。
      • exec 不会启动一个新的子进程,而是替换了 Shell 本身的进程,因此没有返回到原来的脚本中,节省了系统资源。

 

posted @ 2022-06-28 10:59  凡人半睁眼  阅读(211)  评论(0编辑  收藏  举报