2015-05-08 77 views
0

我正在写一个bash脚本,它假设在一个循环中自动重启我的autofs。但是当我尝试运行它时,我只是得到一个语法错误。bash脚本似乎无法执行linux命令

#./dd_nfs.sh 
./dd_nfs.sh: line 3: syntax error near unexpected token `/etc/init.d/autofs' 
./dd_nfs.sh: line 3: `/etc/init.d/autofs reload' 

# cat dd_nfs.sh 
    #!/bin/bash 
    for i in `seq 1 10` 
    /etc/init.d/autofs reload 
    sleep 5 
    echo "read test" 
    do time echo "read" 
    echo "read test done" 
    done 

我试过了dos2unix。我用'pwd'来替换第3行来打印我当前的目录,我尝试去掉/ r,但仍然得到相同的错误。所以我不确定这里发生了什么。

有没有人见过这个? 谢谢

+1

bash的模式是“为......做......完成”。你错过了'do' –

+0

你需要在for循环定义之后有'do'行,在'autofs reload'行有 –

+0

这样做之前,我只是将它和大部分代码一起注释掉了。 –

回答

2

您对for循环的语法错误。它需要do关键字。

更改此:

for i in `seq 1 10` 

这样:

for i in `seq 1 10` ; do 

或者,如果你愿意,你可以写这样的:

for in in `seq 1 10` 
do 
    # body of loop 
done 

(此外,缩进你的代码会使读起来更容易。)

既然你使用bash,该$(command)语法恕我直言,更容易比`command`阅读:

for i in $(seq 1 10) ; do 

和bash提供了简单的范围内一种特殊的语法:

for i in {1..10} ; do 

针对您的最新编辑,你添加了这一行:

do time echo "read" 

在l的身体里接力。 do关键字在该上下文中是语法错误。由于在循环顶部缺少do导致的以前的语法错误,shell可能不会报告它。

+0

啊不好意思,做的部分被我评论了。我会更新我的帖子以反映这一点。 –

+0

我现在工作了。我误解了应该做的事情。我认为它应该在for循环的内容前面,但它不会。谢谢 –

+1

@ D.Zou:它确实在'for'循环体的前面。你将它添加到'for'循环的中间。 –