У меня есть простой 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
это будет работать только если я используюодин адрес, а не несколько.