C getopt 及 shell getopts
来源:互联网 发布:中国工业数据库 编辑:程序博客网 时间:2024/05/29 00:30
C
/* * File: getopt.c * Author: Vicky * * Created on 2012年2月3日, 上午10:34 */#include <stdio.h>#include <stdlib.h>#ifdef _WIN32extern int getopt(int, char * const *, const char *);extern char *optarg;#define snprintf _snprintf#else#include <unistd.h>#endif/* * */int main(int argc, char **argv) { int ch; while ((ch = getopt(argc, argv, "n:p:")) != EOF) { switch (ch) { case 'n':/* if (optarg[strlen(optarg) - 1] != '/' && optarg[strlen(optarg) - 1] != '\\') return 1;*/ puts(optarg); break; case 'p': puts(optarg); break; case '?': puts("n name | p pswd !"); break; default: puts("no command or unknown!"); return 1; } } return (EXIT_SUCCESS);}
注意在windows 下需要:getopt.c
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1996, 2011 Oracle and/or its affiliates. All rights reserved. *//* * Copyright (c) 1987, 1993, 1994 *The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id$ *//* * Avoid inclusion of internal header files as this * file is used by example code. * * Unconditional inclusion of stdio and string are * OK in this file. It will work on all platforms * for which this file is used */extern char *__db_rpath(const char *);#include <stdio.h>#include <string.h>int__db_getopt_reset;/* global reset for VxWorks. */intopterr = 1,/* if error message should be printed */optind = 1,/* index into parent argv vector */optopt,/* character checked for validity */optreset;/* reset getopt */char*optarg;/* argument associated with option */#undefBADCH#defineBADCH(int)'?'#undefBADARG#defineBADARG(int)':'#undefEMSG#defineEMSG""/* * getopt -- *Parse argc/argv argument vector. * * PUBLIC: #ifndef HAVE_GETOPT * PUBLIC: int getopt __P((int, char * const *, const char *)); * PUBLIC: #endif */intgetopt(nargc, nargv, ostr)int nargc;char * const *nargv;const char *ostr;{static char *progname;static char *place = EMSG;/* option letter processing */char *oli;/* option letter list index *//* * VxWorks needs to be able to repeatedly call getopt from multiple * programs within its global name space. */if (__db_getopt_reset) {__db_getopt_reset = 0;opterr = optind = 1;optopt = optreset = 0;optarg = NULL;progname = NULL;place = EMSG;}if (!progname) {if ((progname = __db_rpath(*nargv)) == NULL)progname = *nargv;else++progname;}if (optreset || !*place) {/* update scanning pointer */optreset = 0;if (optind >= nargc || *(place = nargv[optind]) != '-') {place = EMSG;return (EOF);}if (place[1] && *++place == '-') {/* found "--" */++optind;place = EMSG;return (EOF);}}/* option letter okay? */if ((optopt = (int)*place++) == (int)':' || !(oli = strchr(ostr, optopt))) {/* * if the user didn't specify '-' as an option, * assume it means EOF. */if (optopt == (int)'-')return (EOF);if (!*place)++optind;if (opterr && *ostr != ':')(void)fprintf(stderr, "%s: illegal option -- %c\n", progname, optopt);return (BADCH);}if (*++oli != ':') {/* don't need argument */optarg = NULL;if (!*place)++optind;}else {/* need an argument */if (*place)/* no white space */optarg = place;else if (nargc <= ++optind) {/* no arg */place = EMSG;if (*ostr == ':')return (BADARG);if (opterr)(void)fprintf(stderr, "%s: option requires an argument -- %c\n", progname, optopt);return (BADCH);}else/* white space */optarg = nargv[optind];place = EMSG;++optind;}return (optopt);/* dump back option letter */}
shell
#!/bin/bash# # File: getopts.bash# Author: Vicky.H## Created on 2012-2-3, 10:52:12## ./getopts.bash -s 60 -m 1 -h 1#SECS=0MINTES=0HOURS=0DAYS=0RPOCESS= # NULLwhile getopts :s:m:h:d:p TIMED 2>/dev/nulldo case $TIMED in s) SECS=$OPTARG ;; m) (( MINTES = $OPTARG * 60 )) ;; h) (( HOURS = $OPTARG * 3600 )) ;; d) (( DAYS = $OPTARG * 86400 )) ;; p) RPOCESS = $OPTARG ;; \?) usage ;; esacdone(( TOTAL_SECONDS = SECS + MINTES + HOURS + DAYS ))echo $TOTAL_SECONDS
- C getopt 及 shell getopts
- Shell的getopts和C语言的getopt对比
- shell中的getopt与getopts
- Shell 处理命令行参数 getopts 和 getopt
- Shell中使用getopt、getopts命令
- getopt getopts
- shell 脚本中getopt 和 getopts 的区别
- shell中getopt/getopts的使用 getarg和getind意义
- shell脚本选项参数处理学习getopts|getopt
- getopts/getopt(转载)
- shell getopts
- shell-----getopts
- shell--getopts
- getopts 和 getopt 用法简记
- linux bash shell 中getopts 命令 和 python 中 getopt 函数的比较总结
- shell's getopts
- shell之getopts
- Linux shell getopts 笔记
- JS的Call方法实现的继承
- 查找算法总结
- UIButton上使用UIEdgeInsetsMaketitle跟图片对齐
- Ubuntu 11.10 X64 Android环境搭建时遇到的问题总结
- event.srcElement的用法(转载)
- C getopt 及 shell getopts
- 提取Launcher中的WorkSapce,可以左右滑动切换屏幕页面的类
- VB工程--百例54--鼠标跟随
- 移动端js+html5
- Fuzzing tools 下载
- java 原码 反码 和补码
- 跨表查询数据的方法
- Oracle中生成GUID类型
- J2SE共享软件JFlash的更新日志(2012-02-01)