Можно ли создать оболочку .sh или файл .command с файлом конфигурации?

Мне нужно сделать резервную копию сайтов через Терминал и иметь возможность поместить некоторые данные в конфигурационные файлы и заставить оболочку выполнить это.

Например, имя пользователя, пароль, идентификатор SSH и так далее.

#!/bin/bash
ssh admin@host.com "tar cjvf webfilesbackup-date-`date +%Y%m%d`.tar.bz2 public_html/"    
ssh admin@host.com "mysqldump -u user_admin -ppass database_1 > databasebackup-`date +%Y%m%d`-db.sql"
scp admin@host.com:webfilesbackup-date-`date +%Y%m%d`.tar.bz2 ~/backup/
scp admin@host.com:databasebackup-`date +%Y%m%d`-db.sql ~/backup/
ssh admin@host.com "rm -f webfilesbackup-date-`date +%Y%m%d`.tar.bz2"
ssh admin@host.com "rm -f databasebackup-`date +%Y%m%d`-db.sql"

4 ответа4

5

Создайте файл (например, settings) с вашими настройками в качестве переменных:

username='foo'
pass='bar'
website='baz'
database='yak'

Затем отправьте файл из вашего скрипта, и вы сможете получить доступ к переменным:

. settings
echo $username     # <- this will print "foo"

Что касается вашего второго "вопроса", если у вас есть несколько хостов, вы можете просто иметь несколько конфигурационных файлов и использовать тот, который передан в качестве аргумента в ваш скрипт. Например, создайте файл конфигурации с именем site1 .

Вызовите ваш скрипт с помощью ./backup.sh site1

. $1               # <- this will load the file "site1"
echo $username     # <- this will print "foo"

С вашим резервным скриптом это будет означать:

#!/bin/bash
. $1
ssh admin@host.com "tar cjvf webfilesbackup-date-`date +%Y%m%d`.tar.bz2 public_html/"
ssh admin@host.com "mysqldump -u $user -p$pass $database > databasebackup-`date +%Y%m%d`-db.sql"
# ... and so on
0
     # parse the ini like $0.hostname.conf and set the variables
     # place a $0.`hostname -s`.conf file in the same dir as your script
     # set here any VarName=VarValue
     # use ; for comments - you will get host independant conf file 
     # for your bash scripts - [examle usage :][1] 
     doParseIniFile(){
        eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
            -e 's/;.*$//' \
            -e 's/[[:space:]]*$//' \
            -e 's/^[[:space:]]*//' \
            -e "s/^\(.*\)=\([^\"']*\)$/\1=\"\2\"/" \
           < $IniFile \
            | sed -n -e "/^\[$IniSection\]/,/^\s*\[/{/^[^;].*\=.*/p;}"`
     }
     #eof function doParseIniFile
0

Другой вариант - просто создать текстовый файл и использовать цикл while для доступа к этому файлу построчно.

0
mkdir -p Example.app/Contents/MacOS`
cp script.sh Example.app/Contents/MacOS/Example

... и это сработает. В этой статье есть более подробные инструкции, в том числе, как получить пользовательские значки.

Вы также можете обратиться к Automator или AppleScript Studio как к способам создания приложений, которые могут работать разумно, без необходимости делать это вручную.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .