目录

实例脚本

脚本

使用方法

数组获取参数

字符截取方法

解决类型

汇总


实例脚本

参数 $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

echo ${var#*//}

其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm

2. ## 号截取,删除左边字符,保留右边字符。

1

echo ${var##*/}

##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/

结果是 123.htm

3. %号截取,删除右边字符,保留左边字符

1

echo ${var%/*}

%/* 表示从右边开始,删除第一个 / 号及右边的字符

结果是:http://www.aaa.com

4. %% 号截取,删除右边字符,保留左边字符

1

echo ${var%%/*}

%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:

5. 从左边第几个字符开始,及字符的个数

1

echo ${var:0:5}

其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:

6. 从左边第几个字符开始,一直到结束。

1

echo ${var:7}

其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm

7. 从右边第几个字符开始,及字符的个数

1

echo ${var:0-7:3}

其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123

8. 从右边第几个字符开始,一直到结束。

1

echo ${var:0-7}

表示从右边第七个字符开始,一直到结束。
结果是: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脚本读取给定参数|参数个数相关推荐

  1. linux shell运行脚本命令行参数,shell脚本命令行参数简介

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

  2. linux shell语法检查或者查看shell脚本执行过程的参数介绍及两种使用方法

    shell语法检查或者查看shell脚本执行过程的参数介绍及两种使用方法 一.常用参数概述: set -x 与 set +x 在liunx脚本中可用set -x就可有详细的日志输出,省的老是要echo ...

  3. Shell入门(五)之参数

    一.Shell 传递参数 在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,0为执行文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推 ...

  4. shell脚本读取文件夹内文件名称

    shell脚本读取文件夹内文件名称代码如下: 1.配置文件: readFilePath=/wocloud/soft/tomcat/selfYearAppraiseTomcat/selfYearAppr ...

  5. Shell脚本读取mysql结果集各数据项的值

    在linux下用shell脚本读取mysql结果集各数据项的值,按行读取sql结果,将sql执行结果读取到shell变量中,然就可进行处理. HOSTNAME="172.16.xx.xx&q ...

  6. 终于要把魔爪伸向shell编程了_命令行参数数量预检测——莫韵乐的小脚印笔记

    终于要把魔爪伸向shell编程了_命令行参数数量预检测 有时候我们在时使用shell的时候都需要传入一些参数,但是有时候我们传入的命令行参数数量不正确就很容易发生错误,因此我们需要在需要传入参数的sh ...

  7. Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例

    一.简单版 参考stackoverflow的例子,改了一个出来: while IFS='= ' read var val do if [[ $var == \[*] ]] then section=$ ...

  8. 常见Shell编程脚本

    常见Shell编程脚本 一.Linux运维监控相关 1.创建 Linux 系统账户及密码 #!/bin/bash # 通过位置变量创建 Linux 系统账户及密码 #$1 是执行脚本的第一个参数,$2 ...

  9. linux Shell(脚本)编程入门实例讲解详解

    linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...

最新文章

  1. 论文笔记之:Deep Attributes Driven Multi-Camera Person Re-identification
  2. LSTM:《Understanding LSTM Networks》的翻译并解读
  3. android连接usb后默认app,android – 记住USB连接,但不要启动应用程序
  4. C. Number of Pairs
  5. 现代软件工程讲义 目录
  6. uva 538Balancing Bank Accounts(构造)
  7. Java流程控制02 选择结构 if结构 switch结构
  8. JavaScript 之 JS重载
  9. SpringBoot实战(八):集成Swagger
  10. 动易SiteFactory数据采集模块
  11. Android 如何自定义EditText 下划线?
  12. python数据可视化基础
  13. MyEclipse搭建SSH(Struts2+Spring2+Hibernate3)框架项目教程
  14. lh服最新服务器,LH服12月1日开发更新 着重提升服务器稳定性与职业bug修复
  15. MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。...
  16. 基于SpringBoot实现二手交易商城
  17. 提取swf素材_|SWF素材提取工具(SWF Decompiler Magic)下载v5.2.2.20 - 欧普软件下载
  18. Camera service服务启动流程
  19. Scrapy 框架爬取豆瓣电影的信息(包括图片)和电影评论-2
  20. Android 逆向笔记 —— 说说 Dalvik 及其指令集

热门文章

  1. 计算机二级证书北京联合大学,北京联合大学是几本 北京联合大学是一本还是二本...
  2. 高频电路板设计布线技巧十规则
  3. 虚拟化VMware vSphere 6.7入门精讲-郭小冬-专题视频课程
  4. cuda编程入门:使用cuda实现矩阵加法
  5. 【Linux】欧拉操作系统官网
  6. 【Java程序员来写一个简单的HTML前端——映纷创意官网】
  7. 如何用光盘映像文件重装服务器系统,韩博士教你如何使用光盘重装系统
  8. c++强引用与弱引用
  9. 上海大学电影学院计算机宿舍,上海这座电影学院,藏在一所211大学里,影响力堪比北电上戏...
  10. 学校邮箱怎么注册?163邮箱注册申请后有什么优点么?