shell 脚本中关于用户输入参数的处理

Shell脚本基础参数和写法,条件测试语句用法 本文介绍了Linux中Shell脚本的基本配置与运行方法,以及条件测试语句的使用。主要内容包括:1)通过touch或vim创建.sh脚本文件,使用#!/bin/bash声明解释器;2)三种运行方式(bash、可执行权限、source)及路径指定;3)条件测试语句格式与参数,包括文件测试(-e/-f等)、字符串测试(-n/-z等)、整数比较(-eq/-gt等)和逻辑运算(&&/||/!);4)测试结果通过$?获取,0表示成立。文章详细说明了各种测试操作符的功能和使用注意事项,并提供了实际命令示 阅读详情

shell 脚本中关于用户输入参数的处理

1、命令行参数

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

(1) 读取参数

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

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

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

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

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

(2)读取程序名称

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

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

(3)测试脚本

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

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

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

2、特殊的参数变量

用于跟踪命令行参数

(1)参数计数

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

ex: 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语句。

ex: cat test | while read line

25、Shell脚本编程:循环、参数传递与用户输入处理 本文详细介绍了Shell脚本编程中的循环结构、参数传递方法以及用户输入处理技巧。通过实际案例,如查找可执行文件、批量创建用户账户等,展示了如何高效利用循环和参数处理完成系统管理任务。此外,还探讨了脚本编写中的最佳实践,帮助开发者编写更健壮、易维护的脚本程序。 阅读详情

相关推荐

2025.06.25【微生物】|Emu工具安装与使用详解:全长16S扩增子微生物丰度分析

Emu是一款基于贝叶斯方法的微生物多样性分析工具,专为处理高错误率的长读长16S/18S扩增子数据优化。本文详细介绍了Emu的安装与使用方法:1)通过conda创建独立环境并安装Emu;2)提供SILVA等预构建数据库的下载指南,并说明自定义数据库的构建方法;3)演示单样本和多样本分析流程,解读关键输出文件;4)介绍丰度表合并、分类等级汇总等实用功能扩展;5)建议后续分析方向。文章还附有官方GitHub链接和相关文献资源,为微生物群落结构研究提供了一套完整的分析解决方案。

1256

shell脚本编程笔记(五)—— 输入处理

一、 处理用户输入 1. 命令行参数 向shell脚本传递数据最基本的方法是使用命令行参数,在脚本运行时指定参数,例如: ./add.sh 10 30 ./output.sh 'Hello World' #带空格的参数需加引号,单双引号均可 shell提供位置参数(一组特殊环境变量集合),分别用$1 $2..$9表示第一至第九个参数,10之后写法为${10}。 有两个比较特殊的参数$0和$#,$0表示执行的脚本名(含路径),$#表示参数的个数 如果只想获取脚本名不需要路径,可以使用base

Hehuyi_In的博客 6242

5分钟搞定单细胞marker基因气泡图:scDotPlot保姆级教程(含Seurat适配)

本文提供了一份详细的scDotPlot R包使用教程,帮助用户在5分钟内完成单细胞marker基因气泡图的绘制。教程涵盖环境准备、Seurat和SingleCellExperiment对象的适配处理、进阶可视化技巧及自动化报告生成,特别适合生物信息学新手和临床研究者快速掌握这一高效的可视化工具。

weixin_29047545的博客 261

Linux shell 脚本处理用户输入(命令行选项参数、用户输入)

简述了在bash shell 脚本中,如何使用命令行参数,如何设定命令选项及参数。从文件中读取的方法。

weixin_43276033的博客 3万+

半桥LLC谐振变换器及同步整流MATLAB仿真(一)

LLC工作原理详细解析,工作过程详细拆解

qq_55203246的博客 3万+

Innovus中_clock_gen skew group的隐藏陷阱:如何避免自动分组导致的时序问题

本文深入剖析了在Innovus工具进行时钟树综合(CTS)时,`_clock_gen` skew group自动分组机制可能引发的隐蔽时序问题。文章通过实际案例,解释了该机制如何错误地将分频寄存器与配置寄存器归为一组,从而破坏时钟域边界并导致post-CTS时序违例,并提供了关闭自动提取、手动精确定义skew group等有效解决方案。

gpu4optimizer的博客 266

Shell知识

1.特殊变量 $# (功能描述:获取所有输入参数总数量,常用于循环) ∗(功能描述:这个变量代表命令行中所有的参数,* (功能描述:这个变量代表命令行中所有的参数,∗(功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体) @(功能描述:这个变量也代表命令行中所有的参数,不过@ (功能描述:这个变量也代表命令行中所有的参数,不过@(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待) [hadoop@hadoop101 datas]$ vim parameter.

Dev_YH的博客 458

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2551

如何给shell脚本传入参数小结

大家都知道普通的bash命令后边可以跟任意的参数,那我们自己编写的脚本是否也支持传递参数呢?答案当然是肯定的 执行“vim test.sh”创建一个新的shell脚本。脚本test.sh的内容如下: #!/bin/sh name=$1 echo "the ${name} are great man!" 给新创建的test.sh的脚本赋可执行权限,命令为“chmod +x test.sh”

AlexYBB的专栏 1万+

【LOGO动态替换】记录一次关于LOGO动态替换引发的uboot代码分析及其实现

文章目录1.前言2.实现2.1 新增logo分区2.2 制作logo分区镜像2.2.1 查看logo.bmp和logo_kernel.bmp的文件大小。2.2.2 按规则将bmp写入logo.img3.分析3.1 uboot的启动分析3.2 uboot bmp load 显示部分3.2.1 rockchip_show_logo3.2.2 load_bmp_logo3.2.3 load_bmp_logo3.3 uboot bmp read部分3.3.1 read_logo_bmps3.3.1 read_bmp

wang 恒 的博客 1213

NSIS教程(6): 使用第三方插件

NSIS内置了很多指令,这些指令可以满足我们基本需求,但难免会遇到NSIS没有内置的功能,如进程操作,后台运行(即多线程),7z压缩等等,这个时候我们就需要借助第三方插件来满足我们所需要的功能了。 一、插件获取 NSIS官方收录插件的网址是:http://nsis.sourceforge.net/Category:Plugins,我们可以在这个网站上查找和下载我们需要的插件,该网站上针对每

while(1) { smile(); } 9万+

linux脚本外输入参数,shell 脚本中关于用户输入参数的处理

1、命令行参数向shell脚本传递数据的最基本方式是使用命令行参数。(1) 读取参数读取输入的参数的变量为位置参数,位置参数通过标准数字表示,其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。shell脚本自动将命令行参数赋值给各个位置变量。同时输入多个参数(可以是数值也可以是字符串)时,必须使用空 格分隔(要想在参数值中包含空格,就必须使用单引号或双引号)当...

weixin_39523625的博客 1164

相似贴子推荐:基于 LangChain4j + Milvus 的混合检索实战

本文提出了一种基于LangChain4j和Milvus的混合检索方案,用于解决论坛社区中的相似帖子推荐问题。该方案结合稠密向量语义检索和BM25关键词检索的优势,通过RRF算法实现结果融合。系统采用bge-small-zh模型生成语义向量,利用Milvus 2.5+原生支持的BM25功能和混合搜索API,在百万级数据规模下实现50ms内的检索延迟,召回率和精确率分别提升15%和22%。文章详细介绍了从数据预处理、向量化到混合检索的完整实现流程,并探讨了进阶优化方向,为推荐系统和RAG应用提供了高效解决方案。

分享AI、区块链技术及应用,未来已来 88

shell脚本中用getopts处理用户输入选项和参数

shell脚本中用getopts处理用户输入选项和参数,举例说明使用方法:   while getopts :a:b:cdefg opt; do     case $opts in         a) do sth;;         cde) do another;;         ?)exit;;     esac done   几个重要变量:     OPT

halazi100 3118

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Shell编程中的用户输入处理(3):在shell脚本中,处理命令行参数

3. 在shell脚本中,处理命令行参数 3.1 检查输入参数 使用条件判断,检查输入参数个数 # !/bin/bash # 指定shell类型 if [ $# -lt 2 ] # $#获取输入个数,选项-lt表示less than then echo "please input at least 2 param" fi 默

yjk13703623757的博客 9703

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

linux shell 安装命令行参数,Shell编程中的用户输入处理(3):在shell脚本中,处理命令行参数...

3. 在shell脚本中,处理命令行参数3.1 检查输入参数使用条件判断,检查输入参数个数# !/bin/bash # 指定shell类型if [ $# -lt 2 ] # $#获取输入个数,选项-lt表示less thanthenecho "please input at least 2 param"fi默认情况下,用户的输入是不可靠的,我们需要对用户输入进行检查,除此之...

weixin_35725410的博客 276

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

linux脚本用户输入,Linux shell脚本读取用户输入的参数

Linux&shell之处理用户输入写在前面:案例.常用.归类.解释说明.(By Jim) 命令行参数$1为第一个参数,$2为第二个参数,依次类推...示例: #!/bin/bash # using one command line p ...Shell 脚本处理用户输入传递参数 跟踪参数 移动变量 处理选项 将选项标准化 获得用户的输入 bash shell提供...

weixin_42101056的博客 828

【shell实战之】处理用户输入_传递参数_读取脚本名

【代码】【shell实战之】处理用户输入_传递参数_读取脚本名。

m0_61126667的博客 357

7.4 shell处理用户输入

1.命令行参数 命令行参数允许在运行脚本时向命令行添加数据。 1.1 读取参数 Bash shell会将一些称为位置参数的特殊变量分配给输入到命令行中的所有参数。 这也包括shell所执行的脚本名称。位置参数变量是标准的数字: $0:程序名(脚本名); $1:第一个参数; $2:第二个参数; 依次类推,直到$9,第9个参数; 可以在shell脚本中像使用其他变量一样使用$1变量,shell脚本会自动将命令行参数的值分配给变量,不需要作任何处理。 如果需要输入更多的命令行参数,则每个

QiuSaMa的博客 286

Linux 命令行与 shell 脚本编程大全 14 处理用户输入

介绍 shell 脚本如何接收用户的输入 更多精彩 更多技术博客,请移步 IT人才终生实训与职业进阶平台 - 实训在线 导览 运行脚本时可以往脚本中传入命令行参数,例如 ./param.sh 1 2 3 shift 命令可以从右向左移动传入的参数位置,类似于迭代器,shift n 命令可以指定参数移动的位置数,默认为 1 $# 可以在脚本中直接获取传入的参数总数,${!#} 可以在脚本中...

asing1elife's blog 1312

linux 脚本 输入命令行参数,Shell编程中的用户输入处理(2):处理命令行参数(选项、参数)...

2. 命令行参数(选项、参数)2.1 读取命令行参数读取参数时,注意以下几点:用空格分割各个参数位置参数$position:$0、$1、$2...,其中$0:0号位置参数是调用shell脚本的程序名;$1、$2、$3 ~ $9:命令行传递的位置参数;${10}...:对于多于10个(含)的位置参数,要添加{}引用例1:命令行位置参数少于10个,脚本param1如下# !/bin/bash # 指定...

weixin_39575758的博客 447

无涯教程-Shell Shift参数

无涯教程这章主要了解Shift命令,Shift命令是内置命令。命令以数字为参数。参数向下移动此数字。例如,如果数字为5,则$5变为$1,$6变为$2,依此类推。Shift 示例当参数未知时,通常使用Shift命令。在条件为的while循环中处理参数。只要参数不为零,则此条件成立。每次随着Shift命令执行,参数数量都会减少。/bin/bashthenecho 请输入一个参数。exit 1fidoecho 参数值: $1shiftdone执行脚本进行输出。

无涯教程 484

处理用户输入(shell11)

位置参数变量是标准的数字: $0是程序名, $1是第一个参数, $2是第二个参数,依次类推,直到第九个参数$9。所以,变量$3的值会移到$2中,变量$2的值会移到$1中,而变量$1的值则会被删除(注意,变量$0的值,也就是程序名,不会改变)。用set命令能够做到。然后,该方法会将原始脚本的命令行参数传给getopt命令,之后再将getopt命令的输出传给set命令,用getopt格式化后的命令行参数来替换原始的命令行参数,看起来如下所示。当输入的字符达到预设的字符数时,就自动退出,将输入的数据赋给变量。..

omnibots的博客 716
上一篇: Linux 中shell 脚本if判断多个条件
下一篇: NodePad++一次复制多行粘贴到对应位置
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值