如何在Shell脚本中传递命令行参数

发布时间 - 2019-03-21 00:00:00    点击率:

命令行参数在命令行操作系统(如dos或linux)中的程序名称之后传递,并从操作系统传递到程序中。shell脚本也接受类似于nix命令的命令行参数。命令行参数对于在运行时将输入数据传递给脚本很有用,本文将介绍关于在shell脚本中传递命令行参数。

要传递命令行参数,我们只需在用空格分隔的脚本名之后编写它们。所有命令行参数都可以使用$来访问其位置编号。向shell脚本传递命令行参数的示例。

# sh myScript.sh 10 red admin.net

sh:Linux shell

myScript.sh:Linux shell 脚本

10:$1可访问的第一个命令行参数

red:第二个命令行参数,可以通过$2访问

admin.net:$3可访问的第三个命令行参数

访问带位置编号的命令行参数

如上所示,命令行参数可以在$1、$2、$3...$9、$10…$100等处访问。命令行参数的最大长度不是由shell定义的,而是由操作系统定义的,以千字节为单位。

$*:存储所有命令行参数

$@:存储所有命令行参数

$:存储命令行参数的计数

$0:脚本本身的存储名称

$1:存储第一个命令行参数

$2:存储第二个命令行参数

$3:存储第三个命令行参数

$9:存储第9个命令行参数

$10:存储第10个命令行参数

$99:存储第99个命令行参数

例1:

使用脚本名称和传递的参数总数创建一个shell脚本来打印所有参数。创建脚本文件myScript.sh要求以下内容。

#vim myScript.sh
#!/bin/bash

echo Script Name: "$0"
echo Total Number of Argument Passed: "$#"
echo Arguments List -
echo 1. $1
echo 2. $2
echo 3. $3

echo All Arguments are: "$*"

执行脚本

# sh myScript.sh  10 rahul tecadmin.net

Script Name: myScrit.sh
Total Number of Argument Passed: 3
Arguments List -
1. 10
2. red
3. admin.net
All Arguments are: 10 red admin.net

例2:

通过shell脚本中的所有参数创建循环。为此,请创建一个shell脚本文件myscript2.sh,其中包含以下内容。

# vim myScript2.sh
#!/bin/bash

for i in "$@"
do
  echo Argument: $i
done

执行脚本

# ./myScript2.sh  10 rahul tecadmin.net

Argument: 10
Argument: red
Argument: admin.net

通过移位来访问命令行参数

我们还可以通过改变命令行参数在shell脚本中的位置来访问它们。比如用$1访问第一个命令行参数。现在将参数换成1.意味着第二个参数现在位于第一个位置,相同的第三个位于第二个位置,依此类推。

使用下面的内容创建shell脚本myscript3.sh,并使用参数执行。现在现在观察如何在shell脚本中使用“shift ”命令移动参数。

#!/bin/bash

echo First Argument is: $1

echo " >> Shifting argument position by 1"
shift 1

echo Now first Argument is: $1
echo " >> Now Shifting position with 2"
shift 2

echo Now first Argument is: $1
echo " >> Now shifting position with 4"
shift 4

echo Now first Argument is: $1

执行脚本并密切观察脚本中$1的输出。

[root@tecadmin ~]# sh myScrit3.sh a friend in need is a friend indeed

First Argument is: a 
 >> Shifting argument position by 1
Now first Argument is: friend
 >> Now Shifting position with 2
Now first Argument is: need
 >> Now shifting position with 4
Now first Argument is: indeed

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的Linux教程视频栏目!


# php  # 命令行参数  # 循环  # .net  # number  # linux  # 命令行  # 第二个  # 第一个  # 第三个  # 是由  # 操作系统  # 创建一个  # 还可以  # 依此类推  # 来访问 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解Android图表 MPAndroidChart折线图  如何在腾讯云服务器上快速搭建个人网站?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  如何在腾讯云服务器快速搭建个人网站?  浅谈redis在项目中的应用  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  大型企业网站制作流程,做网站需要注册公司吗?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  简单实现jsp分页  详解Android中Activity的四大启动模式实验简述  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Linux系统命令中screen命令详解  如何挑选优质建站一级代理提升网站排名?  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel怎么上传文件_Laravel图片上传及存储配置  详解jQuery停止动画——stop()方法的使用  昵图网官网入口 昵图网素材平台官方入口  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel如何使用Eloquent进行子查询  PHP正则匹配日期和时间(时间戳转换)的实例代码  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何在IIS管理器中快速创建并配置网站?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  如何在IIS中新建站点并解决端口绑定冲突?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  JavaScript数据类型有哪些_如何准确判断一个变量的类型  IOS倒计时设置UIButton标题title的抖动问题  js实现点击每个li节点,都弹出其文本值及修改  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  java中使用zxing批量生成二维码立牌  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  如何在橙子建站中快速调整背景颜色?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制