【shell】shell脚本读取给定参数|参数个数

目录

实例脚本

脚本

使用方法

数组获取参数

字符截取方法

解决类型

汇总


实例脚本

参数 $1, $2,..., $N代表了命令行的第1、2……N个参数,$0代表了本脚本的名字,$#代码参数个数,@代表参数列表

for arg in $@

脚本

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

posted on 2022-10-04 01:24  bdy  阅读(72)  评论(0编辑  收藏  举报

导航