SHELL编程框架(步骤)

 

 任何优秀的脚本都应该具有帮助,输入参数以及出错提示等公共部件,将这些公共部件提取出来,写成伪脚本(framework.sh),从而作为大多数脚本的框架结构。
 这时候,在写一个新的脚本时我们只需要执行一下copy命令: cp framework.sh myscript然后再插入自己的函数。

一,framework.sh
 #!/bin/sh
 #help function
 help()
 {
  cat <<HELP
  #shell name -- shell desc
  #USAGE:
  #OPTIONS:
  #EXAMPLE:
  HELP
    exit 0
 }
 
 #error function
 error()
 {
  # print an error and exit
  echo "$1"
  exit 1
 }
 
 #input parameter analyse
 while [ -n "$1" ]; do
 case $1 in
  -h) help;shift 1;; # function help is called
  --) shift;break;; # end of options
  -*) error "error: no such option $1. -h for help";;
  *) break;;
 esac
 done
  
  # The main program
 [ -z "$1" ] && help

二,SHELL调试
  1.echo命令
   最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。
   Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。
  2.sh -x 真实调试模式
   sh -x your_script
   
  3.sh -n 语法检查
   sh -n your_script
   这将返回所有语法错误。
  
三,实例
    二进制到十进制的转换
  脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。
  #!/bin/sh
  # vim: set sw=4 ts=4 et:
  help()
  {
   cat <<HELP
  b2h -- convert binary to decimal

  USAGE: b2h [-h] binarynum

  OPTIONS: -h help text

  EXAMPLE: b2h 111010
  will return 58
  HELP
   exit 0
  }

  error() 
  {
    # print an error and exit
    echo "$1"
    exit 1
  }

  lastchar()
  {
    # return the last character of a string in $rval
    if [ -z "$1" ]; then
      # empty string
      rval=""
      return
    fi
    # wc puts some space behind the output this is why we need sed:
    numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
    # now cut out the last char
    rval=`echo -n "$1" | cut -b $numofchar`
  }

  chop()
  {
    # remove the last character in string and return it in $rval
    if [ -z "$1" ]; then
      # empty string
      rval=""
      return
    fi
    # wc puts some space behind the output this is why we need sed:
    numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
    if [ "$numofchar" = "1" ]; then
      # only one char in string
      rval=""
      return
    fi
    numofcharminus1=`expr $numofchar "-" 1`
    # now cut all but the last char:
    rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
  }


  while [ -n "$1" ]; do
  case $1 in
    -h) help;shift 1;; # function help is called
    --) shift;break;; # end of options
    -*) error "error: no such option $1. -h for help";;
    *) break;;
  esac
  done

  # The main program
  sum=0
  weight=1
  # one arg must be given:
  [ -z "$1" ] && help
  binnum="$1"
  binnumorig="$1"

  while [ -n "$binnum" ]; do
    lastchar "$binnum"
    if [ "$rval" = "1" ]; then
      sum=`expr "$weight" "+" "$sum"`
    fi
    # remove the last position in $binnum
    chop "$binnum"
    binnum="$rval"
    weight=`expr "$weight" "*" 2`
  done

  echo "binary $binnumorig is decimal $sum"
  #

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值