【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
do
    case "$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"
        ;;
    esac
    echo "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.html

function 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 $@
do
  echo $arg
  ParaAnalyse $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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值