LinuxSir.cn,穿越时空的Linuxsir!

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

看这个脚本错在哪

[复制链接]
发表于 2003-6-29 10:03:43 | 显示全部楼层 |阅读模式
#!/bin/bash
for file in directory
do
if test -f $file
then
if test -x $file
then
if test -w $file
then
cat $file
fi;fi;fi;
done
发表于 2003-6-29 10:15:10 | 显示全部楼层
1,if..then..fi结构!
当有多路分支判断的时候,建议用
if ...
then
...
elif
...
elif
...
else
...
fi
因为test这个关键字是过时的!(bash),或者用case来处理!
2,for中的变量跟循环体中的不一致,将directory改为*,即当前目录下的所有文件!
3,这样试试看
for file in *
do
if [[ -f $file && -x $file && -w $file ]]
then
cat $file
fi
done
 楼主| 发表于 2003-6-29 10:56:32 | 显示全部楼层
that is good!!
thanks!!

还有一个问题:
怎么要用 [[............]]    ?
发表于 2003-6-29 11:00:53 | 显示全部楼层
用[...]也可以,他是对里面的字符表达式进行检测的运算符,相当于test命令!,而[[ ... ]] 是[...]的改进,增加了对通配符扩展的支持,如:在[[..]]中可以允许有*之类的字符,而[..]是不支持的!类似的还有对数字进行检测的(...),和((...));)
 楼主| 发表于 2003-6-29 20:32:17 | 显示全部楼层
#!/bin/bash
echo "input directory;"
read directory
for file in $directory
if [[ -f $file && -x $file && -w $file ]]
then
cat $file
fi
done

input:
/etc
output:
<null>
怎么没反应??我怎么老是这么失败.


还有,那个     f  代表普通文件,什么是普通文件??
发表于 2003-6-30 00:31:35 | 显示全部楼层
给我都绕晕啦~~;)
  1. #!/bin/bash
  2. #
  3. echo -n "input directory:"
  4. read input
  5. f=$(ls $input)        #将你输入目录的列表内容赋值给f
  6. for file in $(echo $f|tr ' ' '\n')        #在for中的变量列表逐行显示便于下面处理,tr的那段是把空格换成回车
  7. do
  8. if [[ -f $file && -x $file && -w $file ]]
  9. then
  10. cat $file
  11. fi
  12. done
复制代码
你再试试看吧
*:我已经通过测试,但是只对当前目录下的子目录有效!
*:对循环结构的处理,变量的替换以及如何对文件进行检测方面的东东,还是请看置顶的入门铁子;)
 楼主| 发表于 2003-6-30 01:33:25 | 显示全部楼层
我又有新的办法了。

#!/bin/bash
echo -n "input directry:"
read dir
dir -R $dir | (while read file;
do
if [[ -f $file && -x $file && -w $file ]]
then
cat $file
fi
done
)
把目录打一个
又没反应   
有什么问题???
发表于 2003-6-30 01:52:07 | 显示全部楼层

1,那个管道符号|用于对数据的过滤处理!他产生一个进程,而你却把他输入给一个循环!错误之一
2,在你那个循环结构中,
1]没有指定循环次数(while).
2]那个read file的file从何而来?
错误之二
3,你用一个()括号?什么意思,多此一举而无任何作用,
4,有些概念也许你还没弄明白!;)
5,我有说的不到之处,请见谅,咱们是交流嘛~~
我建议兄弟还是先看看本版的入门教程吧~~;)
 楼主| 发表于 2003-6-30 10:20:10 | 显示全部楼层
还是先打好基础 再解决这问题
发表于 2003-6-30 23:04:26 | 显示全部楼层
好课程,自己先写了一遍,然后又看javalee的写法,又学了几点。


  1. #!/bin/bash
  2. DIR="\033[01;34m"

  3. echo "Please input your directory:"
  4. read dir

  5. myfun()
  6. {
  7.         local file

  8.         for file in $(ls -1 $1)
  9.         do
  10.                 #echo $1/$file
  11.                 if   [ -d $1/$file ]; then
  12.                         echo -e "${DIR}$f${NULL}"
  13.                         myfun $1/$file
  14.                 elif [[ -f $file && -x $file && -r $file ]]; then
  15.                         echo $1/$file
  16.                 fi
  17.         done
  18. }

  19. myfun $dir

复制代码

这是一个综合以后比较完整的,通过递归可以显示所有目录的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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