2013-12-11 5 views
-1

Я пытаюсь использовать код в сценарии оболочки. в то время как я пытаюсь преобразовать код из пакетного скрипта в сценарий оболочки, я получаю сообщение об ошибке.Как исправить ошибку в сценарии оболочки bash?

Batch File КОД

:: Create a file with all latest snapshots 
FOR /F "tokens=5" %%a in (' ec2-describe-snapshots ^|find "SNAPSHOT" ^|sort /+64') do set "var=%%a" 
set "latestdate=%var:~0,10%" 
call ec2-describe-snapshots |find "SNAPSHOT"|sort /+64 |find "%latestdate%">"%EC2_HOME%\Working\SnapshotsLatest_%date-today%.txt" 

КОД В SHELL SCRIPT

#Create a file with all latest snapshots 
FOR snapshot_date in $(' ec2-describe-snapshots | grep -i "SNAPSHOT" |sort /+64') do set "var=$snapshot_date" 
set "latestdate=$var:~0,10" 
ec2-describe-snapshots |grep -i "SNAPSHOT" |sort /+64 | grep "$latestdate">"$EC2_HOME%/SnapshotsLatest_$today_date" 

Я хочу, чтобы отсортировать снимки по датам и сохранить снимки, созданные в последней даты в файле.

ОБРАЗЕЦ ВЫВОД ЕСА-опишут-снимку:

SNAPSHOT snap-5e20 vol-f660 completed 2013-12-10T08:00:30+0000 100% 109030037527 10 2013-12-10: Daily Backup for i-2111 (VolID:vol-f9a0 InstID:i-2601)

Он будет содержать записи, как этот

Я получил этот код:

latestdate=$(ec2-describe-snapshots | grep ^SNAPSHOT | sort -k 5 | awk '{print $5}') ec2-describe-snapshots | grep SNAPSHOT.*$latestdate | > "$EC2_HOME/SnapshotsLatest_$today_date"

но получает эту ошибку :

grep: 2013-12-10T09:55:34+0000: No such file or directory grep: 2013-12-11T04:16:49+0000: No such file or directory grep: 2013-12-11T04:17:57+0000: No such file or directory

У меня есть снимки, сделанные на амазонке, я хочу найти последние снимки, сделанные на дату, а затем хочу сохранить их в файле. например, дата 2013-12-10 моментальных снимков, сделанных в эту дату, должна храниться в файле. Содержание snapshotslatest файла должно быть

SNAPSHOT snap-c17f3 vol-f69a0 completed 2013-12-04T09:24:50+0000 100% 109030037‌​527 10 2013-12-04: Daily Backup for Sanjay_Test_Machine (VolID:vol-f66409a0 InstID:i-26048111) SNAPSHOT snap-c7d617f9 vol-3d335f6b completed 2013-12-04T09:24:54+0000 100% 1090‌​30037527 10 2013-12-04: Daily Backup for sacht_VPC (VolID:vol-3db InstID:i-ed6)

пожалуйста, не то, что если есть снимки, созданные на 2013-12-10, 2013-12-11, 2013-12-12. Это означает, что last_date должен быть 2013-12-12, и весь snaphshot, созданный на 2013-12-12, должен быть сохранен в файле.

Любое предложение или руководство оценено.

+1

Вы должны удалить этот вопрос, так как он уже ответил на http://stackoverflow.com/questions/20489501/error-in-shell-scripting/20507633?noredirect=1#comment30662940_20507633 – janos

+0

D'oh пропустил этот комментарий. Это, вероятно, более аккуратное решение, если оно работает (не с моим входным файлом, хотя это может быть ошибка файла). – BroSlow

ответ

1

Ни командный сценарий, ни сценарий оболочки, которые вы опубликовали, являются хорошей отправной точкой, поэтому давайте начнем с нуля. Извините, это слишком большое для комментариев.

Вы want to find the latest snapshots made on a date and then want to store them in a file.

Что это значит?

У файлов моментальных снимков есть временная метка в их имени или в их содержании?

Если нет - UNIX не хранит временные метки создания файла, так что это временная метка с последним изменением?

Вы буквально хотите объединить все ваши файлы моментальных снимков в один файл singe или вы хотите создать файл с списком имен файлов моментальных снимков?

Опубликуйте несколько примеров ввода (например, некоторые имена и содержимое файлов моментальных снимков, если они сохранены) и ожидаемый вывод с учетом ввода.

Обновите свой вопрос, чтобы ответить на все вышесказанное, не пытайтесь ответить в комментарии.

+0

Вопрос отредактирован. добавлено содержимое моментального снимка. и, пожалуйста, снова прочитайте мой вопрос – user3086014

0

Minor вопроса, вам не нужна труба, когда переориентировав выход, так что ваша линия для сохранения должна быть

ec2-describe-snapshots | grep SNAPSHOT.*$latestdate > "$EC2_HOME/SnapshotsLatest_$today_date" 

Теперь главным вопросом здесь, является то, что Gr перепутались. Я не работал с Амазонкой снимками, но судя по вашим описаниям например, вы должны делать что-то вроде

latestdate=$(ec2-describe-snapshots | grep -oP "\d+-\d+-\d+" | sort -r | head -1) 

Это позволит получить все даты, содержащую форму DDDD-DDDD из файла (я предполагая, что две даты в каждой строке моментального снимка всегда совпадают), сортируйте их в обратном порядке (последнее сначала) и возьмите голову, которая является последней датой, сохраняя ее в $ lastdate.

Затем хранить все снимки с данной датой сделать что-то вроде

ec2-describe-snapshots | grep -oP "SNAPSHOT(.*?)$lastdateT(.*?)\)" > "$EC2_HOME/SnapshotsLatest_$today_date" 

Это позволит получить весь текст, начиная с SNAPSHOT, содержащий данную дату, и заканчивающийся в закрытии «)» и сохраните его. Обратите внимание, вам, возможно, придется немного потрудиться, если «)» может присутствовать в другом месте.

Смежные вопросы