从命令行将值读取到数组

时间:2019-04-04 21:20:26

标签: arrays linux bash

对于家庭作业,如果磁盘空间低于特定阈值,我需要通过指定的电子邮件地址发送电子邮件。但是,我在将电子邮件地址传递给变量时遇到问题。用户可以在命令提示符下指定任意多个电子邮件地址。另外,如果它们不包含域,则电子邮件仍应发送到“ @ uml.edu”地址。

我正在尝试解决用户通过使用数组输入未知数量的电子邮件地址的问题。我从没真正在bash中使用过数组,我想我可能使用了不正确的语法。

我不知道我是否需要使用数组来完成我正在做的事情,但这似乎是最有意义的。我已经尝试过使用for循环来接受多个值,并且正在使用case语句来处理用户是否包括电子邮件地址的域。

#!/bin/bash

email=()

for {{ x=0; $#<0; x++ ))

   do

      case $1 in

         *@*) email[x]="$1"
         shift ;;

         *) email[x]="${1}@uml.edu"
         shift ;;

      esac

   done

echo ${email[@]}

上面的代码基本上是一个测试用例,一旦我可以正常工作,我便可以将其工作到主代码中。预期的结果是,用户可以在命令行中输入一个或多个电子邮件地址,然后通过echo命令显示它们。

1 个答案:

答案 0 :(得分:2)

使用+=附加到数组,如下所示:

array+=(foo bar baz)

这将使您摆脱x变量。您也可以循环"$@",而不必关闭shift个参数。

for arg in "$@"; do
  case $arg in
    *@*) email+=("$arg");;
    *)   email+=("$arg@uml.edu");;
  esac
done

如果有疑问,请引用您的变量扩展名。

echo "${email[@]}"

(在上面的case $arg in中并不需要。但是如果您在此处引用它,也没有什么害处。)