我如何在cygwin中编写shell脚本? (尤其是case语句/循环)

问题描述 投票:0回答:1

[要学习如何在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:

还有,当我直接从教程中复制并粘贴时,我得到相同的结果。

linux bash shell loops cygwin
1个回答
2
投票

Shell脚本是一个文本文件,因此您需要一个文本编辑器。Windows记事本不能胜任此工作,因为它无法处理带有LF(换行)行终止的文件。它使用CRLF(回车换行)作为Windows标准。

最近,我发现Notepad ++可以很好地替代Notepad,因为它可以处理两个终端。 https://notepad-plus-plus.org/downloads/

当然,有大量的文本编辑器针对具有这种功能的程序员。

在Cygwin本身中,有几种文本编辑器可用,最常用的可能是ViM。您可以从安装程序安装它。

enter image description here

它非常强大,并且有大量的教程来学习如何使用它。

转到您的示例,我们需要写入2个文件myscript.shmyfile

$ vim myscript.sh

i进入insert mode,然后输入除ESC以外的所有文字以进入command mode,然后按:wq写入所有文件并退出。

enter image description here

以类似的方式写myfile

$ vim myfile

enter image description here

比我们在脚本中添加了可执行标志

$ chmod +x  myscript.sh

并运行它

$ ./myscript.sh
English
American
Australian
French
German
© www.soinside.com 2019 - 2024. All rights reserved.