zoukankan      html  css  js  c++  java
  • 使用getopts处理Shell脚本参数

    一、下面的代码,可以通过"./getopts.sh -d 5"的方式获取参数:

     1 #!/bin/sh
     2 #
     3 # File:  getopts.sh
     4 #
     5 usage() {
     6 
     7 }
     8 day=7  #default value
     9 if [ $# -lt 1 ]; then
    10     usage
    11     exit 1
    12 else
    13 while getopts ":d:" opt; 
    14    do
    15      case $opt in
    16        d)
    17       day=$OPTARG   #get the value
    18           ;;
    19        ?)
    20       echo "How to use: $0 [-d DAY]" >&2    
    21           exit 1     
    22           ;;
    23           :)
    24       echo "Option -$OPTARG requires an argument." >&2
    25           exit 1     
    26           ;;
    27     esac
    28   done
    29 fi
    30 echo $day
    解释下面的部分:
    1 while getopts ":d:" opt; do
    

    第一个冒号表示忽略错误(例如出现了不认识的参数),并在脚本中通过::)来处理这样的错误;字母d则表示,接受参数-d;d后面的冒号表示 参数d接收值,即“-d 7”这样的形式;(这里opt变量,可以在while循环中引用当前找到的参数,试试输出$opt试试)

    如果是要有很多参数,那么写法可能是:

    1 while getopts ":ixarm:uneh" opt; do
    二、
     1 #! /bin/bash
     2 # 测试 getopts 的用法
     3 # 及与位置参数的关系
     4 usage()
     5 {
     6         echo 'basename $0' [-x] [-y] args
     7         exit 0
     8 }
     9 while getopts "xy:" options;do
    10         case $options in
    11                 x)      echo "you enter -x as an opton";;
    12                 y)      echo "you ecter -y as an optin"
    13                         echo "\$OPTARG is $OPTARG";;
    14                 \?)     usage;;
    15         esac
    16 done
    17 [[ -z $1 ]] && usage
    18 index=1
    19 for agrs in "$@";do
    20         echo \$$index: $agrs
    21         (( index ++ ))
    22 done
  • 相关阅读:
    2-括号配对问题
    14-会场安排问题
    106-背包问题
    12-喷水装置
    HDU-5170
    HDU-1002
    贪吃蛇
    frame与bounds的区别
    MAC下Android的Eclipse开发环境的搭建
    有些人脸上太多的笑是因为他们心中有太多的泪
  • 原文地址:https://www.cnblogs.com/wowchky/p/2729085.html
Copyright © 2011-2022 走看看