Чтение значений в массив из командной строки - PullRequest
1 голос
/ 05 апреля 2019

Для выполнения домашнего задания мне нужно отправить электронное письмо с указанных адресов электронной почты, если место на диске падает ниже определенного порога. Однако у меня возникли проблемы с передачей адресов электронной почты в переменную. Пользователь может указать столько адресов электронной почты, сколько ему нужно, в командной строке. Кроме того, если они не содержат домен, электронная почта все равно должна отправляться на адрес "@ 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 Ответ

2 голосов
/ 05 апреля 2019

Используйте += для добавления в массив, например:

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 выше. Но это не повредит, если вы все же процитируете это там.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...