一尘不染

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

linux

我键入的代码与
Linux命令行:完整介绍》
(第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。


阅读 281

收藏
2020-06-02

共1个答案

一尘不染

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,因为在此示例中引号是不必要的)

2020-06-02