- 浏览: 149319 次
- 性别:
- 来自: 北京
文章分类
最新评论
#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]
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]
发表评论
-
用vim比较文件
2013-09-17 10:07 8371. 使用vim的比较模式 ... -
linux去掉文件重复行
2013-08-28 18:20 880linux去掉文件重复行 在统计某些数据的时候,文件 ... -
linux下释放内存的cache
2013-07-31 13:03 905虽然内存cache对文件系统有加速,但是cache太多的文件 ... -
查看linux机器cpu信息
2013-06-27 17:27 544查看几核 cat /proc/cpuinfo | grep ... -
awk常用问题集锦
2012-12-07 15:38 820http://www.cnblogs.com/27681507 ... -
Linux中expr命令
2012-12-05 18:04 831http://blog.csdn.net/guhong5153 ... -
shell里面如何获取字符串长度--判断字符串为空
2012-12-05 18:04 1963#/bin/bashstr=12313; le1=`expr ... -
Linux中date命令
2012-12-05 17:35 3071Linux中date命令用法 1、以下是服务器现在的时 ... -
linux date得到当前时间的毫秒
2012-12-05 16:45 18007echo `expr \`date +%s%N\` / 100 ... -
Linux系统管理员应该知道的20个系统监控工具
2012-11-10 17:43 720http://bbs.chinaunix.net/thread ... -
LINUX SHELL 中 2>&1 重定向的问题
2012-07-31 15:17 1009转载http://blog.csdn.net/past ... -
shell 脚本中$$,$#,$?
2012-07-31 14:53 685$0 这个程式的执行名字 $n 这个程式的第n个参数值,n=1 ... -
linux如何根据进程ID查找启动程序的路径
2012-02-22 09:59 1197http://blog.csdn.net/eijnew/art ... -
awk基础
2011-12-14 14:37 8501、awk 语法分模式和操 ... -
linux rsync同步设置详细指南
2011-08-24 17:43 1241linux rsync同步设置详细指南 配置rsync 同步数 ... -
shell分割字符串
2011-06-16 14:58 1738#!/bin/sh ids="1,2,3,4, ... -
linux scp无密码
2011-06-07 17:14 1558原理: 密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和 ... -
查看Linux操作系统的版本
2011-05-27 10:30 15232.4.26是内核的版本号,内核的版本号是Linus领导下的开 ... -
java调用shell,并得到shell的输出
2011-05-26 15:31 3289import java.io.IOException; ... -
把awk中的数组赋值给shell中的数组
2011-05-26 15:20 11823方法1,通过eval #!/bin/bash ipstr ...
相关推荐
根据提供的文件信息,我们可以归纳出一系列关于 Linux Shell 编程的关键知识点。以下是对这些知识点的详细解释: ### Linux Shell 编程教程 #### 引言 本教程旨在为初学者介绍基本的 Shell 编程概念,并通过示例来...
`getopts`命令就是Linux Shell提供的一种工具,用于解析命令行选项和参数,使得脚本能够灵活地根据用户提供的选项执行不同的操作。下面将详细介绍`getopts`的使用方法及其在脚本中的应用。 `getopts`的基本语法是:...
Linux Shell脚本编程是Linux操作系统中的重要组成部分,它允许用户通过编写脚本来自动化日常的命令行任务,提高工作效率。这份PDF文件集很可能包含了全面的Shell脚本编程教程,旨在帮助学习者掌握这一强大的工具。 ...
Linux Shell是Unix和Linux操作系统中的命令解释器,它为用户提供了与系统交互的接口,使得用户可以通过编写脚本程序来自动化一系列的系统操作。Linux Shell编程涵盖了广泛的主题,包括命令行交互、脚本编写、环境...
Shell脚本中可以使用`getopts`函数解析命令行选项。这使得脚本可以根据用户的输入调整其行为。 ### 十三、输入/输出 #### 输出 `echo`命令可以用于输出文本到标准输出(通常是终端)。通过重定向操作符`>`或`>>`,...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了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编程 教程大全 目 录 译者序 前言 第一部分 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 Scripting知识点概述 #### 一、Linux与Shell脚本基础 ##### 1. Linux简介 - **定义**:Linux是一种免费且开源的操作系统,由Linus Torvalds在1991年首次发布。 - **开发者**:最初由Linus ...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell ...
Shell是Linux和Unix系统中的一种命令解释器,它允许用户通过命令行接口与操作系统交互。在Shell中,内置命令是直接由Shell执行的,而无需启动新的进程,这使得它们比外部命令更快、更有效率。以下是主要的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工具与编程”,可以总结和扩展出以下与Linux Shell编程相关的知识点: ### 一、Shell编程概述 Shell是用户与操作系统之间的交互...
《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和Unix系统中Shell编程的权威教程。Shell作为操作系统与用户交互的重要工具,是系统管理员和程序员日常工作中不可或缺的一部分。本书全面覆盖了Shell脚本编写的...
在IT领域,Linux Shell编程是系统管理员和开发者必备的技能之一。Shell命令是与Linux操作系统交互的主要工具,它提供了一种高效的方式来进行自动化任务、管理文件和系统操作。本资料包着重于Linux Shell编程,旨在...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...
在Linux和Unix环境中,Shell编程是一种强大的工具,用于自动化任务和管理工作流程。本文将深入探讨如何向Shell脚本传递参数,以及如何有效地处理这些参数。 首先,我们知道在Shell脚本中,参数是通过变量$1至$9来...
Linux Shell 是一种强大的命令行接口,它允许用户与操作系统交互,执行各种任务。在Shell脚本中,命令行选项和参数的使用是至关重要的,它们能够定制命令的行为。这篇文章将详细解析Linux Shell中处理命令行选项与...