Скрипт не перебирает несколько аргументов адреса электронной почты - PullRequest
0 голосов
/ 28 октября 2019

У меня есть простой bash-скрипт, который будет создавать шаблон в формате YAML, когда в скрипт передается адрес электронной почты. Я пытался сделать так, чтобы скрипт перебирал несколько адресов электронной почты, передаваемых в качестве аргументов, но я всегда могу получить только 1 возвращенный адрес правильно.

Я пытался использовать цикл for и передавать аргументы в $ 1 как$ @.

#!/usr/bin/env bash
#set -x

# Fetch SSH keys from mounted NAS and generate users.sls templates
onboards=("$*")
ssh_keys_file='ssh_keys.txt'

function usage() {
    echo "Usage: $0 Rick.James@domain.com" >&2
    exit
}

# mount NAS
nas_volume='PATRIOT'
function mountnas() {
sudo mkdir -p "/Volumes/$nas_volume" && sudo chown -R "$(whoami):staff" "/Volumes/$nas_volume"
mount_afp -o automounted "afp://staff:PASSWORD@domain.com/$nas_volume" "/Volumes/$nas_volume"
}

# create users.sls templates
function maketemplate() {
  for i in $(echo "${onboards}"); do \
cat <<- EOF
- name: $(echo "$i" | sed 's/@.*//' | tr -d '.' | tr '[:upper:]' '[:lower:]')
  email: $i
  disable: false
  sudo: false
  ssh_keys: '$(grep -i --colour "$i" "/Volumes/$nas_volume/$ssh_keys_file")'
    -
  roles:
    {{ role starts here }}
EOF
echo
done
}

# Ensure no empty arguments
#if [[ -z "$1" ]]; then
#  echo "Yo dawg, I need some email addresses!" && usage
#fi

mountnas &>/dev/null
checkstat=$?

# if NAS mount succeeds then generate templates, unmount NAS and exit cleanly
[[ "$checkstat" -eq 0 ]] && \
  for i in "${onboards[@]}"; do
    maketemplate "$i"; 
  done && \

  umount "/Volumes/$nas_volume" && \
  (exit 0 || exit 1)

Идея состоит в том, чтобы иметь возможность передавать несколько адресов в качестве аргументов. Если я вызову цикл for вне скрипта, такой как for i in $(cat emails); do ./get_sshkey.sh $i; done, это создаст шаблоны из функции here-doc, но не так:

./mk_templates john@domain.com lisa@domain.com это будет работать только если я используюодин адрес, а не несколько.

...