Bash sh文件运行问题

Bash sh文件运行问题,bash,shell,sh,Bash,Shell,Sh,我是以sh文件的形式编写的。当我执行它时,它无法正常工作。但通过使用相同的命令来独立执行命令提示符,它可以正常工作。可能会有什么问题?我是一名shell脚本新手。因此,任何帮助都将不胜感激。这是我的sh文件,包括: mkdir prelab5 cd prelab5 wget http://cse.yeditepe.edu.tr/~oturkes/spring2011/cse232/week7/rms.txt & grep "free" rms.txt | tail -n 10 >

我是以sh文件的形式编写的。当我执行它时,它无法正常工作。但通过使用相同的命令来独立执行命令提示符,它可以正常工作。可能会有什么问题?我是一名shell脚本新手。因此,任何帮助都将不胜感激。这是我的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
mkdir prelab5
cd prelab5
wgethttp://cse.yeditepe.edu.tr/~oturkes/spring2011/cse232/week7/rms.txt&
grep“free”rms.txt | tail-n 10>free.txt
光盘
find/home/misafir-perm-755
chmod 744 file.txt
grep“free”rms.txt | wc

tr'a-z''a-z'删除wget命令末尾的符号


shell执行命令的速度比键入命令的速度快;当您grep“free”wget可能还没有完成时,第一个问题是wget行上的&。它在后台启动wget,然后立即greps rms.txt-但该文件可能还没有完成下载。拆下&应该没问题

第二个问题是,在
cd..
之后,rms.txt和free.txt不再位于当前工作目录中,因此最后两行表示似乎不存在的文件

最后,很不清楚你想用这个发现完成什么——正如你写的那样,它只会把一堆东西打印到终端上。类似地,还不清楚file.txt应该是什么-它在其他任何地方都没有被引用


一般来说,除了问题代码之外,如果您给出您的目标是什么,这会很有帮助。

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

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

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的10行rms.txt放在free.txt中。此时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
chmod 744 file.txt#修改一个我们以前没听说过的文件
grep“free”rms.txt | wc#应该失败,因为rms.txt不在此目录中

tr'a-z'a-z'你明白每一行的作用吗?