LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1042|回复: 8

shell教材代码

[复制链接]
发表于 2005-4-28 17:49:04 | 显示全部楼层 |阅读模式
小弟刚学shell,教材的东西看不懂,故贴出来,看懂的兄弟们给一步一步解释一下吗

  1. #!/bin/sh
  2. max()
  3. {
  4.     while [ $1 ]
  5.      do
  6.            if [ $maxvalue ]
  7.            then
  8.                 if [ $1 -gt $maxvalue ]
  9.                 then
  10.                      maxvalue=$1
  11.                 fi
  12.            else
  13.                 maxvalue=$1
  14.            fi
  15.            shift
  16.       done
  17.       return $maxvalue
  18. }
  19.    max $@
  20.    echo "max value is : $maxvalue "
  21. #end
复制代码

保存为maxvalue之后在命令行运行./maxvalue 100 30 50 7 60 20 150
之后书上说显示结果应该为119,可是我运行后现实150,不知道是书上错了,还是我错了,兄弟们帮忙看一下好吗?
能给一步一不在每个代码的后面说明原理就更好了,谢谢
发表于 2005-4-28 18:33:53 | 显示全部楼层
兄弟真是实诚人呐,书上说是119,就一定是119。
它就不行说的印错啦啊?!
其实自己试一下就知道了。


  1. #!/bin/sh
  2. max()  ←定义函数max取最大值
  3. {
  4.     while [ $1 ] ←判断是否跟有参数
  5.      do
  6.            if [ $maxvalue ] ←判断最大值maxvalue已存在
  7.            then
  8.                 if [ $1 -gt $maxvalue ] ←如果最大值存在并且参数$1大于最大值,
  9.                 then                                将最大值设为$1
  10.                      maxvalue=$1
  11.                 fi
  12.            else
  13.                 maxvalue=$1  ←如果最大值为空,直接设最大值为$1
  14.            fi
  15.            shift ←将输入参数位置左移一位
  16.       done
  17.       return $maxvalue ←返回最大值
  18. }
  19.    max $@ ←调用函数max
  20.    echo "max value is : $maxvalue " ←反馈信息最大值是maxvalue的最后值
  21. #end
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-4-28 18:35:56 | 显示全部楼层
学习ing
回复 支持 反对

使用道具 举报

发表于 2005-4-28 18:42:54 | 显示全部楼层
首先,函数定义的一般形式:
  1. 类型标识符 函数名(形式参数表列)
  2. {
  3.    声明部分
  4.    语句
  5. }
复制代码

例如:

  1. int max(int x,int y)
  2. {
  3.    int z;
  4.    z=x>y?x:y;
  5.    return(z);
  6. }
复制代码

在这里
max()  #函数名max,()内为形式参数表列,这里是无参函数形式
{
    while [ $1 ]  #while循环("当型"循环结构),一般形式为
                       # while ( 表达式 ) 语句
                       # 当表达式为真时,执行while内嵌语句
                       # 特点:先判断表达式,后执行语句(跟do...while比较
    do#do和下面的done组合
           if [ $maxvalue ]
           then
                if [ $1 -gt $maxvalue ]
                then
                     maxvalue=$1
                fi
           else
                maxvalue=$1
           fi
           shift
      done
      return $maxvalue
}
   max $@
   echo "max value is : $maxvalue "
#end

if            #如果后面的条件为真(就是符合条件)
then       #那么就做...
else        #否则就做...
...
fi             #表示if语句结束(是if反过来啊)
其实很简单,把他们想象成我们的实际语言!

其实我感觉楼主的问题不在于这个脚本的结果是否正确,而在于是否正确的分析了问题,不知道楼主是否学过一门(或者几门)编程语言,比如c等,如果楼主确实对于编程语言没有基础,那我的建议是先系统的学习一门编程语言(推荐c),就学习最简单的概念和知识,比如了解程序结构设计的基本方式,顺序执行,条件语句(if等),循环控制(for;while;do...while等),分支结构(case等)以及函数的基本构成,学习这个不需要花费很多时间,但是当你看完这些,再回来理解这些脚本应该不会再提出这样的问题了
回复 支持 反对

使用道具 举报

发表于 2005-4-28 18:47:53 | 显示全部楼层
zhy2111314兄弟很忙啊,
看到你在公社也是版主啦?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-28 18:54:46 | 显示全部楼层
谢谢斑竹和兄弟们的解答,我确实没有语言基础,就连C也没有学过,有人没有语言基础也能学shell的,我现在大部分都能看懂,就是一些基础的东西老是拌我的脚
回复 支持 反对

使用道具 举报

发表于 2005-4-28 19:12:48 | 显示全部楼层
Post by tianfuming
谢谢斑竹和兄弟们的解答,我确实没有语言基础,就连C也没有学过,有人没有语言基础也能学shell的,我现在大部分都能看懂,就是一些基础的东西老是拌我的脚

所以,学习c是必要的,找本最简单的大学c教材就可以,而且很容易懂,估计一周就可以搞定
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-28 19:31:50 | 显示全部楼层
我有自学材料,有本老书,好像是清华大学自动控制毕业的一个老教授写的,但是我不知道该学习哪个版本的C语言,光盘资料也有,那是MS C的,和linux相关的哪个C啊
回复 支持 反对

使用道具 举报

发表于 2005-4-28 19:50:02 | 显示全部楼层
Post by aaccdd
zhy2111314兄弟很忙啊,
看到你在公社也是版主啦?

督促自己学习
我有自学材料,有本老书,好像是清华大学自动控制毕业的一个老教授写的,但是我不知道该学习哪个版本的C语言,光盘资料也有,那是MS C的,和linux相关的哪个C啊

不学c也可以
看看这个shell编程系列的Bash实例1,2,3:
http://www-128.ibm.com/developerworks/cn/linux/shell/index.html

其实我觉得学哪种c或者学哪种编程语言都没关系,最主要的是通过学一门编程语言理解编程的思路和编程的精髓所在!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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