为了学习如何编写shell脚本来完成OverTheWire (Bandit)这一关,我在shellscript.sh上学习了shell脚本教程。
我花了一些时间才明白,既然我使用cygwin,我不能只写这样的东西:
#!/bin/sh
MY_MESSAGE="Hello World"
echo $MY_MESSAGE而不将其保存到var.sh等文件中
然而,我编写代码和节省cygwin的方式与我在网上看到的大多数教程的方式有很大的不同,因为似乎每个人都在使用GNU或Kali Linux。
我在cygwin上编写这段代码的方式必须是:
echo '#!/bin/sh' > var.sh
echo 'MY_MESSAGE="Hello World"' > var.sh
echo 'echo $MY_MESSAGE' >> var.sh这是非常麻烦和缓慢的(因为我只能在按回车键之前放入一行代码),而像Kali Linux,我似乎只能复制和粘贴教程中的代码。
尽管如此,我还是得到了想要的结果,但在case语句的形式上,我遇到了一块不可移动的石头。我现在尝试运行的shell脚本如下所示:
#!/bin/sh
while read f
do
case $f in
hello) echo English ;;
howdy) echo American ;;
gday) echo Australian ;;
bonjour) echo French ;;
"guten tag") echo German ;;
*) echo Unknown Language: $f ;;
esac
done < myfile到目前为止,除了语法错误,我什么都没有得到。我不确定我该如何格式化它。能帮帮我吗?
编辑:
stoya@Home-PC ~
$ #!/bin/sh
stoya@Home-PC ~
$ while read f
> do
> case $f in
> hello) echo English ;;
> howdy) echo American ;;
> gday) echo Australian ;;
> bonjour) echo French ;;
> "guten tag") echo German ;;
> *) echo Unknown Language: $f ;;
> esac
> done < myfile这是我将教程中的代码复制并粘贴到Notepad++,然后将代码复制并粘贴到cygwin时得到的结果。
在我按回车键后,我得到如下结果:
stoya@Home-PC ~
$ #!/bin/sh
stoya@Home-PC ~
$ while read f
> do
> case $f in
> hello) echo English ;;
> howdy) echo American ;;
> gday) echo Australian ;;
> bonjour) echo French ;;
> "guten tag") echo German ;;
> *) echo Unknown Language: $f ;;
> esac
> done < myfile
Unknown Language:此外,当我直接从教程中复制和粘贴时,我得到了相同的结果。
发布于 2020-05-10 14:25:14
shell脚本是一个文本文件,因此您需要一个文本编辑器。Windows记事本不适合此作业,因为它无法处理带有LF (换行)行终止的文件。它使用CRLF (回车换行符)作为windows标准。
最近,我发现Notepad++是Notepad的一个很好的替代品,可以处理这两种终止。https://notepad-plus-plus.org/downloads/
当然,有大量的文本编辑器都是针对具有这种能力的程序员的。
Cygwin本身有几个可用的文本编辑器,使用最多的可能是ViM。您可以从安装程序安装它。

它非常强大,有大量的教程可以学习如何使用它。
转到您的示例,我们需要编写2个文件myscript.sh和myfile
$ vim myscript.sh按i键进入insert mode,按ESC键进入command mode,然后按:wq键写入文件并退出。

我们以类似的方式编写myfile
$ vim myfile

然后我们将可执行标志添加到脚本
$ chmod +x myscript.sh并运行它
$ ./myscript.sh
English
American
Australian
French
Germanhttps://stackoverflow.com/questions/61704628
复制相似问题