我试图通过在bash-env中声明$username和$password变量,使这个交互式脚本以非交互式的方式接受输入,并将它们作为输入传递给脚本。通过跑步/input.sh<lt<quot$用户名";
#!bin/bash
read username
read password
echo "The Current User Name is $username"
echo " The Password is $password"
有没有办法将这两个变量都作为输入传递?因为我尝试过的方法只需要一次输入。
因此,尽可能接近您的初次尝试(但我怀疑这是解决任何实际问题的最佳方案(,您所要求的是"我如何用这里的字符串传递2行;。
一个可能的答案是
./input.sh <<< "$username"$'n'"$password"
此处字符串是使用<<<
时使用的构造。当您键入./input.sh <<< astring
时,它在某种程度上与键入echo astring | ./input.sh
相同:它使用字符串作为./input.sh
的标准输入。由于read
的读取行数,您需要2行作为标准输入来实现您想要的内容。你本可以这样做:(echo "$username" ; echo "$password") | ./input.sh
。或者无论如何,它产生2行,一行带有$username
,一行带$password
,并将这2行重定向为./input.sh
的标准输入
但有了这根绳子,你就不能分成几行。。。除非在输入字符串中显式引入回车(c表示法中的n
(。我在这里使用$'...'
符号,它允许c转义。
编辑。为了好玩,我在这里包括了我在评论中写的其他解决方案,因为你并没有特别要求这里的字符串。
(echo "$username" ; echo "$password") | ./input.sh
{echo "$username" ; echo "$password" ; } | ./input.sh
printf "%sn" "$username" "$password" | ./input.sh
./input.sh < <(echo "$username" "$password")
./input.sh < <(printf "%sn" "$username" "$password")
当然还有改变./input.sh
的解决方案
#!bin/bash
username="$1"
password="$2"
echo "The Current User Name is $username"
echo " The Password is $password"
用./input "$username" "$password"
调用
或
#!bin/bash
echo "The Current User Name is $username"
echo " The Password is $password"
用username="$username" password="$password" ./input.sh
调用
最简单的方法是这样的:
#!/bin/bash
echo "The Current User Name is $1"
echo "The Password is $2"
$1表示给定的第一个参数,$2表示第二个参数。
[user@vm ~]$ input.sh "user" "password"
在引号("(内放入要传递的参数。
要获得更专业/稳健的解决方案,请查看:Redhat:Bash脚本选项/参数