c shell 命令行参数处理getopts.sh

  bash脚本自带处理函数:

while getopts "d:s:b:a:f:l:h" opt; do
  case $opt in
     d )  day="${OPTARG}"           ;;
     s )  dataset=${OPTARG}         ;;
     b )  backfile=${OPTARG}         ;;
     a )  maxdays=${OPTARG}         ;;
     l )  backlocaldir=${OPTARG}         ;;
     f )  full_cp_size=$(echo ${OPTARG}*1024*1024|bc)        ;;
     h )  help    ;      ;;
  esac
done

  c shell 我们也写一个,让它使用起来像: 

#!/bin/csh
set optsNoarg="dh"
while 1
  source ~/getopts.sh 
  if ( $status != 0 ) then 
    break
  endif

  switch ($opt)
    case "z":
      set dataset=($optarg)
      breaksw
    case "u":
      set backfile=($optarg)
      breaksw
    case "d":
      set fullbackdays=abc
      breaksw
    case "h":
      echo "This is a script program, please enter the parameters"
      echo "Usage:./a.sh -u 34242"
      echo '    ./a.sh -u "fsf sfsdf"'
      echo '    ./a.sh -u "fsf sfsdf" -d'
      breaksw
    default:
      echo "Invalid arg"
      breaksw
  endsw

end

echo $backfile
echo $fullbackdays
echo $dataset

getopts.sh:

#!/bin/csh
#process command line arg , -avalue --> -a value
#set opts that no args in var: optsNoarg before calling

if ( ! $?optsNoarg ) then
	set optsNoarg
endif

set optarg

if ( $#argv == 0 ) then 
	exit 1
else 
	set opt=`echo $argv[1]|cut -c 2`
	if (`echo $argv[1]|cut -c 1` == "-" && `echo $argv[1]|wc -L` > 2 ) then
		if ( ! {(echo $optsNoarg | grep $opt >& /dev/null)} ) then
			set optarg=(`echo $argv[1]|cut -c 3-`)
			shift
		else
			set argv[1] = -`echo $argv[1]|cut -c 3-`
		endif
	else
		if ( ! {(echo $optsNoarg | grep $opt >& /dev/null)} && $#argv > 1 ) then 
			set optarg=($argv[2])
			shift
			shift
		else
			shift
		endif
	endif

	exit 0
endif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值