意外令牌附近的语法错误'然后'

时间:2013-11-27 06:15:23

标签: linux shell unix

我输入的代码与The Linux Command Line: A Complete Introduction相同,第369页 但提示错误:

line 7 `if[ -e "$FILE" ]; then`

代码如下:

#!/bin/bash
#test file exists

FILE="1"
if[ -e "$FILE" ]; then
  if[ -f "$FILE" ]; then
     echo :"$FILE is a regular file"
  fi
  if[ -d "$FILE" ]; then
     echo "$FILE is a directory"
  fi
else 
   echo "$FILE does not exit"
   exit 1
fi
   exit

我想知道引入错误的原因是什么?我该如何修改代码?我的系统是Ubuntu。

2 个答案:

答案 0 :(得分:56)

if[之间必须有空格,如下所示:

#!/bin/bash
#test file exists

FILE="1"
if [ -e "$FILE" ]; then
  if [ -f "$FILE" ]; then
     echo :"$FILE is a regular file"
  fi
...

这些(及其组合)也将不正确

if [-e "$FILE" ]; then
if [ -e"$FILE" ]; then
if [ -e "$FILE"]; then

另一方面,这些都没关系:

if [ -e "$FILE" ];then  # no spaces around ;
if     [    -e   "$FILE"    ]   ;   then  # 1 or more spaces are ok

顺便说一下这些是等价的:

if [ -e "$FILE" ]; then
if test -e "$FILE"; then

这些也是等价的:

if [ -e "$FILE" ]; then echo exists; fi
[ -e "$FILE" ] && echo exists
test -e "$FILE" && echo exists

而且,使用elif这样的脚本中间部分会更好:

if [ -f "$FILE" ]; then
    echo $FILE is a regular file
elif [ -d "$FILE" ]; then
    echo $FILE is a directory
fi

(我也删除了echo中的引号,因为在这个例子中它们是不必要的)

答案 1 :(得分:0)

解决方案非常简单。 只需在if和下面的开方括号之间留出空间即可。

if [ -f "$File" ]; then <code> fi