python、go、shell、c、命令行参数解析

用的半生不熟的Linux环境,看看几种语言的命令行参数解析~


1. python

python demo.py -u tom -g users -o output.log --time-out 300

使用getopt.getopt()模块

import getopt

import sys

try:

    args, opts = getopt.getopt(sys.argv[0], "u:g:o:", "time_out=")

except Exception as ex:

    print(str(ex))

for  key,value in opts:

    if key == "-u":

          username = value

    elif key == "-g":

          group = value

    elif key == "-o":

          log_file == value

    elif key == "--time-out":

          time_out = value

    else:

          print("Unrecognized parameter %s" % key)

非正式代码,忽略语法错误。。。


2. golang

使用flag包

package main

 import (

   "flag"

    "fmt"

   )


   func main(){

        var src string

        var memo string

        var level int

        //定义flag参数

        flag.StringVar(&src, "src", "", "source file")

        flag.IntVar(&level, "level", 3, "debug level")

        flag.StringVar(&memo, "memo", "", "the memory")

        //解析

        flag.Parse()

       //显示帮助信息

        flag.Usage()

         fmt.Printf("src=%s, level=%d, memory=%s\n", src, level, memo)

}

go run args.go -level 1 -memo 256 -src source

-level int

    debug level

  -memo string

    the memoey

  -src string

    source file

src=source, level=1, memory=256


3. shell

sh hello.sh a b c d e f

参数解析:

    ${0} --> hello.sh

    ${1} --> a

    ${2} --> c

    ${3} --> d

    ${4} --> e

    ${5} --> f

shell脚本的参数解析,直接获取参数位置使用即可...

notice: 获取参数位置时请加上{}  当参数的数量到2位数时, $10 ---> $1 拼接 0,这样就会获取错误的参数啦!!!


4. C

第一种:

main(int argc,char *argv[ ])

1.argc为整数

2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[][]   ,argv是一个指针数组)

 注:main()括号内是固定的写法。

 #include <stdio.h>

  int main(int argc, char **args) {

      int i = 0;

       printf("%d\n", argc);

      for (i = 0; i < argc; ++i) {

           printf("%s\n", args[i]);

       }

       return 0;

 }

执行:./test 1 2 3

4

./test

1

2

3

第二种:

头文件 #include <unistd.h>

定义函数:int getopt(int argc, char * const argv[], const char * optstring);

函数说明:getopt()用来分析命令行参数。

1、参数argc 和argv 是由main()传递的参数个数和内容。

2、参数optstring 则代表欲处理的选项字符串。

此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。

如果选项字符串里的字母后接着冒号":",则表示还有相关的参数,全域变量optarg 即会指向此额外参数。

如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt 设为"?"字符, 如果不希望getopt()印出错信息,则只要将全域变量opterr 设为0 即可。

返回值:如果找到符合的参数则返回此参数字母, 如果参数不包含在参数optstring 的选项字母则返回"?"字符,分析结束则返回-1.

范例

#include <stdio.h>

#include <unistd.h>

int main(int argc, char **argv)

{

   int ch;

   opterr = 0;

   while((ch = getopt(argc, argv, "a:bcde")) != -1)

   switch(ch)

   {

      case 'a':

         printf("option a:'%s'\n", optarg);  break;

      case 'b':

         printf("option b :b\n");  break;

      default:

         printf("other option :%c\n", ch);

   }

   printf("optopt +%c\n", optopt);

}

执行:

$. /getopt -b

option b:b

$. /getopt -c

other option:c

$. /getopt -a

other option :?

$. /getopt -a12345

option a:'12345'


哈哈:平常工作只用python,shell,go和C的命令行参数解析纯属好奇,也了解下~~~

推荐阅读更多精彩内容