第 45 行语法错误:意外的文件结尾

第 45 行语法错误:意外的文件结尾

现在无论我做什么,它总是说即使使用 fi 它也不会这样做,请帮助我调试代码。此外,这有 44 行文本,它说第 45 行,而且 ascii 艺术只是一只狗,但它看起来可能很奇怪,因为我们在较小的区域。

#!/bin/bash 
clear 

echo "Hello Sir How are you? These are some of my features
date
picture"

read word

if [ $word = picture ]
echo "These are the following pictures I have at my disposel: 
Dog"

if [ $word = date ]

w

fi

read word 

if [ $word = dog ]

fi

echo "
      __,-;;;\
    /;;;;;;;;;;;;;;;/ l \ヽ | /___
   /;;;;;;;;;;;;;;/        ヽ;;;;;;\
  ヽ;;;;;;;;;;;ノ         |;;;;;;;;;;;l
  / ̄~~           |;;;;;;;;;;;;l
  フ  ○          \;;;;;ノ
 ,-~~         ○    ヽ,,,,,,,,,,,,,,、   , , ,
  ~/      ●        \,;;;;;;;;;;;;;;;;;;,V;;;;;;;;;゙,
  l_,,,               >,;;;;;;;;;;;;;;;;;;;;;;ヽ;;;;;;;,゙
   |/l  /l ,      ヽ |ヽl,;;;;;;;;;;;;;;;;;;;;;;;;;;;;i- ''
      Y  V ヽllノ レ ヽ)V;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;j
      ゙,               ' ' ' ' ' ' ,',,'
      ゙,    ヽ-,,,,,,,,゙,    ゙       ゙
       ゙,     ゙,  ,゙ ゙    ゙,゙゙゙゙゙,    .,゙
       ゙,    ,゙  ゙,,,゙,     ゙,  ゙,     ,l
        ゙' ' ' ' ' '    ゙' ' ' ' ' '   ゙' ' ' ' '  " 

答案1

您收到的错误是因为 bash 正在寻找块的末尾if但在文件末尾之前找不到它,这就是错误出现在第 45 行的原因。

现在,您有各种语法错误,首先,一个if块看起来像这样:

if [ test something ]
then
    do something
fi

需要关键字then和。然后,您应该在测试构造中引用变量和字符串,并且还应该注意,脚本会因空格和意外输入而中断。fi[ ]

脚本的有效版本如下:

#!/bin/bash 
clear 

echo "Hello Sir How are you? These are some of my features
date
picture"

read word

if [ "$word" = "picture" ]
then
echo "These are the following pictures I have at my disposel: 
Dog"
fi


if [ "$word" = "date" ]
then
    w
fi

read word

if [ "$word" = "dog" ]
then
echo "
      __,-;;;\
    /;;;;;;;;;;;;;;;/ l \ヽ | /___
   /;;;;;;;;;;;;;;/        ヽ;;;;;;\
  ヽ;;;;;;;;;;;ノ         |;;;;;;;;;;;l
  / ̄~~           |;;;;;;;;;;;;l
  フ  ○          \;;;;;ノ
 ,-~~         ○    ヽ,,,,,,,,,,,,,,、   , , ,
  ~/      ●        \,;;;;;;;;;;;;;;;;;;,V;;;;;;;;;゙,
  l_,,,               >,;;;;;;;;;;;;;;;;;;;;;;ヽ;;;;;;;,゙
   |/l  /l ,      ヽ |ヽl,;;;;;;;;;;;;;;;;;;;;;;;;;;;;i- ''
      Y  V ヽllノ レ ヽ)V;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;j
      ゙,               ' ' ' ' ' ' ,',,'
      ゙,    ヽ-,,,,,,,,゙,    ゙       ゙
       ゙,     ゙,  ,゙ ゙    ゙,゙゙゙゙゙,    .,゙
       ゙,    ,゙  ゙,,,゙,     ゙,  ゙,     ,l
        ゙' ' ' ' ' '    ゙' ' ' ' ' '   ゙' ' ' ' '  " 
fi

请注意,您仍然有设计问题,这不是一个写得很好的脚本,除了没有处理任何错误之外,如果输入任何选项,您也不会退出,这意味着无论我做什么,我最终都会得到狗打印。即使我输入date,您可能也想exit在其中添加一些调用。

答案2

你错过了fi这里,我把它清理了一下(例如处理) -

if [ "$word" = "picture" ]; then
  echo "These are the following pictures I have at my disposal: Dog"
fi # <-- Right there.

相关内容