【Shell脚本4】Shell 传递参数-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Shell 传递参数

我们可以在执行 Shell 脚本时向脚本传递参数脚本内获取参数的格式为$n。n 代表一个数字1 为执行脚本的第一个参数2 为执行脚本的第二个参数以此类推……
以下实例我们向脚本传递三个参数并分别输出其中 $0 为执行的文件名包含文件路径

#!/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

另外还有几个特殊字符用来处理参数
在这里插入图片描述

#!/bin/bash

echo "Shell 传递参数实例";
echo "第一个参数为$1";

echo "参数个数为$#";
echo "传递的参数作为一个字符串显示$*";

执行脚本输出结果如下所示

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例
第一个参数为1
参数个数为3
传递的参数作为一个字符串显示1 2 3

$* 与 $@ 区别

  • $ * 将所有命令行参数作为单个字符串返回。参数之间由变量 IFSInternal Field Separator中的第一个字符分隔默认为空格。例如如果执行脚本 script.sh arg1 arg2 “arg3 with space”其中脚本内容为 echo "$ * "那么将输出 arg1 arg2 arg3 with space。
  • $ @将每个命令行参数作为独立的、可被引用的字符串返回。每个参数被视为独立的实体不会合并为单个字符串。例如如果执行脚本 script.sh arg1 arg2 “arg3 with space”其中脚本内容为 echo “$@”那么将输出 arg1 arg2 arg3 with space。

下面是一个简单的示例来说明它们之间的区别

#!/bin/bash

echo "Using \$*"
for arg in "$*"; do
  echo "$arg"
done

echo "Using \$@"
for arg in "$@"; do
  echo "$arg"
done

如果执行脚本 script.sh arg1 arg2 “arg3 with space”输出将会是

Using $*
arg1 arg2 arg3 with space
Using $@
arg1
arg2
arg3 with space

从输出中可以看出$* 将所有参数作为单个字符串进行处理而 $@ 将每个参数作为独立的字符串进行处理。因此在处理带有空白字符的参数时这两个变量的行为可能会有所不同。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell

“【Shell脚本4】Shell 传递参数-CSDN博客” 的相关文章