方式一:$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