【问题标题】:Bash Script Not Working. Does anyone know why?Bash 脚本不工作。有谁知道为什么?
【发布时间】:2018-05-27 08:10:47
【问题描述】:

我在 bash 脚本中编写了这段代码。当我运行它时,提示“开始?[y/n]”,但无论我响应什么,它都会关闭窗口。另外,if 语句的正确语法是什么。

@echo off
set /p choice="Start? [y/n] "
echo $choice
echo $choice$
if $choice$ == "y"
then 
goto Labelyes
fi

if $choice$ == "n"
then
exit
fi

:Labelyes
echo YAY
set /p goodbye="BYE"
if [1==1]; then exit; fi

谢谢!

【问题讨论】:

  • 这不是bash,对于初学者来说。它看起来更像一个 DOS 批处理脚本。
  • 使用“读取”命令:stackoverflow.com/questions/226703/…
  • 学习基本的 Bash 教程,有很多,只需在搜索引擎中输入“bash tutorial”。

标签: bash syntax


【解决方案1】:

正如所评论的,您使用的语法更像是 Microsoft Windows 批处理 (.bat) 文件,而不是其他任何东西。下面是对 bash 的转换。要查看读取的语法,请输入 help read

if 语句(阅读 man bashthis)的语法起初令人困惑。 [[ 实际上是一个command,它进行模式匹配,并给出了一个简单的例子。该模式只能在= 的右侧。请注意,== 也可以使用,但标准要求使用 =

简单测试也可以使用test 命令或[。算术测试使用((

goto 是一个四个字母的词,不用于礼貌的圈子(有些人不同意)。

#!/usr/bin/env bash

#set /p choice="Start? [y/n] "
read -p "Start? [y/n] " choice

echo "$choice"
#echo $choice$

if [[ $choice = [Yy]* ]]   # Accepts y, Y, yes, Yup, etc...
then
    #goto Labelyes
    echo YAY               # Quotes are optional, but beware embedded whitespace
    #set /p goodbye="BYE"
    read -p "BYE" goodbye

elif [[ $choice == "n" ]]  # Only n   "elif" means "else if"
then
    exit
else
    # What happens if neither Y nor N were given?
    echo "Invalid response, exiting anyway"
fi

#I have no idea what this is supposed to be for
#if [1==1]; then exit; fi

您可以改用case 语句,但在尝试之前先理解if 语句。

【讨论】:

    【解决方案2】:

    Bash if statement

    您的脚本通常不正确,因此考虑它为什么不起作用是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-04
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      相关资源
      最近更新 更多