工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3679|回复: 8

[SHELL we talk之四]比较一组数的大小,输出最大者

[复制链接]
发表于 2006-5-13 18:31 | 显示全部楼层 |阅读模式
想到三种方法,

  1. #!/bin/bash
  2. #找出最大的数
  3. #2006.5.13 created by hjack
  4. #version 1
  5. #history:

  6. Usage(){
  7.   echo "Usage:max x1 x2 x3 ..."
  8.   exit 1
  9. }

  10. #=============================
  11. #传统方法,逐个比较,大的就赋给max变量。
  12. #-----------------------------
  13. max1(){
  14.   max=$1
  15.   for i in $(echo $*)
  16.   do
  17.     if [ $max -lt $i ];then
  18.       max=$i
  19.     fi
  20.   done
  21.   echo "the max value is : $max"
  22. }

  23. #=============================
  24. #方法同max1,使用了shift来对参数进行移动。
  25. #-----------------------------
  26. max2(){
  27.   max=$1
  28.   while [ $2 ]
  29.   do
  30.     if [ $max -lt $2 ];then
  31.       max=$2
  32.     fi
  33.     shift
  34.   done
  35.   echo "the max value is : $max"
  36. }

  37. #=============================
  38. #先对要比较的数进行sort排序,然后输出最后一行。
  39. #有个问题是,怎样把结果保存在一个变量里,像上面两个例子一样。 谁知道就说说~
  40. #-----------------------------
  41. max3(){
  42.   for i in $(echo $*)
  43.   do
  44.     echo $i
  45.   done | sort -n | tail -1
  46. }

  47. #=============================
  48. #利用awk进行处理。
  49. #----------------------------
  50. max4(){
  51.   echo "$@" | awk 'BEGIN{x=$1;} {for(i=1;i<=NF;i++)if($i>x)x=$i;} END{print "the max value is:" x}'
  52. }

  53. main(){
  54.   if [ $# -lt "1" ] ;then
  55.     Usage "$@"
  56.   fi
  57.   
  58.   max1 "$@"
  59.   max2 "$@"
  60.   max3 "$@"
  61.   max4 "$@"
  62. }

  63. #----------------
  64. main "$@"

复制代码

[ 本帖最后由 hjack 于 2006-5-25 12:41 编辑 ]
发表于 2006-5-14 15:09 | 显示全部楼层
楼主好寂寞啊!我来顶下.

我上学期也接触了下Shell,可是现在我连Linux系统也没安装.因为我觉得学这个工作上可能不需要,到时真的要再学也不迟吧!可能很多人和我这样想,你的知音就比较少了.
是了,官方QQ只有Windows版的,你的公司不会用Linux吧?
呵呵,有空的话,我写写Windows脚本编程,知音一定比你多!
鼓励一下,楼主继续 talk ~!~
回复

使用道具 举报

 楼主| 发表于 2006-5-14 17:20 | 显示全部楼层
那你就错了,现在工作上很多服务器是linux的。
回复

使用道具 举报

发表于 2006-5-14 20:10 | 显示全部楼层
LINUX真的那么重要吗?
回复

使用道具 举报

 楼主| 发表于 2006-5-25 12:41 | 显示全部楼层
增加了一种方法。

采用awk来处理。

#=============================
#利用awk进行处理。
#----------------------------
max4(){
  echo "$@" | awk 'BEGIN{x=$1;} {for(i=1;i<=NF;i++)if($i>x)x=$i;} END{print "the max value is:" x}'
}


其中 NF变示的是列数。
回复

使用道具 举报

发表于 2008-11-4 22:06 | 显示全部楼层
原帖由 hjack 于 2006-5-25 12:41 发表
#=============================
#先对要比较的数进行sort排序,然后输出最后一行。
#有个问题是,怎样把结果保存在一个变量里,像上面两个例子一样。 谁知道就说说~
#-----------------------------
max3(){
  for i in $(echo $*)
  do
    echo $i
  done | sort -n | tail -1
}


max3(){
  for i in $(echo $*)
  do
    echo $i
  done | sort -n | tail -1 | read x
}
这样应该可以 : )
回复

使用道具 举报

发表于 2008-11-5 15:52 | 显示全部楼层
Linux好有用的,经常要用到的,Windows漏洞这么多,谁敢用它做服务器
回复

使用道具 举报

发表于 2008-11-5 23:13 | 显示全部楼层
看是什么需求,确实是有公司用windows 2003做服务器的
回复

使用道具 举报

发表于 2008-11-6 00:12 | 显示全部楼层
天啊!06年的贴啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-4 12:23

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表