添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

方式一:$0,$1,$2..

采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过10个参数的情况。

1.1 示例:新建一个test.sh的文件

#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"

在shell中执行脚本,结果如下

$ ./test.sh 1 2
#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2

1.2 下面是参数超过10个的情况,在test.sh文件写入

#!/bin/bash
echo "脚本名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "第三个参数$3"
echo "第四个参数$4"
echo "第十个参数$10"
echo "第十个参数${10}"

在shell中执行脚本,结果如下

$ ./test.sh a b c d e f g h i j
#shell中将会输出:
脚本名./test.sh
第一个参数a
第二个参数b
第三个参数c
第四个参数d
第五个参数e
第六个参数f
第七个参数g
第八个参数h
第九个参数i
第十个参数a0
第十个参数j

可以看到${10}正确读取到了第十个参数,而$10被分成$1读取到第一个参数a然后拼接字符串0,于是输出a0。

优点:获取参数更容易,执行脚本时需要的输入少

缺点:必须按照顺序输入参数,如果中间漏写则参数对应就会错误

方式二:getopts

语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
option:表示为某个脚本可以使用的选项
":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中

2.1 示例:同样新建一个test.sh文件

while getopts ":a:b:c:" opt
    case $opt in
        echo "参数a的值$OPTARG"
        echo "参数b的值$OPTARG"
        echo "参数c的值$OPTARG"
        echo "未知参数"
        exit 1;;

用一个while循环加case分支获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个?的分支。

在shell中执行脚本,结果如下

$ ./test.sh -a 1 -b 2 -c 3
#在shell中的输出
参数a的值1
参数b的值2
参数c的值3
$ ./test.sh -a 1 -c 3
#在shell中的输出
参数a的值1
参数c的值3
$ ./test.sh -a 1 -c 3 -d 4
#在shell中的输出
参数a的值1
参数c的值3

优点:由于使用了-a加参数值的方式进行一一匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植

缺点:脚本执行时参数需要的输入会增多

总结:推荐使用getopts的方式进行参数传递

各种刚入门,可能会有纰漏,希望大家能谅解,并提出宝贵的意见。

我们知道,在Shell接收传入的参数两种方式。一种是通过脚本进行参数传递,另外一种是通过read来接收传入的参数。通过脚本来传递参数的简单示例如下: # 通过脚本来传递,这里$0指脚本名,$1为第一个参数,$2为第二个参数 [root@host ~]# ./script.sh 1 2 Total = 3 [root@host ~]# vim script.sh #!/bin/bash function add() { total=$(expr $1 + $2) echo -e Total = $total add $1 $2 再来看通过read来接收传入的参数,先看rea 平常在写shell脚本都是用$1,$2….这种方式来接收参数,然而这种接收参数方式不但容易忘记且不易于理解和维护。Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采用参数名和参数值这样的方式来获取参数值呢?而不是通过$1,$2这种方式进行获取。下面的例子定义了短参数名和长参数两种获取参数值的方式。其实是根据getopt提供的特性进行整理而来。 #!/bin/sh show_usage=args: [-l , -r , -b , -w] [–local-repository=, –repository-url=, –backup-dir= 平常在写shell脚本都是用$1,$2…这种方式来接收参数,然而这种接收参数方式不但容易忘记且不易于理解和维护。而且在调用该shell脚本传递参数时容易产出错误。 Linux常用的命令都可指定参数名和参数值,我们怎样才能给自己的shell脚本也采用参数名和参数值这样的方式来获取参数值呢?下面的例子定义了短参数名和长参数两种获取参数值的方式。其实是根据getopt提供的特性进行整理而来。 #!/bin/sh show_usage=args: [-l , -r , -b , -w]\ [--local-reposi 方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}….才能获取到参数,但是一般很少会超过10个参数的情况。 1.1 示例:新建一个test.sh文件 #!/bin/bash echo 脚本$0 echo 第一个参数$1 echo 第二个参数$2 在shell执行脚本,结果如下 $ ./test.sh 1 2 #shell将会输出: 脚本./test.sh 第一个参数1 第二个参数2 1.2 下面是参 平常在写shell脚本都是用$1,$2…这种方式来接收参数,然而这种接收参数方式不但容易忘记且不易于理解和维护。Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采用参数名和参数值这样的方式来获取参数值呢?而不是通过$1,$2这种方式进行获取。下面的例子定义了短参数名和长参数两种获取参数值的方式。其实是根据getopt提供的特性进行整理而来。 #!/bin/bash while getopts i:o:p:s:t: OPT; do case ${OPT} in i) in_file=${OPTARG} o) out_dir=${O 我们可以在执行 Shell 脚本时,向脚本传递参数脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个参数,并分别输出,其 $0 为执行的文件名: #!/bin/bash echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; 说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总结一下Shell函数的调用方法。 一、Shell函数的定义 为了方便程序和管理和模块化并减少代码的重复,函数的确是一个好东西。而Shell函数的定义有两种方法,如下: 代码如下: function fname()     statements; 代码如下: fname()     statements; 注意,()内是没有参数的,它并不像C语言那样,在()里可以有参数 对于许多脚本都希望有多个参数的输入,对于shell这种脚本更是不例外,一般程序的起始函数(main)都会有一个args选项代表着输入的参数项,那么解析这些参数项目就是主要的问题,这里有两种解析方法解析脚本输入的参数: 一个是通过逻辑遍历所有输入参数(主要利用’shift’函数或者shell对数组的处理) 一个是利用系统自带的函数(getopt)配合shift进行格式化解析(不一定所有系统都,需要检测一下) 使用shift解析脚本参数输入 在shell脚本,命令$后加一些特殊的标记可以取脚本的传 shell脚本的变量及变量传参 1、变量的定义 变量本质上就是一片内存区域的地址即寻址符号的别名,当我们运行shell脚本时命令无法操作一直变化的目标,所以需要引入变量来解决此问题,即用一串固定的字符来表示不固定的目标。 2、shell脚本变量的定义方法 在定义变量时,变量名称可包含的字符有字母、下划线_和数字,变量名称不能以数字开头,一般在定义变量时我们建议变量名称短全用大写字符 变量名称长用_区分子类 WESTOS Westos_Linux westoS_Linux export a= 今天是Python专题第27篇文章,我们来聊聊Python当的命令行参数工具argparse。 命令行参数工具是我们非常常用的工具,比如当我们做实验希望调节参数的时候,如果参数都是通过硬编码写在代码当的话,我们每次修改参数都需要修改对应的代码和逻辑显然这不太方便。比较好的办法就是把必要的参数设置成通过命令行传入的形式,这样我们只需要在运行的时候修改参数就可以了。 sys.argv 解析命令行传入参数最简单的办法就是通过sys.argv,sys.argv可以获取到我们通过命令行传入的参数。 import