LinuxSir.cn,穿越时空的Linuxsir!

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

刚学shell,请帮我分析一下[基本解决]

[复制链接]
发表于 2004-4-20 16:19:07 | 显示全部楼层 |阅读模式
#!/bin/bash        
case $# in               /*不懂$#是等什么输入*/
0)set 'date';m=$2;y=$6;;   /*不懂m,y分别代表月年,但是$2,6是干吗的*/
1)m=$1;set 'date';y=$6;;  /*m=$1??上面设置过了还要set?*/
*)m=$1;y=$2;;
esac                       /*是什么标志?*/
case $m in                  /*这个懂点,是不是等月的输入?*/
jan*|Jan*)m=1;;
feb*|Feb*)m=2;;
mar*|Mar*)m=3;;
apr*|Apr*)m=4;;
may*|May*)m=5;;
jun*|Jun*)m=6;;
jul*|Jul*)m=7;;
aug*|Aug*)m=8;;
sep*|Sep*)m=9;;
oct*|Oct*)m=10;;
nov*|Nov*)m=11;;
dec*|Dec*)m=12;;
[1-9]|10|11|12);;
*)y=$m;m="";;                         /*是default的选项*/
esac
cal $m $y                              /*这个是干吗的?*/
以上是程序
程序我运行过,功能也知道,但是就是不知道怎么做的
帮我总体说说?然后在帮我解释解释我注明的那几句?
谢谢
我菜菜啦
发表于 2004-4-20 16:41:49 | 显示全部楼层
建议楼主先从入门知识学起~~
http://www.linuxsir.cn/bbs/showthread.php?threadid=28945
发表于 2004-4-20 18:05:14 | 显示全部楼层
强烈建议!!!
 楼主| 发表于 2004-4-20 19:02:07 | 显示全部楼层
:confused: :confused: 本来想你们帮我指点指点的~~
我下了那个教程打印了
幸亏只有2毛一张
不然打印都没钱了^_^
就帮我解释解释吧
急用啊~~!!!
发表于 2004-4-20 20:16:22 | 显示全部楼层
最初由 MyRee 发表
:confused: :confused: 本来想你们帮我指点指点的~~
我下了那个教程打印了
幸亏只有2毛一张
不然打印都没钱了^_^
就帮我解释解释吧
急用啊~~!!!

兄弟,不是大家不帮助你,而是,一看你提的问题,就是没有学过shell的,既然没有学过,那么就要把基础打好,从入门知识学起,否则,就是给你解释了,同样,你也学不到东西的!.....而且,咱们论坛是互相交流互相学习的论坛,而不是给某些人当做作业的"枪手"的!
ps:学习是要付出的,时间,精力,当然,还有金钱~~,书店里有很多linux和shell方面的书籍,是很值得买的!
 楼主| 发表于 2004-4-20 21:28:47 | 显示全部楼层
0)set 'date';m=$2;y=$6;; /*不懂m,y分别代表月年,但是$2,6是干吗的*/
这句的$2 $6什么意思?
不过分吧?
发表于 2004-4-20 21:38:18 | 显示全部楼层
最初由 MyRee 发表
0)set 'date';m=$2;y=$6;; /*不懂m,y分别代表月年,但是$2,6是干吗的*/
这句的$2 $6什么意思?
不过分吧?

运行一下:sh -x urscript
我想你就明白了
ps:看你的注释,你对C应该有了解
发表于 2004-4-20 22:17:08 | 显示全部楼层
这是比较完整的解释,有不明白的尽管问建议多看看入门的教程...goodluck
  1. /home/javalee#cat d
  2. #!/bin/bash[color=blue]
  3. #这是一个case条件选择语句,以case开始[/color]
  4. case $# in[color=blue]
  5. #如果你没有输入参数,即$#=0,那么:
  6. #把date命令的输出:
  7. #二  4月 20 22:09:52 CST 2004
  8. #$1  $2  $3   $4     $5   $6
  9. #中的$2(月)和$6(年)分别赋值给m和y[/color]
  10. 0)set 'date';m=$2;y=$6;;[color=blue]
  11. #如果你输入了一个参数即$#=1,那么:
  12. #把date的输出的月的那一项,也赋值变量m,并把$6(年的那项)赋值给变量y[/color]
  13. 1)m=$1;set 'date';y=$6;;[color=blue]
  14. #如果你输入了过多的参数,即$#>2,那么:
  15. #把第一个参数赋值给变量m,第2个参数赋值给变量y[/color]
  16. *)m=$1;y=$2;;[color=blue]
  17. #条件结束,用esac作为标识[/color]
  18. esac[color=blue]
  19. #这又是一个case结构
  20. #在$m中做出选择(判断),这里的$m就是参数1,即月[/color]
  21. case $m in
  22. jan*|Jan*)m=1;;
  23. feb*|Feb*)m=2;;
  24. mar*|Mar*)m=3;;
  25. apr*|Apr*)m=4;;
  26. may*|May*)m=5;;
  27. jun*|Jun*)m=6;;
  28. jul*|Jul*)m=7;;
  29. aug*|Aug*)m=8;;
  30. sep*|Sep*)m=9;;
  31. oct*|Oct*)m=10;;
  32. nov*|Nov*)m=11;;
  33. dec*|Dec*)m=12;;
  34. [1-9]|10|11|12);;
  35. *)y=$m;m="";;
  36. esac[color=blue]
  37. #cal命令的用法,见cal --help,或man cal,这个命令是一个(月历表)[/color]
  38. cal $m $y
  39. [color=red]test:[/color]
  40. /home/javalee#ksh d
  41.       四月 2004
  42. 日  一  二  三  四  五  六
  43.              1  2  3
  44. 4  5  6  7  8  9 10
  45. 11 12 13 14 15 16 17
  46. 18 19 20 21 22 23 24
  47. 25 26 27 28 29 30

  48. /home/javalee#ksh 3 2003
  49. ksh: 3: No such file or directory
  50. /home/javalee#ksh d 3 2000
  51.       三月 2000
  52. 日  一  二  三  四  五  六
  53.           1  2  3  4
  54. 5  6  7  8  9 10 11
  55. 12 13 14 15 16 17 18
  56. 19 20 21 22 23 24 25
  57. 26 27 28 29 30 31

  58. /home/javalee#
复制代码
 楼主| 发表于 2004-4-20 22:25:59 | 显示全部楼层
说出来不好意思:我是计算机系的
C/C++都会
 楼主| 发表于 2004-4-20 22:32:57 | 显示全部楼层
谢谢
我以后还要问哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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