Shell脚本调试帮助 - 迭代目录中的文件

时间:2009-11-27 19:46:11

标签: shell

#!/bin/sh
files = 'ls /myDir/myDir2/myDir3/'

for file in $files do
    echo $file
    java myProg $file /another/directory/    
done

我要做的是遍历/ myDir / myDir2 / myDir3 /下的每个文件名,然后使用该文件名作为调用java程序的第一个参数(第二个参数是“/ another / directory”)

当我运行这个脚本时:。 myScript.sh

我收到此错误: -bash:files:找不到命令

我的剧本中出错了什么?谢谢!

4 个答案:

答案 0 :(得分:5)

根据Neeaj的回答,从files =剥离空白。

更好的是,使用:

#!/bin/sh -f
dir=/myDir/MyDir2/MyDir3

for path in $dir/*; do
   file=$(basename $path)
   echo "$file"
   java myProg "$file" arg2 arg3
done

Bash完全能够扩展*通配符本身,而不会生成ls的副本来完成它的工作!

编辑:更改为调用basename而不是echo以满足OP(之前未说明的)要求,即回显的路径是相对的而不是绝对的。如果cwd没关系,那么我会更好:

#!/bin/sh -f
cd /myDir/MyDir2/MyDir3

for file in *; do
   echo "$file"
   java myProg "$file" arg2 arg3
done

并完全避免拨打basename

答案 1 :(得分:1)

files =中的空格剥离为files=RHS of assignment

答案 2 :(得分:1)

删除'='周围的空格:更改

files = 'ls /myDir/myDir2/myDir3/'

成:

files='ls /myDir/myDir2/myDir3/'

并将'do'语句移动到它自己的行:

for file in $files
do
   ....

答案 3 :(得分:0)

引用你的变量而不需要使用ls。

#!/bin/sh 
for file in /myDir/myDir2/* 
do
  java myProg "$file" /another/directory/    
done