Показать полную графическую версию : Доработка скрипта на Bash
parrabol
11-07-2015, 13:06
Добрый день. Нужна помощь в доработке скрипта. Нужно чтобы при запуске ./script servername filename
Происходило копирование файла и его извлечение на сервере. Привожу код скрипта
#!/bin/bash
dev="deploy@1.2.3.4"
test="deploy@1.2.3.5"
way="/var/www/builds/"
front="/var/www/html/test1/"
file="$way/front_build_$1.tar.gz"
key="/var/www/conf/id_rsa"
scp -i $key $file $test:/var/www/html/test/
ssh -i $key $test "tar xvf /var/www/html/test/front_build_$1.tar.gz --overwrite- dir --exclude='./cache' --exclude='./logs' -C $front"
Сейчас копирование и извлечение происходит только на сервер test. А мне нужно, чтобы он при запуске понимал сервера, которые в нем описаны. К примеру.
./script dev 10
и, соответсвтенно
./script test 10
Нужна ваша помощь.
ruslandh
11-07-2015, 13:14
Т.е. вам нужны два массива со строками, я правильно понял?
Наверное, их нужно будет менять, и тогда логично, что их надо читать из текстового файла?
http://rtfm.co.ua/bash-ispolzovanie-massivov/
http://www.linux.org.ru/forum/development/9097869#comment-9097969
http://www.linux.org.ru/forum/development/9097869?cid=9097969
В баше есть такая функция, readarray…
man -P"less -p'^\s+readarray'" bash
Вы бы его хоть открывали иногда.
parrabol
11-07-2015, 13:36
Не совсем так. Я думаю нужно делать так.
case "$1" in
dev)
server="deploy@1.2.3.4"
;;
test)
server="deploy@1.2.3.5"
;;
*)
echo "первый параметр должен быть либо dev, либо test"
exit 1
;;
esac
Есть скрипт на bash обработки некоторых данных, вот через один фрагмент выполнения с помощью команды curl получены данные на короткую ссылку через goo.gl с выводом в файл с именем name в формате json, все эти данные как и сама команда выполнения для примера, и являются частичным фрагментом содержимого скрипта.
Вот команда curl, естественно в ней введен реальный ключ вместо этого {Мой ключ из Goo} -
#/bin/sh
curl https://www.googleapis.com/urlshortener/v1/url?key={Мой ключ из Goo} -H 'Content-Type: application/json' -d '{"longUrl": "http://samlab.ws/"}' > name
Вот данные из файла name в таком формате, что получены через эту команду в скрипте -
{
"kind": "urlshortener#url",
"id": "https://goo.gl/f7p8",
"longUrl": "http://samlab.ws/"
}
Помогите с изменением скрипа именно на bash, как из этого файла вывести в переменную или в другой файл только данные строки с "id": "https://goo.gl/f7p8", но без кавычек, типа вот только это - https://goo.gl/f7p8? И возможно ли сразу через curl выполнить все это сразу с получением в итоге этого https://goo.gl/f7p8, и что тогда надо еще добавить в эту мою команду?
И еще, если у меня в начале скрипта вот это #/bin/sh вместо #!/bin/bash, играет ли какую роль на само выполнение скрипта, и в чем тут разница? Спасибо!
MakaBooka
31-10-2016, 14:45
И еще, если у меня в начале скрипта вот это #/bin/sh вместо #!/bin/bash, играет ли какую роль на само выполнение скрипта, и в чем тут разница? Спасибо! »
это легко проверить.
ls -l /bin/sh
если это отдельный интерпретатор, то разница есть. если симлинк на bash/dash, то считай разницы нет. если скрипт написан для баша, на sh он может не выполняться, писать универсальные скрипты осиливают не все. проверить можно запустив скрипт конкретным интерпретатором и посмотреть на результат и выхлоп:
/bin/sh <имя скрипта>
И возможно ли сразу через curl выполнить все это сразу с получением в итоге
нет
и что тогда надо еще добавить в эту мою команду? »
curl https://www.googleapis.com/urlshortener/v1/url?key={Мой ключ из Goo} -H 'Content-Type: application/json' -d '{"longUrl": "http://samlab.ws/"}' | grep \"id\" | cut ...
про cut почитайте.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.