[要学习如何在OverTheWire(Bandit)上编写Shell脚本来完成一个关卡,我已经在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之类的东西相比,这非常麻烦且缓慢(因为我只能在返回之前写一行代码),看来我只能从教程中复制并粘贴代码。
尽管如此,我已经获得了预期的结果,但是我以案情陈述的形式碰到了一块无法动摇的石头。我现在尝试运行的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:
还有,当我直接从教程中复制并粘贴时,我得到相同的结果。
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
German