LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: LYOO

写了一个显示目录树的脚本,可输出不对

[复制链接]
发表于 2003-4-26 21:38:19 | 显示全部楼层
呵~~,我也正琢磨呢!...
不知道find . -type d 这个命令对你是否有帮助?
发表于 2003-4-26 22:44:24 | 显示全部楼层
LY00兄,有现成的脚本在[脚本欣赏区]
就是用我的思路:find . -type d
 楼主| 发表于 2003-4-26 23:38:52 | 显示全部楼层
好简捷,不过我没学sed,看得还不大明白,这个脚本是乎有点问题,照原样拷贝的脚本,有语法错误无法执行,我改了一下,但实现的效果不甚理想,javalee检查一下吧。
发表于 2003-4-26 23:52:18 | 显示全部楼层
嗯~~,我认为那个sed就是把find的输出编辑编辑美化美化而已~并无特别之处.
其实shell编程,更多的是倚赖linux和shell内建的命令,尤其是linux的命令,是取之不尽的资源,解决问题,应该由简避繁,简单实用方便快捷是shell的特色嘛~~(个人观点)
 楼主| 发表于 2003-4-26 23:54:20 | 显示全部楼层
javalee所言极是,所谓KISS(Keep It Simple & Short)原则,不过要想KISS就得多学点东西,呵呵,等我看到sed、awk应该就能更好的写这个工具了。

附一个老外写的目录树显示工具(好象RH下的那个tree小命令就是它了),程序、输出都很漂亮,不过是C写的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2003-4-27 01:38:37 | 显示全部楼层
刚刚翻了翻书,发现Linux7.X版本中有个tree的命令,很好使用的,但是不知道为什么8.0没有~~?
发表于 2003-4-27 13:22:47 | 显示全部楼层
8.0的光盘里也有呀
tree-1.2-20.i386.rpm                              03-Sep-2002 23:42    15k
 楼主| 发表于 2003-4-27 20:02:50 | 显示全部楼层
终于搞定了,自己动手果然有不少体会。

  1. #!/bin/bash

  2. redir ()
  3. {
  4.         #tab是真正的步长计算器
  5.         tab=$tab$singletab
  6.         line=${tab%"$singletab"}"|-------"

  7.         #local比较关键,它规定了count是当前的参数列表值
  8.         local count=$#

  9.         for file in "$@"; do
  10.                 thisfile=${thisfile:-$PWD}/$file

  11.                 #判断当前文件是否为目录,如果是就开始递归       
  12.                 if [ -d "$thisfile" ]; then
  13.                        
  14.                         #如果当前目录是分枝列表的最底层,则需进行特殊处理。
  15.                         if [ $count -eq 1 ]; then
  16.                                 echo -e $line$file/
  17.                                 #将前一个|符号去掉,看看目录树就知道为什么了。
  18.                                 tab=${tab%"$singletab"}"\t"
  19.                                 redir $(ls $thisfile)
  20.                         else

  21.                                 echo -e $line$file/
  22.                                 redir $(ls $thisfile)
  23.                         fi
  24.                        
  25.                 else
  26.                         echo -e $line$file
  27.                 fi
  28.                
  29.                 thisfile=${thisfile%/*}
  30.                 let count=count-1       
  31.         done
  32.        
  33.         #这一步比较有意思,因为从递归出来的tab结尾可能是TAB也可能是$singletab,所以分成两步来去掉。
  34.         tab=${tab%"\t"}
  35.         tab=${tab%"|"}
  36.         line=${tab%"$singletab"}"|-------"
  37. }


  38. singletab="|\t"
  39. userinput="$@"
  40. if ls $userinput; then

  41.         for file in ${userinput:-.}; do
  42.                 echo $file
  43.                 echo '|'
  44.                 if [ -d "$file" ]; then
  45.                         cd $file
  46.                         redir $(ls)
  47.                         cd ..
  48.                 fi
  49.         done
  50. else
  51.         echo "$userinput is wrong"
  52. fi
复制代码

看看效果,还不错吧:p

  1. /home/lyoo/GNUstep
  2. |
  3. |-------Defaults/
  4. |       |-------WindowMaker
  5. |       |-------WMGLOBAL
  6. |       |-------WMRootMenu
  7. |       |-------WMState
  8. |       |-------WMWindowAttributes
  9. |       |-------WPrefs
  10. |-------Library/
  11.         |-------Icons/
  12.         |-------WindowMaker/
  13.                 |-------autostart
  14.                 |-------Backgrounds/
  15.                 |-------IconSets/
  16.                 |-------Pixmaps/
  17.                 |-------plmenu
  18.                 |-------Sounds/
  19.                 |-------SoundSets/
  20.                 |-------Styles/
  21.                 |-------Themes/
复制代码
发表于 2003-4-27 20:46:33 | 显示全部楼层
恭喜~~~
可以把源文件放[脚本欣赏区]吗?!;)
发表于 2003-4-28 19:40:04 | 显示全部楼层
两位斑竹,我对上面的脚本有些不理解:
if(...)后,then之前还要加分号吗?

还有,我把这个脚本输入后执行不了,说是有个else有问题(就是第一个redir $(ls $thisfile)后的else),不知为什么,请指教。

错误提示好象是什么near unexpected token else...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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