`

linux shell getopts

 
阅读更多
#getopts
ALL=false
HELP=false
FILE=false
VERBOSE=false
while getopts ahfvc: OPTION   #将ahfvc依次传给OPTION c后面的:表示-c时需传入参数
do
  case ${OPTION} in
    a)
      ALL=true
      echo "ALL IS ${ALL}"
      ;;
    h)
      HELP=true
      echo "HELP IS ${HELP}"
      ;;
    f)
      FILE=true
      echo "FILE IS ${FILE}"
      ;;
    v)
      VERBOS=false
      echo "VERBOSE IS ${VERBOSE}"
      ;;
    c)
      c=${OPTARG}
      echo "c value is $c"
      ;;
    \?)
      echo "`basename $0` -[a h f v] -[c value] file"
      ;;
    esac
done

参考
http://blog.sina.com.cn/s/blog_6fd335bb0100qsw2.html
while getopts ":a:bc" opt  #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数
getopts 有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效的选项,如果字符后面带有“:”,表示这个字符有自己的参数。

--------
http://16kan.com/post/113307.html  说得更清楚
获取UNIX类型的选项:

unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:

command -options parameters

如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。

   getopts option_string variable

   指定变量取值,即在option_string中将一个冒号放在选项后。但当冒号放在第一个选项时,代表其作为一个选项存在,具体含意为如果某选项设置为取值传递但却未传值时,返回该选项后的信息,若未添加此选项则默认系统也会返回一个错误信息,只是错误信息提示并不明确。

   如getopts ahfvc: option表明选项a、h、f、v可以不加实际值进行传递,而选项c必须取值。使用选项取值时,必须使用变量OPTARG保存该值。

该语句的格式为: getopts一般格式为:

getopts option_string variable

其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。

有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一个冒号。当getopts命令发现冒号后,会从命令行该选项后读取该值。若该值存在,那么将被存在一个特殊的变量OPTARG中。如果该值不存在,getopts命令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。

optstring  option字符串,会逐个匹配

varname     每次匹配成功的选项

arg             参数列表,没写时它会取命令行参数列表

$OPTIND     特殊变量,option index,会逐个递增, 初始值为1

$OPTARG    特殊变量,option argument,不同情况下有不同的值

细则1:当optstring以”:”开头时,getopts会区分invalid option错误和miss option argument错误。

invalid option时,varname会被设成?,$OPTARG是出问题的option;

miss option argument时,varname会被设成:,$OPTARG是出问题的option。

如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使varname被设成?,$OPTARG是出问题的option。

细则2:当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中;

如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option,否则varname的值是?,$OPTARG是该option。(参照细则1)

———————————————————————

2、Linux Shell 一些变量

$# 传递到脚本的参数个数

$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个

$$ 脚本运行的当前进程I D号

$!  后台运行的最后一个进程的进程I D号

$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数

$- 显示s h e l l使用的当前选项,与s e t命令功能相同

$?  显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

————

shift 用于重新分配位置参数,其实就是把向参数左移动一个位置如:$1<–$2,$2<–$3老的$1将被删除掉。

————

范例:


[root@localhost ~]# cat getopts2#!/bin/sh
while getopts :ab: name
do
case $name in
a) aflag=1;;
b) bflag=1
bval=$OPTARG;;
?) echo “USAGE:`basename $0` [-a] [-b value]”
exit 1;;
esac
doneif [ ! -z $aflag ] ;
then
echo “option -a specified”
echo “$aflag”
echo “$OPTIND”
fi

if [ ! -z $bflag ] ;
then
echo “option -b specified”
echo “$bflag”
echo “$bval”
echo “$OPTIND”
fi

echo “here $OPTIND”
shift $(($OPTIND -1))
echo “$OPTIND”
echo ” `shift $(($OPTIND -1))` ”


用法例:

#!/bin/bash



if [ $# -lt 1 ]

then

   echo “there is no option”;

else

   while getopts “:Iti:s:v” opt;

   do

       case $opt  in

       I)echo “option is I “

       ;;

       t)echo “option is t “

       ;;

       i)ii=$OPTARG;echo “option is i,the value is $ii”;

       ;;

       s)ss=$OPTARG;echo “option is s ,the value is $ss”;

       ;;

       v)echo “option is v \n”;

       ;;

      

               echo “>>> Error: ‘-$OPTARG’ requires an argument”

               ;;

       ?)paralist=-1;

       echo “>>> Error: ‘-$OPTARG’ not supported,please input valid argument [Itisv]“

       ;;

       esac

       done  

fi



下面给出几个执行的例子:

(1)sh datediff.sh -i 1 -I -v
option is i,the value is 1
option is I
option is v \n

(2)sh datediff.sh -s -i 1
option is s, the value is -i //取s选项后的值

(3)sh datediff.sh -s       //选项中有前置冒号
>>> Error: ‘-s’ requires an argument
sh datediff.sh -s            //去除选项中的前置冒号后的输出
datediff.sh: option requires an argument — s
>>> Error: ‘-’ not supported,please input valid argument [Itisv]
分享到:
评论

相关推荐

    linux shell programming tutorial

    根据提供的文件信息,我们可以归纳出一系列关于 Linux Shell 编程的关键知识点。以下是对这些知识点的详细解释: ### Linux Shell 编程教程 #### 引言 本教程旨在为初学者介绍基本的 Shell 编程概念,并通过示例来...

    Shell脚本中使用getopts处理多命令行选项

    `getopts`命令就是Linux Shell提供的一种工具,用于解析命令行选项和参数,使得脚本能够灵活地根据用户提供的选项执行不同的操作。下面将详细介绍`getopts`的使用方法及其在脚本中的应用。 `getopts`的基本语法是:...

    Linux Shell脚本编程PDF

    Linux Shell脚本编程是Linux操作系统中的重要组成部分,它允许用户通过编写脚本来自动化日常的命令行任务,提高工作效率。这份PDF文件集很可能包含了全面的Shell脚本编程教程,旨在帮助学习者掌握这一强大的工具。 ...

    linux shell

    Linux Shell是Unix和Linux操作系统中的命令解释器,它为用户提供了与系统交互的接口,使得用户可以通过编写脚本程序来自动化一系列的系统操作。Linux Shell编程涵盖了广泛的主题,包括命令行交互、脚本编写、环境...

    Linux Shell Programming In 24 Hours

    Shell脚本中可以使用`getopts`函数解析命令行选项。这使得脚本可以根据用户的输入调整其行为。 ### 十三、输入/输出 #### 输出 `echo`命令可以用于输出文本到标准输出(通常是终端)。通过重定向操作符`&gt;`或`&gt;&gt;`,...

    Linux shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 ...

    LINUX与UNIX SHELL编程指南(很全)

    第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号...

    linux shell 编程教程

    linux shell编程 教程大全 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 ...

    LINUX SHELL SCRIPT

    ### Linux Shell Scripting知识点概述 #### 一、Linux与Shell脚本基础 ##### 1. Linux简介 - **定义**:Linux是一种免费且开源的操作系统,由Linus Torvalds在1991年首次发布。 - **开发者**:最初由Linus ...

    Linux与unix shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell ...

    主要shell内置命令

    Shell是Linux和Unix系统中的一种命令解释器,它允许用户通过命令行接口与操作系统交互。在Shell中,内置命令是直接由Shell执行的,而无需启动新的进程,这使得它们比外部命令更快、更有效率。以下是主要的Shell内置...

    绝版经典《Linux与UNIX Shell编程指南》

    第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号...

    深入浅出linux工具与编程——Shell编程

    根据提供的标题“深入浅出linux工具与编程——Shell编程”以及描述“深入浅出linux工具与编程”,可以总结和扩展出以下与Linux Shell编程相关的知识点: ### 一、Shell编程概述 Shell是用户与操作系统之间的交互...

    LINUX与UNIX SHELL编程指南

    《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和Unix系统中Shell编程的权威教程。Shell作为操作系统与用户交互的重要工具,是系统管理员和程序员日常工作中不可或缺的一部分。本书全面覆盖了Shell脚本编写的...

    shell命令shell命令(资料包)

    在IT领域,Linux Shell编程是系统管理员和开发者必备的技能之一。Shell命令是与Linux操作系统交互的主要工具,它提供了一种高效的方式来进行自动化任务、管理文件和系统操作。本资料包着重于Linux Shell编程,旨在...

    LINUX与UNIX SHELL编程指南 高清PDF

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

    linux与unix shell编程指南

    在Linux和Unix环境中,Shell编程是一种强大的工具,用于自动化任务和管理工作流程。本文将深入探讨如何向Shell脚本传递参数,以及如何有效地处理这些参数。 首先,我们知道在Shell脚本中,参数是通过变量$1至$9来...

    linux shell命令行选项与参数用法详解

    Linux Shell 是一种强大的命令行接口,它允许用户与操作系统交互,执行各种任务。在Shell脚本中,命令行选项和参数的使用是至关重要的,它们能够定制命令的行为。这篇文章将详细解析Linux Shell中处理命令行选项与...

Global site tag (gtag.js) - Google Analytics