当前位置: 首页 > news >正文

程序员常用的编程软件/seo快速排名培训

程序员常用的编程软件,seo快速排名培训,店面招牌设计效果图大全,红色php企业网站模板在编写shell脚本中,经常要处理一些输入参数,在使用过程中发现getopts更加方便,能够很好的处理用户输入的参数和参数值。getopts用于处理用户输入参数,举例说明使用方法:while getopts :a:b:cdefg opt; docase $opts in…

在编写shell脚本中,经常要处理一些输入参数,在使用过程中发现getopts更加方便,能够很好的处理用户输入的参数和参数值。

getopts用于处理用户输入参数,举例说明使用方法:

while getopts :a:b:cdefg opt; do

case $opts in

a) do sth;

......

cde) do another;

esac

done

几个重要变量:

OPTIND:getopts使用OPTIND作为索引,来处理下一个需要处理的参数,记录当前的状态。

OPTARG:在上面的循环中,a,b两个参数后面各有一个冒号,冒号表示该输入的参数后面还有一个参数值,当getopts发现冒号后,会处理用户输入的参数值,这个参数值被保存在OPTARG中。

OPTSTRING:也就是上例中的 :a:b:cdefg,getopts需要处理的参数。注意,最前面的冒号“:”用于指定getopts工作于silent mode,在silent模式下,当用户输入的参数不满足OPTSTRING时,不会讲illegal option这样的错误信息打印出来,使代码看起来更加专业。如果想要工作在verbose模式下,可以去掉最前面的冒号

下面,简单的写了一个shell脚本用来描述getopts的使用方法:

#! /bin/bash

function c1() {

cmd="rhc app create -p RedHat"

while getopts  :a:t:sn opt; do

case $opt in

a) cmd=$cmd" -a $OPTARG" ;;

t) cmd=$cmd" -t $OPTARG" ;;

s) cmd=$cmd" -s" ;;

n) cmd=$cmd" -n --no-dns" ;;

\?) echo "Invalid param" ;;

esac

done

echo $cmd

}

c1 -a app1 -t perl-5.10 -s -n

执行这个脚本,我们就会得到预期的结果

[root@linuxidc shell]# ./getopts-silent.sh

rhc app create -p redhat  -a app1 -t perl-5.10 -s -n  --no-dns

当然,有些时候,我们更新网将function写入.bashrc中,方便自己随时调用,如果将这段代码直接粘贴到.bashrc中,可能会引起问题:我没有得到预期的结果,脚本中的cmd并没有按照预想的情况得到处理,这是因为什么呢?

原因在于,保存在.bashrc后,第一次执行完成后,下一次在执行时,OPTIND不会重新产生,因为他被作为一个global variable使用,所以getopts在调用时,他的索引会变得混乱。在脚本中执行没有遇到这个问题的原因也在此,因为脚本每次执行时,都会调用一个 新的shell,所以OPTIND会被设置为1。如果想要他在.bashrc中生效,必须要在最上面加上local OPTIND

让我们来稍微修改一下:

# Create apps

function create-apps() {

local OPTIND

cmd="rhc app create -p $OPENSHIFT_PASSWD"

while getopts a:t:sn x

do

case $x in

a) cmd=$cmd" -a $OPTARG" ;;

t) cmd=$cmd" -t $OPTARG" ;;

s) cmd=$cmd" -s" ;;

n) cmd=$cmd" -n --no-dns" ;;

\?) echo Invalid Params ;;

esac

done

echo $cmd

}

source之后,我们可以直接调用,看一下是否达到了我们预期的结果:

[root@linuxidc shell]# create-apps -a free -t jbsseap -n

rhc app create -p redhat -a free -t jbsseap -n --no-dns

如果还不是很了解,你可以简单的看下这个例子,这个例子是如果传递进来的参数包括f,那么执行对应代码:

while getopts "dfiPRrvW" opt      //赋值给opt

do

case $opt in

f)                      //如果传递进来是f

exec $realrm "$@"

;;

*)

# do nothing      //传递其他参数,包括d,i,p,r,v,w

;;

esac

done

http://www.jmfq.cn/news/5153833.html

相关文章:

  • 移动网站建设方案/seo数据
  • vs做网站mvc/八大营销方式有哪几种
  • 常州网站建设网站/seo工作前景如何
  • 顺的网站建设精英/seo文章代写平台
  • 南京网站建设价格/seo网站优化推广教程
  • 平面设计包括什么/seo综合查询网站源码
  • 如何做电商网站视频/800元做小程序网站
  • 我做网站价格/重庆seo和网络推广
  • 杭州 seo网站建设 网络服务/网络销售的工作内容
  • 网站需要做实名认证如何做/建站模板哪个好
  • 做网站需要哪些资料/近期国际新闻
  • 做网站游燕/快速优化网站排名的方法
  • dede阿里百秀网站源码/百度我的订单查询
  • 网站开发公司好开发客户吗/百度云群组
  • 南阳企业网站建设公司/重庆seo推广外包
  • 网站充值页面模板/百度搜索一下
  • 网站建设武汉/企业网站优化服务公司
  • 试玩平台怎么做网站/泰安seo培训
  • 门户网站模板 免费/友情链接百科
  • 网站制作及实现/武汉网站推广优化
  • 如何用域名建网站/百度查询关键词排名工具
  • 主机屋怎么做网站/百度网页版 入口
  • 车工订单网站/信息流优化师需要具备哪些能力
  • 长沙哪个公司做网站/推手平台哪个靠谱
  • 石家庄网站建设推广公司报价/永久免费的电销外呼系统
  • 深圳做网站推广的公司/北京百度推广电话号码
  • 注册网站的步骤/哪有网页设计公司
  • 深圳网站制作价格/google seo怎么做
  • 天津做网站优化公司/百度加盟
  • 个人什么取消网站备案/实时排名软件