【问题标题】:How can I read user input in a Bash script? [duplicate]如何在 Bash 脚本中读取用户输入? [复制]
【发布时间】:2018-02-27 09:55:33
【问题描述】:

使用 Bash,我尝试像这样读取用户的输入:

#!/bin/bash

function read_from_user {
cat | echo
}

echo 'Do you want to create the folder "new.folder" ?'
var=`read_from_user`
if [[ ${var} == yes ]]; then
mkdir new.folder
fi

echo 'var is: ${var}'

但它不起作用,var 为空,即使用户输入不为空。

如何从我的 Bash 脚本中读取用户输入?

【问题讨论】:

标签: bash shell


【解决方案1】:

你应该使用read:

#!/bin/bash
echo 'Do you want to create the folder "new.folder" ?'
read var
if [[ "$var" == "yes" ]]; then
    mkdir new.folder
fi
echo "var is: $var"

如果你真的想使用cat,你可以这样做,因为cat 没有任何参数从stdin 读取:

#!/bin/bash
echo 'Do you want to create the folder "new.folder" ?'
var=$(cat)
if [[ "$var" == "yes" ]]; then
    mkdir new.folder
fi
echo "var is: $var"

但是,您必须在输入输入后使用CTRL + DEOF 发送到您的程序。否则cat 将等待更多。 read 是一种更简洁的询问用户输入的方式。

【讨论】:

  • 好的,你知道如果我可以通过猫来做吗?
  • @Jor.Mal 我添加了一个cat 替代我的答案。请注意,最好使用read
【解决方案2】:

您的代码几乎是正确的,您只需更改您的函数以将用户输入读入变量调用var。您还需要在两个地方更改代码。一个在函数中,一个在调用函数的地方。我修改了您的代码,如下所示:-

#!/bin/bash

function read_from_user {
read -r var #here you are reading user input to variable `var`
}

echo 'Do you want to create the folder "new.folder" ?'
#var=`read_from_user`
read_from_user #here you are calling the function to read user input
if [[ ${var} == yes ]]; then
mkdir new.folder
fi

echo "var is: ${var}"

也总是比较像if [[ "${var}" == "yes" ]]; 这样的两个字符串,但你上面的 if 条件也可以正常工作。

也是最好的方法,如下所示,您不需要单独的 echo 语句,输入将在最后输出消息中读取:-

#!/bin/bash

function read_from_user {
read -p 'Do you want to create the folder "new.folder" ? ' var
}

#echo 'Do you want to create the folder "new.folder" ?'
#var=`read_from_user`
read_from_user
if [[ "${var}" == "yes" ]]; then
mkdir new.folder
fi

echo "var is: ${var}"

【讨论】:

    猜你喜欢
    • 2022-12-16
    • 2016-11-18
    • 1970-01-01
    • 2020-10-18
    • 2021-07-06
    • 2012-11-18
    • 2021-12-24
    • 2020-06-18
    • 2013-01-18
    相关资源
    最近更新 更多