首页 > 解决方案 > 从命令行读取值到数组

问题描述

对于我的家庭作业,如果磁盘空间低于某个阈值,我需要向指定的电子邮件地址发送一封电子邮件。但是,我在将电子邮件地址传递给变量时遇到问题。用户可以在命令提示符处指定任意数量的电子邮件地址。此外,如果它们不包含域,则电子邮件仍应发送到“@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 命令显示。

标签: arrayslinuxbash

解决方案


用于+=追加到数组,如下所示:

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上面不需要它。但如果你在那里引用它并没有什么坏处。)


推荐阅读