bash用户输入if

时间:2011-04-04 17:21:24

标签: bash user-input

我正在尝试做简单的

Do you want to do that? [Y,n] _
bash中的问题。

我试过

echo "Do that? [Y,n]"
read DO_THAT
if ["DO_THAT"="y"]; then
  do_that
fi

但失败了:bash: [y=y]: command not found

我做错了什么?!

5 个答案:

答案 0 :(得分:45)

您可以考虑显式提示:-p并指定1-character-input -n1,允许在没有ENTER的情况下插入y。

read -n1 -p "Do that? [y,n]" doit 
case $doit in  
  y|Y) echo yes ;; 
  n|N) echo no ;; 
  *) echo dont know ;; 
esac

答案 1 :(得分:8)

echo "Do that? [Y,n]"
read input
if [[ $input == "Y" || $input == "y" ]]; then
        echo "do that"
else
        echo "don't do that"
fi

密切关注if条件的语法和间距,它在bash中一直得到我:)

答案 2 :(得分:6)

在bash中查找read的选项 - 您可以执行提示等。

read -p "Do that? [Y,n]" -i Y input

对于其余部分,请在命令名称周围留出空格('['是一个命令 - 您甚至可以在/bin/[中找到它,尽管它也是内置的shell)和参数。


Bash手册,第4章:Shell内置命令

  

  read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars]  
       [-p prompt] [-t timeout] [-u fd] [name ...]
     

从标准输入或从提供的文件描述符fd读取一行   作为'-u'选项的参数,第一个单词分配给第一个单词   名字,第二个单词到第二个名字,依此类推,剩下的单词和   他们的干预分隔符被分配到姓氏。如果单词较少   从输入流读取而不是名称,分配剩余的名称   空值。 IFS变量值中的字符用于拆分   这句话变成了文字。反斜杠字符'\'可用于删除任何字符   下一个字符读取和行继续的特殊含义。如果不   提供了名称,读取的行被分配给变量REPLY。回报   代码为零,除非遇到文件结尾,读取超时(在这种情况下为   返回代码大于128),或提供无效的文件描述符作为   参数'-u'。

     

选项(如果提供)具有以下含义:

     

-a aname将单词分配给数组变量的顺序索引   aname,从0开始。所有元素都从aname中删除   分配。其他名称参数将被忽略。

     

-d delim delim的第一个字符用于终止输入行,   而不是换行线。   -e Readline(参见第8章[命令行编辑],第93页)   获得这条线。 Readline使用当前(或默认,如果行)   编辑以前没有激活)编辑设置。   -i text如果使用Readline读取行,则将文本放入   在编辑开始之前编辑缓冲区。

     

-n nchars读取nchars字符后返回,而不是等待   对于完整的输入行,但如果少于,则表示分隔符   在分隔符之前读取nchars字符。

     

-N nchars读取完全nchars字符后的返回值而不是   等待完整的输入线,除非遇到EOF或   读出时间。输入中遇到的分隔符是   没有特别处理,并且在nchars之前不会导致读取   字符被阅读。

     

-p prompt在尝试之前显示提示,没有尾随换行符   阅读任何输入。仅在输入到来时才会显示提示   来自终端。

     

-r如果给出此选项,则反斜杠不会作为转义字符。   反斜杠被认为是该行的一部分。特别是,a   反斜杠 - 换行符对不能用作续行。

     

-s静音模式。如果输入来自终端,则字符不是   呼应。

     

-t超时   如果完整的输入行,则会导致读取超时并返回失败   在超时秒内未读取。超时可能是小数   小数点后面的小数部分的数字。这个   选项仅在读取终端读取输入时有效,   管道或其他特殊文件;从常规阅读中没有效果   文件。如果timeout为0,则如果输入可用,则read返回成功   指定的文件描述符,否则失败。退出状态是   如果超过超时,则大于128。

     

-u fd从文件描述符fd。

中读取输入

答案 3 :(得分:4)

您需要在“if”和变量之间放置一个空格:

if [ $var == "y" ]; then echo "ese era el problema" fi

答案 4 :(得分:1)

您可以使用大小写修改操作符:

if [ "${DECISION^^}" = "Y" ]; then
...
fi

您可以在“参数扩展”下的bash手册中找到更多信息。