Существует способ хранения паролей в сценарии bash, но вы должны зашифровать и обфусцировать сценарий, чтобы никто не мог прочитать его или запустить отладчик любого типа, чтобы увидеть, что именно он делает. Чтобы зашифровать и обфусцировать сценарий bash/shell и сделать его действительно исполняемым, попробуйте скопировать и вставить его сюда:
http://www.kinglazy.com/shell-script-encryption-kinglazy-shieldx.htm
На вышеуказанной странице все, что вам нужно сделать, это отправить свой сценарий (вы можете сначала отправить образец сценария для вашего спокойствия). Для вас будет создан zip-файл. Щелкните правой кнопкой мыши на ссылке загрузки и скопируйте URL, который вам будет предоставлен. Затем перейдите на свой UNIX-компьютер и выполните следующие шаги.
Installation:
wget link-to-the-zip-file
unzip the-newly-downloaded-zip-file
cd /tmp/KingLazySHIELD
./install. sh /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username) -force
Что сделает для вас приведенная выше команда install:
Она установит зашифрованную версию вашего скрипта в каталог /var/tmp/KINGLAZY/SHIELDX-(your-script-name).
Он поместит ссылку на этот зашифрованный скрипт в любой каталог, который вы укажете вместо /home/(ваше имя пользователя) - таким образом, вы сможете легко получить доступ к скрипту без необходимости вводить абсолютный путь.
Гарантирует, что никто не сможет изменить сценарий - любые попытки изменить зашифрованный сценарий сделают его неработоспособным... пока эти попытки не будут пресечены или удалены. Его можно даже настроить так, чтобы он уведомлял вас всякий раз, когда кто-то пытается сделать что-либо со скриптом, кроме его запуска... т.е. попытки взлома или модификации.
Гарантирует, что абсолютно НИКТО не сможет сделать его копии. Никто не сможет скопировать ваш скрипт в укромное место и попытаться возиться с ним, чтобы посмотреть, как он работает. Все копии скрипта должны быть связаны с исходным местоположением, которое вы указали при установке (шаг 4).
ПРИМЕЧАНИЕ:
Я не верю, что это работает для интерактивных скриптов, которые запрашивают ответ у пользователя. Значения должны быть жестко закодированы в сценарии. Шифрование гарантирует, что никто не сможет увидеть эти значения, поэтому вам не нужно беспокоиться об этом.
Нет абсолютно никакой причины разбирать вывод ls
, когда расширение фактически выполняется оболочкой. Вместо этого кода:
for data in `ls a*| sort -n`
Вы можете использовать этот:
for data in a*
Даже если вам нужно отсортировать его, используйте этот (который потерпит неудачу для имен файлов с новыми строками):
for data in $( echo a* | sort -n )
И лучший способ работать с несколькими значениями - это сделать их массивом.
В частности, массив параметров:
set -- a*
printf '<%s>' "$@"; echo
И ваш код для выполнения некоторой работы по очереди станет таким простым:
#!/bin/bash
set -- a*
numb=$#
printf '%s ' "$@"
Чтобы выполнить обработку на основе номера файла, вы можете сделать:
#!/bin/bash
# using bash as the [[ is more robust.
set -- a* # set an array of all files that start by a
for file # walk the array one by one
do
[[ ${file#a\.} -le 20 ]] && continue # is the file number < 20
printf '%s\n' "$file" # do additional processing here
done
Следующая команда будет работать со всеми файлами, соответствующими запрашиваемому шаблону. Обратите внимание, что он также будет соответствовать файлам типа a.2y
, которые существуют, а не только числовым суффиксам:
for file in a.2?; do
#stuff with ${file}
done
Если вы хотите обратиться только к файлам с числовыми суффиксами, подойдет следующий вариант:
for file in a.2{0..9}; do
if [[ -f ${file} ]]; then # file exists
# stuff with ${file}
fi
done