shell python -c_python, shell, C/C++ 从命令行获得参数

前言:

在给nagios开发监控插件的时候,不论是用哪种语言写插件,最好能从命令行获得参数(警告值和报警值:-w warning_value -c critical_value),而不是在插件里把这两个值写进去,通常情况下会随着环境改变而更改警告和报警值。

python: 通过sys模块实现

51110684_1.gif

官方文档:

sys.argv

The list of command line arguments passed to a Python script. argv[0] is the script name (it is operating system dependent whether this is a full pathname or not). If the command was executed using the -c command line option to the interpreter, argv[0] is set to the string '-c'. If no script name was passed to the Python interpreter, argv[0]is the empty string.

sys.argv命令列表,第一个元素argv[0]是脚本名,argv[1]表示第1个参数,argv[2]表示第2个参数,以此类推。

51110684_1.gif

举个简单的例子:

51110684_1.gif

#!/usr/bin/env python

importsysdefPrintArgv(): # 如果需要list中的index,可以用内置的enumerate函数实现;print('all para(s):', sys.argv)print('script name:', sys.argv[0])if sys.argv[1:]:

index= 1

for para in sys.argv[1:]:print('para', index, ':', para)

index+= 1

import sys

def PrintArgv():

print('all para(s):', sys.argv)

print('script name:', sys.argv[0])

argv_list = list(enumerate(sys.argv))

if sys.argv[1:]:

for para in argv_list[1:]:

print('para', para[0], ':', para[1])

PrintArgv()

51110684_1.gif

51110684_1.gif

>python test.py

all para(s):['test.py']script name: test.py

>python test.py 'name'913all para(s):['test.py', "'name'", '913']script name: test.py

para1: 'name'

para2 : 913>python test.py 'name'913 [1,2]all para(s):['test.py', "'name'", '913', '[1,2]']

script name: test.py

para1: 'name'

para2 : 913para3 : [1,2]

51110684_1.gif

可以看出,参数默认为字符串类型,同input一样,需要转换为int类型的传入参数时需要注意。

shell实现:$变量

shell脚本中可以通过变量的方式调用命令传入的参数,$0为脚本名,第一个参数$1,第二个参数$2,以此类推。特别的,$#表示参数个数,$@表示所有参数。

简单例子:

51110684_1.gif

# --para.sh--

#!/bin/bashecho "all para(s):"$@echo "script name:" $0

for index in `seq 1$#`do

echo "para ${index}:" $1

shift

done

51110684_1.gif

51110684_1.gif

[root@oam shell]# ./para.shall para(s):

script name: para.sh[root@oam shell]# ./para.sh hello lei 2014all para(s): hello lei2014script name: para.shpara1: hello

para2: lei

para3: 2014

51110684_1.gif

C/C++实现

C和C++都允许从命令行给main函数传入参数:int main(int argc, char*argv[]),argc表示有几个参数将传给main函数,参数以字符串数组argv[]的形式传递。同样argv[0]表示二进制文件名,argv[1]表示第一个参数,argv[2]表示第二个参数,依此类推。

简单的例子:

51110684_1.gif

#include

using namespacestd;int main(int argc, char *argv[])

{

cout<< "file name:" << argv[0] <

cout<< "para num:" << argc <

{

cout<< "para" << i << ":"

<< argv[i] <

}return 0;

}

51110684_1.gif

51110684_1.gif

[root@oam c_bat]# ./a.outfile name: ./a.out

para num:1[root@oam c_bat]# ./a.out hello night 913

file name: ./a.out

para num:4para1: hello

para2: night

para3: 913

51110684_1.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值