Shell-script (Написать скрипт на bash)

Модератор: Модераторы разделов

Ответить
Esha
Сообщения: 10

Shell-script

Сообщение Esha »

Доброго времени суток есть задача переименовать расширения файлов shell-программа определяет формат файолв текущего каталога и изменяет их суффиксы в соответствии с форматом:
abcdef.xxx —> abcdef.xxx.png, т.к. формат этого файла — png.
qwerty.yyy —> qwerty.yyy.doc, т.к. формат этого файла — Micrsoft Word Document.
Бился я и все что смог сделал вот это:

Код: Выделить всё

FIND=`find -type f`
for i in $FIND
do
n = dirname($i);
extension=${i##*.}
file=${i%.*}
case $extension in
"doc") echo mv "$i" "$n/$file.yyy.$extension";;
"png") echo mv "$i" "$n/$file.xxx.$extension";;
esac
done

вроде все работает но работает неккоректно просто добавляет к имени файла расширение хотя этот файл допустим не картинка он ему добавляет расширение *.png
нужно что бы скрипт понимал ассоциацию файлов, преподователь скинул следующее
для определения формата файла надо использовать утилиту file и файл /etc/mime.types

Код: Выделить всё

$ file --mime-type /tmp/1.xxx
/tmp/1.xxx: application/gzip
$ grep application/gzip /etc/mime.types
application/gzip                gz
$ mv /tmp/1.xxx /tmp/1.xxx.gz

проделав аналогичные действия руками вы сможете "научить" этому скрипт.
для этого надо просто объединить команды в программу, заменив константы (напр.: /tmp/1.xxx) на переменные
Прошу помочь кто чем может))) Заранее спасибо!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Shell-script

Сообщение Bizdelnick »

А в чём, собственно, возникло затруднение? Вроде бы объяснено предельно понятно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Esha
Сообщения: 10

Re: Shell-script

Сообщение Esha »

Он и файлы прислал пытаюсь выполнить построчно ошибку выдает!
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Shell-script

Сообщение SLEDopit »

Esha писал(а):
23.01.2016 23:55
FIND=`find -type f`
for i in $FIND
Не надо так делать. Первый файл с пробелом или спецсимволом успешно сломает всю конструкцию.
Пишите хотя бы так:

Код: Выделить всё

find . -type f | while read i
Подробности почему так не стоит делать можно почитать тут.

Esha писал(а):
23.01.2016 23:55
вроде все работает но работает неккоректно просто добавляет к имени файла расширение хотя этот файл допустим не картинка он ему добавляет расширение *.png
Вам же и так уже подсказали. Используйте команду file для определения корректного расширения файла. В приведённом скрипте этого нет.

Если у вас непонимание какой-то конкретной проблемы, то спрашивайте конкретно что именно не понимаете. Желательно с технической информацией (например, точным текстом ошибки, если есть).

Если вы ожидаете, что здесь вам предоставят готовый скрипт, то вы не по адресу.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Esha
Сообщения: 10

Re: Shell-script

Сообщение Esha »

1.xxx с первым файлом начинаю запускать и сразу же ошибку выдает типа файл ненайде директорию поменял файл туда запихал запускаю всеравно пишет файл ненайден
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Shell-script

Сообщение Bizdelnick »

Не надо пытаться объяснить своими словами то, что проще показать. Я ничего не понял. Переходите в каталог с файлом, запускайте скрипт и всё это из терминала копируйте сюда.
Да, частица «не» с краткими причастиями пишется раздельно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Esha
Сообщения: 10

Re: Shell-script

Сообщение Esha »

Что я делаю неправильно?
Вложения
script.jpg
Спасибо сказали:
Kopilov
Сообщения: 947
ОС: [K]Ubuntu, Debian

Re: Shell-script

Сообщение Kopilov »

Для начала, убрать символ '$' перед командами.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Shell-script

Сообщение SLEDopit »

Стоит начать с этого (оригинал на английском).

зы. символ $ -- означает начало команды в вашем примере.
то что без $ -- это вывод команд, его в скрипте не должно быть.
там же вам необходимо убедиться, что файл /tmp/1.xxx существует в вашей системе.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Shell-script

Сообщение Bizdelnick »

:doh:
У Вас есть какой-нибудь учебник или методичка? Хотя бы первые несколько десятков страниц оттуда прочитайте. И не надо втирать про
Esha писал(а):
23.01.2016 23:55
все что смог сделал вот это
Ни здесь никто в это не поверит, ни тем более препод.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX
Контактная информация:

Re: Shell-script

Сообщение Olej »

Bizdelnick писал(а):
25.01.2016 12:35
:doh:
У Вас есть какой-нибудь учебник или методичка? Хотя бы первые несколько десятков страниц оттуда прочитайте.


Вот здесь лежит, пожалуй, лучший справочник по синтаксическим конструкциям Bash: Mendel Cooper, Искусство программирования на языке сценариев командной оболочки.
В переводе на русский. И перевод сделан лучшим из переводчиков IT-публикаций, Андреем Киселевым - не переврёт. :rolleyes:

Там вы найдёте просто готовые элементы того, что вам не хватает, и все синтаксические подробости.
Спасибо сказали:
Esha
Сообщения: 10

Re: Shell-script

Сообщение Esha »

Код: Выделить всё

$ file --mime-type /tmp/1.xxx
/tmp/1.xxx: application/gzip
$ grep application/gzip /etc/mime.types
application/gzip                gz
$ mv /tmp/1.xxx /tmp/1.xxx.gz

$ file --mime-type /tmp/3.zzz
/tmp/3.zzz: application/odt
$ grep application/odt /etc/mime.types
application/odt                odt
$ mv /tmp/3.zzz /tmp/3.zzz.odt

$ file --mime-type /tmp/2.yyy
/tmp/2.yyy: application/jpg
$ grep application/jpg /etc/mime.types
application/jpg                jpg
$ mv /tmp/2.yyy /tmp/2.yyy.jpg

ну последовательно все работает как теперь объединить команды в программу? Через цикл?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Shell-script

Сообщение SLEDopit »

Esha писал(а):
01.02.2016 02:30
Через цикл?
Да, через цикл. Но одно цикла недостаточно.
Вам так же необходимо автоматизировать определение расширения файла, т.е. судя по приведённым вами команда, вы его подставляете вручную.
Ну и смотрите на цикл, предоставленный преподавателем. Он должен помочь в решении.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Esha
Сообщения: 10

Re: Shell-script

Сообщение Esha »

Извините пожалуйсто можно хотя бы бы по-русски словами сам алгоритм! А то я не очень силен в написании сценариев! Заранее спасибо!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Shell-script

Сообщение Bizdelnick »

Если Вам до такой степени непонятно, что делать, спросите у преподавателя. Он деньги получает, в конце концов, за то, чтобы Вас чему-то научить, а не чтобы завалить.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX
Контактная информация:

Re: Shell-script

Сообщение Olej »

Bizdelnick писал(а):
02.02.2016 13:38
... спросите у преподавателя. Он деньги получает, в конце концов, за то, чтобы Вас чему-то научить, а не чтобы завалить.

:laugh:

...спросите у преподавателя - он деньги получает, в конце концов, с нерадивых студентов за то, что проводит с ними репетиторские занятия в дополнительное время. :drinks:
Спасибо сказали:
Ответить