如何在Bash脚本中读取用户输入?

时间:2018-02-27 09:55:34

标签: bash shell

使用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脚本中读取用户输入?

2 个答案:

答案 0 :(得分:0)

您应该使用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是一种更清晰的方式来询问用户的输入。

答案 1 :(得分:0)

您的代码几乎是正确的,您只需要更改函数以将用户输入读入变量调用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" ]];,但仍然是你的上述条件也将完美。

同样最好的方法就像下面你不需要单独的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}"