两个很详细的shell 实例代码(shell示例)一篇读懂

随心笔谈2年前发布 admin
182 0 0

文章摘要

这篇文章介绍了一个使用Vi脚本实现的二进制转十进制转换程序。脚本包含多个函数:`help()`用于显示帮助信息,`error()`用于处理无效输入,`lastchar()`用于获取字符串最后一个字符,`chop()`用于截取字符串除最后一个字符外的部分。主程序通过循环读取二进制数的每一位,将其转换为十进制并累加,最后输出结果。该脚本简洁明了,适合需要自动化二进制转十进制操作的用户使用。

#!/bin/sh

# vim: set sw=4 ts=4 et:

help()

{

 cat < 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”

#

© 版权声明

相关文章