1,

分类: LINUX

getopts命令内置于shell中,可以获取由单个字符所指定的有效命令行参数,单个字符有一个‘ - ’号或‘ + ’号。
简单的说,比如运行命令:
iptables -t nat -A POSTROUTING -p tcp -o eth0 -s 192.168.2.0/24 -j SNAT --to public_ip
它实现了内网ip转换成公网ip访问外网的功能,但是这么多的参数怎么解析的呢,getopts就是实现像这种参数的解析。
所以getopts是一个非常实用的工具,在你编写脚本时,能够很方便的帮助你解析命令行参数,但是它具体是怎么解析的呢,
如脚本提供命令行参数: -s 5 -m 10 -d 2 -p my_shell 
解析时使用 getopts :s:m:h:d:p
这表明对于指定的项 s、m、d、p等如果在每个开关前加入“:”表示 这个开关项需要一个参数。
具体见代码my_shell.sh 它实现了参数:天 时 分 秒 等全部转换成秒的功能如下:

点击(此处)折叠或打开

    SECS=
MINUTES=
HOURS=
DAYS=
PROCESS=
while getopts :s:m:h:d:p TIMED >/dev/null
do
case $TIMED in
s) SECS=$OPTARG
;;
m) ((MINUTES=$OPTARG*))
;;
h) ((HOURS=$OPTARG*))
;;
d) ((DAYS=$OPTARG*))
;;
p) PROCESS=$OPTARG
;;
\?) usage
exit;
;;
esac
done
((TOTALSECS=$SECS+$MINUTES+$HOURS+$DAYS))
echo "total seconds:$TOTALSECS"

此时 运行命令:bash my_shell.sh -s 20 -m 3 -h 5 -d 8 -p my_shell
就可以看到运行命令后解析参数所得到的结果

 
 
2,
echo $*
while getopts ":a:bc" opt
do
        case $opt in
                a ) echo $optarg
                    echo $optind;;
                b ) echo "b $optind";;
                c ) echo "c $optind";;
                ? ) echo "error"
                    exit 1;;
        esac
done
echo $optind
shift $(($optind - 1))
#通过shift $(($optind - 1))的处理,$*中就只保留了除去选项内容(a,b,c )的参数 ,可以在其后进行正常的shell编程处理了。
echo $0
echo $*
 

shell getopts的更多相关文章

  1. shell getopts用法详解

    本文链接:https://blog.csdn.net/u012703795/article/details/46124519 获取UNIX类型的选项: unix有一个优点就是标准UNIX命令在执行时都 ...

  2. shell getopts命令

    由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为: getopts optstring name [args]   ...

  3. shell getopts用法

    eg:sh test.sh -u tom -p 123456: getopts的使用形式:getopts OPTION_STRING VAR: OPTION_STRING:-u,-p这种自定义选项: ...

  4. shell getopts学习

    #!/bin/bash while getopts i:vh name do case $name in i) opt=1 echo $OPTARG;; v) opt=2 echo 2;; h) op ...

  5. shell getopts 用法

    http://www.cnblogs.com/xupeizhi/archive/2013/02/18/2915659.html http://blog.csdn.net/xluren/article/ ...

  6. 【161】BASH相关文章链接

    ---恢复内容开始--- 1. Linux cat命令详解  --<cat>-- 新建文件 file1.txt,随便输入几行文字 cat 'file1.txt' #显示 'file1.tx ...

  7. Linux命令的执行

    为什么在提示符下命令可以被执行呢? 执行命令过程 输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来 shell本身也是一个程序,只不过 ...

  8. 使用getopts处理shell中的输入参数

    在编写shell脚本中,经常要处理一些输入参数,在使用过程中发现getopts更加方便,能够很好的处理用户输入的参数和参数值.   getopts用于处理用户输入参数,举例说明使用方法: while ...

  9. shell命令getopts解析

    getopts是一条获取和处理命令行选项的语句,格式为getopts option_string variable .其中option_string中包含一个有效的单字符选项,若getopts命令在命 ...

随机推荐

  1. char* strcpy( char* dest, const char* src ), int binary_search(int *arr, int key, int n), 可能的实现

    #include <stdio.h> char* stringCopy( char* dest, const char* src ) { size_t i = 0; while (dest ...

  2. Deep Learning 31: 不同版本的keras,对同样的代码,得到不同结果的原因总结

    一.疑问 这几天一直纠结于一个问题: 同样的代码,为什么在keras的0.3.3版本中,拟合得比较好,也没有过拟合,验证集准确率一直高于训练准确率. 但是在换到keras的1.2.0版本中的时候,就过 ...

  3. ie67 display:inline-block 失效解决方法

    先将其转化为块状,在转化为inline,*号为css hcak,代表针对IE67 display: inline-block; *display: block; *display: inline;

  4. UVA11270 Tiling Dominoes —— 插头DP

    题目链接:https://vjudge.net/problem/UVA-11270 题意: 用2*1的骨牌填满n*m大小的棋盘,问有多少种放置方式. 题解: 骨牌类的插头DP. 1.由于只需要记录轮廓 ...

  5. HDU1532 Drainage Ditches —— 最大流(sap算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 Drainage Ditches Time Limit: 2000/1000 MS (Java/ ...

  6. java 简单贪吃蛇

    1. [代码]java 简单程序     跳至 [1] [全屏预览]package com.snake;import java.awt.*;import javax.swing.*;import ja ...

  7. Codeforces-914F Substrings in a String (Bitset求T串中S串出现次数)

    之前有过区域赛,简化版问题: 给定一个小写字符组成的字符串S,(|S|<1e5,下标从1开始),现在有Q种操作,对于每个操作Q(Q<=1e5),输入opt, 如果opt==1,输入x,c, ...

  8. MyBatis学习 之 六、insert操作返回主键

       数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解   其属性如下: parameterType ,入参的全 ...

  9. Android应用开发完全退出程序的通用方法

    在开发一个android应用时,有可能有N个Activity,而在每个Activity里的菜单里有个"退出程序"菜单,这里就要完全退出程序了,所以今天给大家分享的是Android应 ...

  10. MP4V2库与MP4AV库编译

    最近在开发一个将RTP流存储为MP4文件的功能.其中针对MP4文件读写,用到了两个开源的库.其中MP4V2用于数据的读写,MP4AV用于对其中的数据帧进行分析. MP4V2和MP4AV都是开源项目MP ...