使用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脚本中读取用户输入?
答案 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
+ D
将EOF
发送到您的程序。否则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}"