【shell】shell脚本读取给定参数|参数个数
目录
实例脚本
脚本
使用方法
数组获取参数
字符截取方法
解决类型
汇总
实例脚本
参数 $1, $2,..., $N代表了命令行的第1、2……N个参数,$0代表了本脚本的名字,$#代码参数个数,@代表参数列表
for arg in $@
推荐文章:http://t.csdn.cn/Cov0A
方法一:
(原文链接:https://blog.csdn.net/weixin_43919932/article/details/126201494)
bash内置的getopts工具了,用于解析shell脚本中的参数。
格式如下:
# 代码格式参考的这篇文章:https://cloud.tencent.com/developer/article/1629932
#!/usr/bin/bash
while getopts ":a:b:h" opt_arg
docase "$opt_arg" in"a")echo "参数 -a,值 $OPTARG";;"b")echo "参数 -b ,值 $OPTARG";;"h")echo "参数 -h,无值";;":")echo "-$OPTARG 选项需要指定其value值";;"?")echo "不支持 -$OPTARG 选项";;*)echo "Unknown error while processing options";;esacecho "option index is $OPTIND"
done
参数列表':a:b:c:hk::
解释:后面有“:”号的表示这个参数 需要参数值,没有“:”的表示不需要参数值。
OPTARG表示选项值,OPTIND表示参数索引位置。
输入命令 cmd -a 1。 此时命中a选项,那么OPTIND为3,表示当前在第三个参数位置。
命令cmd -a 1 -b 2 。同理,当命中a之后,命中b时,OPTIND为5,表示当前在第五个参数位置。
a后面有:,表示该选项需要参数,h后面没有:,表示不需要参数。如果是可选参数,跟 “::” 。
注意:
- 这里第一个
:
表示,使用抑制错误报告模式。- 该模式在识别到无效选项时,会命中
?
,且当前选项字符会保存在OPTARG中。 - 在识别到需要参数的选项,没有携带参数时,会命中
:
,且当前选项字符会保存在OPTARG中。
- 该模式在识别到无效选项时,会命中
逻辑参数:参数列表【abc:d:】
- copy -x - 命中“?”, OPTARG被设置为x
- copy -c # 没有指定c的参数- 命中 “:”,OPTARG被设置为c
方法二
脚本
myshell.sh
-b:|-B:) 表示给的参数形式是 -b:xxx或者-B:xxx
-b=|-B=) 表示给的参数形式是 -b=xxx或者-B=xxx
#!/bin/sh
#shell 截取字符知识:https://www.cnblogs.com/cangqinglang/p/11952838.htmlfunction ParaAnalyse()
{
if [ -z "$1" ]
then
echo no para to analyse
else
para=$1
local paraType=${para:O:3} #从O开始,截取3个字符?
case $paraType in
-b:|-B:) boardType=${para:3};; #从左边第3个字符开始,一直到结束。
-s:|-S:) BuildType=${para:3};;
-f:|-F:) filter="-f ${para:3} $filter" ;;
-t:|-T:) specCaseTag="${para :3}";;
-e:|-E:) excludeTag="${excludeTag} -e ${para:3}";;
-c:|-C:) IP=${para:3};;
-m:|-M:) macro2add=${para:3};;
-p:|-P:) productType=${para:3};;
-v:|-V:) ftVersion=${para:3};; coy) BUILD_GCOV=1;;
-h|-H) #help
echo
echo run_eFT.sh [-b :BPQ] [-s:aU/c/cc/build/runj[v:3_O/qcelIJ
echo [-f:”fixtu re :case”j [-t :“tag”J [-p : lf/hl][-h] echo Options:
echo -b: board type, BPQ, default is BPQ. echo -s: “\“\ means just create project\; \“ccV’create and build project; \“run\” just run the cases;”
echo \“all\” for create, build and test, it isthe default value”.
echo -f: used to filter cases, with fixture and case name, all for default.
echo -t: used to filter cases, with tag name,all for default.
echo -p: -p:hl/lf/subl g, default If
echo -v: use -v:3_0 to specify build spa ft 3.0or qceli,default is 2.0, you should also use -v:3_O to run 3.0 te stcase
echo view the help
echo exit 0
;;
*)
esac
fi
}function ParaLoop()
{
for arg in $@
doecho $argParaAnalyse $arg
done
}function BuildProject()
{ParaLoop $@echo "boardType is" ${boardType}
echo "BuildType is" ${BuildType}
echo "filter is" ${filter}
echo "specCaseTag is" ${specCaseTag}
echo "excludeTag is" ${excludeTag}}BuildProject $@
使用方法
./myshell.sh -b:b_agr -S:s_arg -E:e_arg ……
数组获取参数
数组:Shell 数组 | 菜鸟教程
后来想出用数组方式,通过for循环,然后索引减1的方式获取。shell数组索引也是从0开始。
[root@machine1 ~]# cat a.sh
#!/bin/bash
total=$#
array=($*)
for ((i=1;i<=$total;i++));
do
echo "传递参数位:"$i
echo "对应值:"${array[$i-1]}
done
[root@machine1 ~]# sh a.sh a b c d e
传递参数位:1
对应值:a
传递参数位:2
对应值:b
传递参数位:3
对应值:c
传递参数位:4
对应值:d
传递参数位:5
对应值:e
这样就实现了需求。
linux shell 获取输入参数个数,如何取得传入shell脚本的第i个值?要求i循环到几就取第几个参数..._阿放Francis的博客-CSDN博客
结果放入数组中
字符截取方法
原文:https://www.jb51.net/article/56563.htm
Shell字符串截取(非常详细) - 苍青浪 - 博客园
解决类型
假设有变量 var=http://www.aaa.com/123.htm.
1. # 号截取,删除左边字符,保留右边字符。
1 |
|
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
2. ## 号截取,删除左边字符,保留右边字符。
1 |
|
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
3. %号截取,删除右边字符,保留左边字符
1 |
|
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
4. %% 号截取,删除右边字符,保留左边字符
1 |
|
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5. 从左边第几个字符开始,及字符的个数
1 |
|
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
6. 从左边第几个字符开始,一直到结束。
1 |
|
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
7. 从右边第几个字符开始,及字符的个数
1 |
|
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
8. 从右边第几个字符开始,一直到结束。
1 |
|
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
汇总
最后,我们对以上 8 种格式做一个汇总,请看下表:
格式 | 说明 |
---|---|
${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
${string: start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
${string: 0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
${string#*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string##*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string%chars*} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
${string%%chars*} |
从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
shell 传递参数和数组
shell 传递参数和数组 - 程序员大本营
在学习了shell脚本语言的变量后我们继续学习shell的参数传递和数组,shell脚本的参数传递和我们的c/c++参数传递一样,紧跟着可执行文件后面空格后输入即可,但是程序语言是怎么写的呢?
下面我们来看看shell脚本传递参数的语言编写和使用:
1、参数传递:
执行结果:
这里说明一下,执行shell脚本的两种方法会导致输出的$0不同,意思是一样的!
2、数组:
执行结果:
我把我在程序里遇到的所有小细节都记录在了程序中,你需要仔细看图片!!!
学了这么多是不是觉得脚本语言比较简单,但是这只是基础的,复杂的我们目前还没有设计到^*^ 0.0
【shell】shell脚本读取给定参数|参数个数相关推荐
- linux shell运行脚本命令行参数,shell脚本命令行参数简介
之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互. bash shell提供了命令行参数添加在命令后面的数据值).命令行选项修改命令行为的单字符值)和直接读取键盘输入. 1.命 ...
- linux shell语法检查或者查看shell脚本执行过程的参数介绍及两种使用方法
shell语法检查或者查看shell脚本执行过程的参数介绍及两种使用方法 一.常用参数概述: set -x 与 set +x 在liunx脚本中可用set -x就可有详细的日志输出,省的老是要echo ...
- Shell入门(五)之参数
一.Shell 传递参数 在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,0为执行文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推 ...
- shell脚本读取文件夹内文件名称
shell脚本读取文件夹内文件名称代码如下: 1.配置文件: readFilePath=/wocloud/soft/tomcat/selfYearAppraiseTomcat/selfYearAppr ...
- Shell脚本读取mysql结果集各数据项的值
在linux下用shell脚本读取mysql结果集各数据项的值,按行读取sql结果,将sql执行结果读取到shell变量中,然就可进行处理. HOSTNAME="172.16.xx.xx&q ...
- 终于要把魔爪伸向shell编程了_命令行参数数量预检测——莫韵乐的小脚印笔记
终于要把魔爪伸向shell编程了_命令行参数数量预检测 有时候我们在时使用shell的时候都需要传入一些参数,但是有时候我们传入的命令行参数数量不正确就很容易发生错误,因此我们需要在需要传入参数的sh ...
- Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例
一.简单版 参考stackoverflow的例子,改了一个出来: while IFS='= ' read var val do if [[ $var == \[*] ]] then section=$ ...
- 常见Shell编程脚本
常见Shell编程脚本 一.Linux运维监控相关 1.创建 Linux 系统账户及密码 #!/bin/bash # 通过位置变量创建 Linux 系统账户及密码 #$1 是执行脚本的第一个参数,$2 ...
- linux Shell(脚本)编程入门实例讲解详解
linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...
最新文章
- 论文笔记之:Deep Attributes Driven Multi-Camera Person Re-identification
- LSTM:《Understanding LSTM Networks》的翻译并解读
- android连接usb后默认app,android – 记住USB连接,但不要启动应用程序
- C. Number of Pairs
- 现代软件工程讲义 目录
- uva 538Balancing Bank Accounts(构造)
- Java流程控制02 选择结构 if结构 switch结构
- JavaScript 之 JS重载
- SpringBoot实战(八):集成Swagger
- 动易SiteFactory数据采集模块
- Android 如何自定义EditText 下划线?
- python数据可视化基础
- MyEclipse搭建SSH(Struts2+Spring2+Hibernate3)框架项目教程
- lh服最新服务器,LH服12月1日开发更新 着重提升服务器稳定性与职业bug修复
- MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。...
- 基于SpringBoot实现二手交易商城
- 提取swf素材_|SWF素材提取工具(SWF Decompiler Magic)下载v5.2.2.20 - 欧普软件下载
- Camera service服务启动流程
- Scrapy 框架爬取豆瓣电影的信息(包括图片)和电影评论-2
- Android 逆向笔记 —— 说说 Dalvik 及其指令集
热门文章
- 计算机二级证书北京联合大学,北京联合大学是几本 北京联合大学是一本还是二本...
- 高频电路板设计布线技巧十规则
- 虚拟化VMware vSphere 6.7入门精讲-郭小冬-专题视频课程
- cuda编程入门:使用cuda实现矩阵加法
- 【Linux】欧拉操作系统官网
- 【Java程序员来写一个简单的HTML前端——映纷创意官网】
- 如何用光盘映像文件重装服务器系统,韩博士教你如何使用光盘重装系统
- c++强引用与弱引用
- 上海大学电影学院计算机宿舍,上海这座电影学院,藏在一所211大学里,影响力堪比北电上戏...
- 学校邮箱怎么注册?163邮箱注册申请后有什么优点么?