首页 > 系统相关 >Shell 传递参数

Shell 传递参数

时间:2023-01-06 10:05:48浏览次数:55  
标签:脚本 Shell echo 传递 sh 参数 test

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

实例

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

实例
#!/bin/bash
# author:菜鸟教程
# url:http://www.runoob.com​​

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 … $n"的形式输出所有参数。

$$

脚本运行的当前进程ID号

$!

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

$@

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

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

$-

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

$?

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

实例
#!/bin/bash
# author:菜鸟教程
# url:http://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:http://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

Shell 传递参数_字符串

标签:脚本,Shell,echo,传递,sh,参数,test
From: https://blog.51cto.com/u_15822686/5992158

相关文章

  • Shell 数组
    数组中可以存放多个值。BashShell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类似)。与大部分编程语言类似,数组元素的下标由0开始。Shell数组用括......
  • Tomcat弱口令爆破+war部署getshell
    影响版本Tomcat全版本环境搭建使用vulfocus中的tomcat-pass-getshell环境。漏洞复现访问manager后台提交用户名和密码后抓包,设置Authorization:BasicYWRtaW46YWRt......
  • 多态参数练习
    packagecom.hspedu.poly_.polyaraneter_;publicclassTest{publicstaticvoidmain(String[]args){WorkerlaLa=newWorker("laLa",1000);......
  • [oeasy]python0037_终端_terminal_电传打字机_tty_shell_控制台_console_发展历史
    换行回车回忆上次内容​换行​​和​​回车​​是两回事​换行​对应字节​​0x0A​​Line-Feed水平不动垂直向上喂纸所以是​​feed​​​回车​对应字节​​0x0D......
  • 继承ModelViewSet 获取url上参数的写法
    url('^task/reqs/(?P<pk>\d+)/$',patroltaskviews.PatrolTaskViews.as_view({"get":"getTaskReqs"})),views视图classPatrolTaskViews(ModelViewSet):defget......
  • NC16466 [NOIP2015]信息传递
    题目链接题目题目描述有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti的同......
  • [oeasy]python0037_终端_terminal_电传打字机_tty_shell_控制台_console_发展历史
    换行回车回忆上次内容换行和回车是两回事换行对应字节0x0ALine-Feed水平不动垂直向上喂纸所以是feed回车对应字节0x0DCarriage-Return垂直......
  • Android JNI GetMethodID中sig参数说明
    GetMethodID中sig参数是对函数的签名,也可以说标识,具体的格式为:(函数参数)返回值。方法签名中用大写的字母对应了java的基本数据类型:Z->booleanB->byteC->charS-......
  • 容器部署Jenkins,执行构建任务后,需要执行宿主机上的shell脚本
    遇到的问题:使用docker部署了一个Jenkins,Jenkins里执行构建,构建后需要执行宿主机上的shell脚本,这种该如何操作呢。怎么可以退出到宿主机执行shell,最开始挂载了Jenkins_ho......
  • 新品《XY6877ZA 5G AI核心板》参数详情介绍!
        深圳市新移科技有限公司推出的《XY6877ZA5GAI核心板》是基于联发科MT6877(天玑900)平台所研发出的5G全网通核心板。高端5G芯片,并拥有旗舰级大核的它,采用沉金生产......