现在无论我做什么,它总是说即使使用 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.