如何以非交互式方式在shell脚本中传递多个变量作为输入



我试图通过在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脚本选项/参数

相关内容

  • 没有找到相关文章

最新更新