Bash脚本不起作用。有谁知道为什么?

时间:2017-12-13 12:25:29

标签: bash syntax

我在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

谢谢!

2 个答案:

答案 0 :(得分:0)

Bash if statement

你的剧本通常是不正确的,所以想一想它为什么不起作用是没有意义的。

答案 1 :(得分:0)

如评论所示,您使用的语法更像是Microsoft Windows批处理(.bat)文件。以下是对bash的转换。要查看read的语法,请键入help read

if语句(阅读man bashthis)的语法起初令人困惑。 [[实际上是一个命令,它执行模式匹配,并显示了一个简单的示例。该模式只能位于=的右侧。请注意,也可以使用==,但标准说使用=

简单测试也可以使用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语句。