2011-03-31 134 views
1

我写的是sh文件。当我执行它时,它不能正常工作。但是通过使用相同的命令来独立地命令提示符,它可以工作。可能是什么问题?我是shell脚本中的新手。因此,任何帮助将是appreciated.Here是包括我的SH文件:sh文件运行问题

mkdir prelab5 
cd prelab5 
wget http://cse.yeditepe.edu.tr/~oturkes/spring2011/cse232/week7/rms.txt & 
grep "free" rms.txt | tail -n 10 > free.txt 
cd .. 
find /home/misafir -perm -755 
chmod 744 file.txt 
grep "free" rms.txt | wc 
tr 'a-z' 'A-Z'<free.txt 

后台进程意味着它是在后台工作,让我们使用终端simultaneously.Also,而我们让工作进程在后台,我们可以在屏幕上看到这个后台进程的唯一进程id(pid)。因此,通过使用这个独特的pid,我们可以在这个bckground工作进程上执行一些任何命令。

+1

你明白每条线的作用吗? – log0 2011-03-31 19:49:45

回答

1

删除wget命令末尾的&符号。

shell执行命令的速度比键入它们要快;当你grep的“免费”wget可能还没有完成

1

第一个问题是在wget行&。它在后台启动wget,然后立即grems rms.txt - 但该文件可能尚未完成下载。删除&,它应该没问题。

第二个问题是,在你cd ..之后,rms.txt和free.txt不再在当前工作目录下,所以最后两行代表看起来不存在的文件。

最后,你很难弄清楚你试图用find来完成 - 就像你写的那样,它只会在终端打印一堆东西。同样,目前还不清楚file.txt应该是什么 - 它并没有被引用到其他地方。

一般来说,如果您指出除了问题代码之外还有什么目标,那么这很有帮助。

1

wget没有完成(可能还没有开始)的时间grep运行。取消wget行末尾的&符号,并将其添加到脚本调用中。

0

脚本中存在不同的问题。在这一点上,我不确定你知道每一行都在做什么。所以

mkdir prelab5 # create a dire prelab5 
cd prelab5 # change dir to prelab5 
wget http://cse.yeditepe.edu.tr/.../rms.txt & #dl rms.txt 
grep "free" rms.txt | tail -n 10 > free.txt 

这最后一个脚本行将10行rms.txt包含free.txt中的free。此时rms.txt可能还不存在。您最好删除前一行末尾的&,以便按顺序执行每一行。

cd .. # go back to the parent directory 
find /home/misafir -perm -755 

该行在其他地方搜索文件,但结果未被使用。

chmod 744 file.txt # Modify a file we didn't hear about before 
grep "free" rms.txt | wC# Should fail since rms.txt is not in this directory 
tr 'a-z' 'A-Z'<free.txt # Doesn't work this way