Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39592
  • 博文数量: 14
  • 博客积分: 314
  • 博客等级: 一等列兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-20 12:00
文章分类

全部博文(14)

文章存档

2012年(14)

我的朋友
最近访客

分类: LINUX

2012-01-21 13:18:33

Linux shell脚本基础学习这部分如果只看前面间的理论部分虽然有一些例子,但是还不够系统,这里将以具体实例给大家展现Linux shell脚本编程,以帮助大家完善Linux shell基础的学习和提高。

第2部分 实例

现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令:

cp framework.sh myscript

然后再插入自己的函数。

让我们再看个例子:

二进制到十进制的转换

脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:


  1. #!/bin/sh

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

  3. help()

  4. {

  5. cat <

  6. b2h -- convert binary to decimal

  7. USAGE: b2h [-h] binarynum

  8. OPTIONS: -h help text

  9. EXAMPLE: b2h 111010

  10. will return 58

  11. HELP

  12. exit 0

  13. }

  14. error()

  15. {

  16. # print an error and exit

  17. echo "$1"

  18. exit 1

  19. }

  20. lastchar()

  21. {

  22. # return the last character of a string in $rval

  23. if [ -z "$1" ]; then

  24. # empty string

  25. rval=""

  26. return

  27. fi

  28. # wc puts some space behind the output this is why we need sed:

  29. numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `

  30. # now cut out the last char

  31. rval=`echo -n "$1" | cut -b $numofchar`

  32. }

  33. chop()

  34. {

  35. # remove the last character in string and return it in $rval

  36. if [ -z "$1" ]; then

  37. # empty string

  38. rval=""

  39. return

  40. fi

  41. # wc puts some space behind the output this is why we need sed:

  42. numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `

  43. if [ "$numofchar" = "1" ]; then

  44. # only one char in string

  45. rval=""

  46. return

  47. fi

  48. numofcharminus1=`expr $numofchar "-" 1`

  49. # now cut all but the last char:

  50. rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`

  51. }

  52. while [ -n "$1" ]; do

  53. case $1 in

  54. -h) help;shift 1;; # function help is called

  55. --) shift;break;; # end of options

  56. -*) error "error: no such option $1. -h for help";;

  57. *) break;;

  58. esac

  59. done

  60. # The main program

  61. sum=0

  62. weight=1

  63. # one arg must be given:

  64. [ -z "$1" ] && help

  65. binnum="$1"

  66. binnumorig="$1"

  67. while [ -n "$binnum" ]; do

  68. lastchar "$binnum"

  69. if [ "$rval" = "1" ]; then

  70. sum=`expr "$weight" "+" "$sum"`

  71. fi

  72. # remove the last position in $binnum

  73. chop "$binnum"

  74. binnum="$rval"

  75. weight=`expr "$weight" "*" 2`

  76. done

  77. echo "binary $binnumorig is decimal $sum"

该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..),比如二进制"10"可以这样转换成十进制:

0 * 1 + 1 * 2 = 2

为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc –c计算字符个数,然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。

这个Linux shell脚本实例帮我们完成了转换,下一次我们将举例一个文件循环程序。

阅读(1042) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~