之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。

bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。

1、命令行参数

向shell脚本传递数据的最基本方式是使用命令行参数。

1)读取参数

读取输入的参数的变量为位置参数,位置参数通过标准数字表示,

其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。

shell脚本自动将命令行参数赋值给各个位置变量。

同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)

当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。

2)读取程序名称

传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。

使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。

3)测试脚本

当脚本认为应该包含参数,却实际上没有数据时,就会出错。

好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。

例子:if [ –n “$1” ] then .. else .. fi

2、特殊的参数变量

用于跟踪命令行参数

1)参数计数

使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#

例子:if [ $# –ne 2 ] 即可测试参数个数

可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)

2)获取所有数据

变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。

变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数

3、移位

shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)

在不清楚参数数目情况下,这是一个迭代参数的好办法。

可以为shift提供一个参数,来实现多位移变化。

4、处理选项

选项是由破折号引导的单个字母,用于更改命令的行为。

1,找出选项

1)处理简单选项

可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。

2)从参数中分离选项

同时使用选项和参数时,可以使用--指示选项列表的结束。发现--后,shell就知道后面的是普通参数了,停止使用case处理选项。

3)处理带值的选项

选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:

2,使用getopt命令

getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析

1)命令格式

getopt可以接受任意形式的选项和参数列表,并自动将它们转换为适当的格式。

命令格式为: getopt options optstring parameters

选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。

2)脚本中使用getopt

需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。

需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`

但是getopt命令不能很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:

3)更高级的getopts命令

getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。

非常适宜于在循环中解析所有命令行参数

格式为: getopts optstring variable

$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。

注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。

好的特性:

1)可以在参数值中包含空格

2)选项字母和参数值中间可以没有空格

3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号

5、标准化选项

有一些字母选项具有标准含义。最好按照标准含义定义选项意义

-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y

6、获取用户输入

当需要在执行过程中获得执行脚本人员的输入,使用read命令

1)基本读取

read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。

-p 允许在read命令行中直接指定一个提示。

可以指定多个变量,也可以不指定将放置在reply环境变量中)

2)计时

使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。

使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入

3)默读

使用-s使输入不显示在终端例如输入密码)

4)读取文件

最常用的方法是使用cat命令,并通过管道传给包含read的while语句。

例子:

复制代码 代码示例:

cat test | while read line

linux shell运行脚本命令行参数,shell脚本命令行参数简介相关推荐

  1. linux关闭后台运行命令,linux后台运行、关闭、查看后台任务常用命令

    一.& 加在一个命令的最后,可以把这个命令放到后台执行,如: [root@bqh-01 ~]# watch -n 3 "sh 1.sh"  #每3s在后台执行一次1.sh脚 ...

  2. python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法

    脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...

  3. Linux笔记——运行模式之调度系统-作业管理-用户命令

    跑模式自然需要用到调度系统来进行作业管理,根据我在不同服务器上的使用经验总结几个非常常用的命令. 调度系统是个非常复杂的东西,所以细节不说太多了,要用的时候对应去查. 相关概念: 集群:利用高性能通信 ...

  4. shell实行mysql语句_【Mysql】shell运行mysql的sql语句_MySQL

    bitsCN.com [Mysql]shell运行mysql的sql语句 shell本身是一种脚本语言,所以不能像java一样通过api去连接数据库.shell还是要借助mysql本身的一些运行脚本才 ...

  5. linux的shell命令行参数,shell脚本命令行参数简介

    之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互. bash shell提供了命令行参数添加在命令后面的数据值).命令行选项修改命令行为的单字符值)和直接读取键盘输入. 1.命 ...

  6. Linux命令行与shell脚本编程大全:第2版

    <Linux命令行与shell脚本编程大全:第2版> 基本信息 作者: (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍] 译者: 武海峰 丛书名: 图 ...

  7. Linux_《Linux命令行与shell脚本编程大全》第十八章学习总结

    时间:2017年12月04日星期一 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...

  8. Linux命令行与Shell脚本编程大全读书笔记

    Linux内核4大主要功能: 内存管理 进程管理 设备管理 文件系统管理 Linux系统启动的进程和脚本管理 1./etc/inittab   管理系统开机时会自动启动的进程 2./etc/init. ...

  9. 《Linux命令行与shell脚本编程大全 第3版》

    第一部分 Linux 命令行 第1章  初识Linux she 1.1   什么是Linux 2 1.1.1 深入探究Linux 内核 3 1.1.2 GNU 工具 6 1.1.3 Linux 桌面环 ...

最新文章

  1. 2022-2028年中国场景金融行业深度调研及投资前景预测报告
  2. SPI通信协议:单片机spi通信接口什么意思,spi接口干什么用的?
  3. 自动关机脚本2007-10-28 10:04@ECHO off
  4. 7.Phong 和 BlinnPhong
  5. 算法---会议最大安排问题
  6. win7下安装pip——Python的包管理工具
  7. linux 访问文件软件,Linux下访问文件的基本模式
  8. 提花织机行业调研报告 - 市场现状分析与发展前景预测
  9. 研究生最忌讳的几点是什么?读研期间你该主动做什么?
  10. xp win7 linux 三系统下载,打造xp+linux+win7三系统教程.doc
  11. 兄弟FAX-2890更换硒鼓加粉清零方法
  12. adb通过USB或wifi连接手机
  13. windows操作系统下新建txt文件快捷键
  14. python 把京东订单,推送到测试环境,提供便利
  15. 洛谷p3398仓鼠找suger题解
  16. 跳台阶,有多少种跳法
  17. 机器学习模型——回归模型
  18. 【阅读笔记】提升example-based SISR七个技巧
  19. 【缺氧本体】火箭发射自动化模块
  20. 嵌入式面试题整理(一)

热门文章

  1. 代码写成这样,老板把我开除了| IT 巨能唠
  2. oracle 12c pl/sql语言,ORACLE 12C SQL语句中通过with 定义PL/SQL 函数
  3. 控制台服务编写 Linux,一步步搭建ubuntu server console(控制台,字符模式)开发环境...
  4. oracle判断是否是手机号码,oracle判断手机号码是否合法
  5. VS Code 主题配置
  6. minio 单机安装、部署 centos7环境
  7. 工作流实战_28_flowable 任务多实例
  8. Git仓库初始化_企业级开发原则
  9. 系统架构设计师 - 信息安全技术
  10. Java-类加载器-类运行时结构-。。。。