Войти

Показать полную графическую версию : Доработка скрипта на 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

mixmar
25-10-2016, 15:10
Есть скрипт на 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