Для создания этого абсолютно портативным, можно заменить $ () синтаксис с:
I=1; for X in `/bin/ls -r /var/tmp/*`; do [ $I -le 28 ] && echo "lower" || echo "higher"; I=`expr $I + 1`; done
Но остерегайтесь заданий крона и мировых перезаписываемых каталогов.
Вы используете одинарные кавычки для параметров командной строки -d
как для указания строк, разделенных $ variable
, так и для цитирования аргумента для второго sed
команда.
Для $ aAllowUsers SomeUser
это может быть то, что вы хотите, но для / PermitRootLogin / s /^.*$/ PermitRootLogin no /
это, вероятно, не то, что вам нужно / bin / sh
для расширения. Помещение туда обратной косой черты должно помочь:
- sed -i -e \'/PermitRootLogin/s/^.*$/PermitRootLogin no/\' /etc/ssh/sshd_config
YAML не должен иметь никаких проблем с этим элементом списка, имеющим одинарные кавычки в середине скалярного значения.
Использовать heredoc для такого ввода. И вам нужно избегать символов новой строки и кавычек, потому что они не разрешены в вашей конструкции appliaction / json
.
user_data=$(awk -v 'ORS=\\n' 1 <<'HERE' | sed 's/"/\\"/g'
#cloud-config
users:
- name: SomeUser
groups: wheel
shell: /bin/bash
ssh-authorized-keys:
- ssh-dss AAAABBBBCCCCDDDDD...
runcmd:
- sed -i -e '$aAllowUsers SomeUser' /etc/ssh/sshd_config
- sed -i -e '/PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
- service sshd restart
HERE
)
curl -X POST https://api.digitalocean.com/v2/droplets \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $api_key" \
-d - <<HERE
{
"name": "$droplet_name",
"region": "$region",
"size": "$size",
"image": "$image",
"ssh_keys": "$root_ssh_pub_key",
"backups": false,
"ipv6": false,
"private_networking": false,
"user_data": "$user_data"
}
HERE