sh文件运行问题

时间:2011-03-31 19:43:44

标签: bash shell sh

我写的是sh文件。当我执行它时它无法正常工作。但是通过使用相同的命令来独立命令提示它工作。可能是什么问题?我是shell脚本的新手。所以任何帮助都会不胜感激。这是我的文件,包括:

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

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

4 个答案:

答案 0 :(得分:1)

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

shell比你输入命令更快地执行命令;当你grep“免费”wget可能还没有完成

答案 1 :(得分:1)

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

第二个问题是在cd ..之后,rms.txt和free.txt不再在当前工作目录中,因此最后两行引用看似不存在的文件。

最后,目前还不清楚你要用这个搜索来完成什么 - 正如你所写的那样,它只会向终端打印一堆东西。同样,目前还不清楚file.txt应该是什么 - 它在其他任何地方都没有被引用。

一般情况下,除了问题代码之外,如果你指出你的目标是有用的。

答案 2 :(得分:1)

在grep运行时,wget还没有完成(可能还没有启动)。删除wget行末尾的&符号,然后将其添加到脚本调用中。

答案 3 :(得分: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

最后一个脚本行在free.txt中放入10行包含free的rms.txt。此时rms.txt可能还不存在。你最好删除&amp;在上一行的末尾,以顺序执行每一行。

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