sh 文件 执行传参 Shell 传递参数

举报
风吹稻花香 发表于 2022/09/25 07:43:29 2022/09/25
【摘要】 目录 Shell 传递参数 判断参数个数 不传参数执行 传递3个参数执行 传递2个参数执行 传一个参数,参数长度为2,第2个开始是自定义参数,第1个为路径 Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本...

目录

Shell 传递参数

判断参数个数

不传参数执行

传递3个参数执行

传递2个参数执行


传一个参数,参数长度为2,第2个开始是自定义参数,第1个为路径

Shell 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

实例

以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):


  
  1. #!/bin/bash
  2. # author:菜鸟教程
  3. # url:www.runoob.com
  4. echo "Shell 传递参数实例!";
  5. echo "执行的文件名:$0";
  6. echo "第一个参数为:$1";
  7. echo "第二个参数为:$2";
  8. echo "第三个参数为:$3";

为脚本设置可执行权限,并执行脚本,输出结果如下所示:

$ chmod +x test.sh

$ ./test.sh 1 2 3

Shell 传递参数实例!

执行的文件名:./test.sh

第一个参数为:1

第二个参数为:2

第三个参数为:3

另外,还有几个特殊字符用来处理参数:

参数处理 说明

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

$* 以一个单字符串显示所有向脚本传递的参数。

如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

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

$! 后台运行的最后一个进程的ID号

$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。

如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$- 显示Shell使用的当前选项,与set命令功能相同。

$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

#!/bin/bash

# author:菜鸟教程

# url:www.runoob.com

echo "Shell 传递参数实例!";

echo "第一个参数为:$1";

echo "参数个数为:$#";

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

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

$ chmod +x test.sh

$ ./test.sh 1 2 3

Shell 传递参数实例!

第一个参数为:1

参数个数为:3

传递的参数作为一个字符串显示:1 2 3

$* 与 $@ 区别:

相同点:都是引用所有参数。

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

#!/bin/bash

# author:菜鸟教程

# url:www.runoob.com

echo "-- \$* 演示 ---"

for i in "$*"; do

echo $i

done

echo "-- \$@ 演示 ---"

for i in "$@"; do

echo $i

done

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

$ chmod +x test.sh

$ ./test.sh 1 2 3

-- $* 演示 ---

1 2 3

-- $@ 演示 ---

1

2

3

原文链接:https://blog.csdn.net/weixin_39634443/article/details/111818090

判断参数个数


  
  1. #!/bin/bash
  2. # 这是个测试脚本传参的测试例子
  3. echo "My name is `basename $0` -I was called as $0"
  4. echo "I was called with $# parameters."
  5. if [ "$#" -eq "2" ];then
  6. echo "My first parameter is $1"
  7. echo "My second parameter is $2"
  8. else
  9. echo "Usage: `basename $0` first second"
  10. echo "You provided $# parameters,but 2 are required."
  11. fi

详细的执行过程如下

不传参数执行

[root@svn shell_example]# sh params_v2.sh

My name is params_v2.sh -I was called as params_v2.sh

I was called with 0 parameters.

Usage: params_v2.sh first second

You provided 0 parameters,but 2 are required.

传递3个参数执行

[root@svn shell_example]# sh params_v2.sh one two three

My name is params_v2.sh -I was called as params_v2.sh

I was called with 3 parameters.

Usage: params_v2.sh first second

You provided 3 parameters,but 2 are required.

传递2个参数执行

[root@svn shell_example]# sh params_v2.sh one two

My name is params_v2.sh -I was called as params_v2.sh

I was called with 2 parameters.

My first parameter is one

My second parameter is two

问题来了,要是后期还要加参数怎么办呢?或者我也不确定到底会传几个参数.

解决方法如下,详细执行结果如下

[root@svn shell_example]# cat manyparams.sh

#!/bin/bash

#这是个测试脚本传N个参数的例子

echo "我的名字是 `basename $0` - 我是调用自 $0"

echo "我有 $# 参数"

count=1

while [ "$#" -ge "1" ];do

echo "参数序号为 $count 是 $1"

let count=count+1

shift

done

一个参数执行

[root@svn shell_example]# sh manyparams.sh one

我的名字是 manyparams.sh - 我是调用自 manyparams.sh

我有 1 参数

参数序号为 1 是 one

5个参数执行

[root@svn shell_example]# sh manyparams.sh one two three four five

我的名字是 manyparams.sh - 我是调用自 manyparams.sh

我有 5 参数

参数序号为 1 是 one

参数序号为 2 是 two

参数序号为 3 是 three

参数序号为 4 是 four

参数序号为 5 是 five
————————————————
版权声明:本文为CSDN博主「weixin_39758696」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39758696/article/details/111818061

文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/126958652

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。