BASH Scripting
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 3
Re: BASH Scripting
Здраствуйте, мне нужно сделать несколько заданий по Linux на bash. Некоторые я сделал, но некоторые не могу, помогите пожалуйста, за любую помощь буду очень благодарен)
вот что я не сделал:
1)Напишите сценарий, который выводит пронумерованный список файлов с расширением txt в текущем каталоге, ожидает от пользователя ввода номера файла, выводит первые десять строк заданного файла и повторяет цикл.
2)Встроенная команда интерпретатора read имя считывает строку со стандартного ввода и записывает её в переменную имя. Команда возвращает код завершения ноль если строка была успешно считана и код отличный от нуля если произошла ошибка или встретился конец файла. Напишите сценарий, который считывает строки со стандартного ввода и выводит их на стандартный вывод. (Используйте цикл while).
3)При помощи sed выведите из файла /etc/passwd идентификаторы пользователей и их имена, разделенные символом табуляции, в формате:
0 root
1 daemon
2 operator ...
Вывод должен быть отсортирован по идентификатору пользователя.
4)Напишите сценарий для sed, который будет менять местами каждые две строки файла.
Возможно sed прийдется запускать с ключом -n.
5)Напишите сценарий для редактора sed, который будет добавлять:
a) В начало файла строку "<html><body>".
b) В начало всех строк начинающихся словом "Приступ" строку "<H2>", а в конец строку "</H2>".
с) В конец всех остальных строк "<br>".
d) К концу последней строки "</body></html>"
вот что я не сделал:
1)Напишите сценарий, который выводит пронумерованный список файлов с расширением txt в текущем каталоге, ожидает от пользователя ввода номера файла, выводит первые десять строк заданного файла и повторяет цикл.
2)Встроенная команда интерпретатора read имя считывает строку со стандартного ввода и записывает её в переменную имя. Команда возвращает код завершения ноль если строка была успешно считана и код отличный от нуля если произошла ошибка или встретился конец файла. Напишите сценарий, который считывает строки со стандартного ввода и выводит их на стандартный вывод. (Используйте цикл while).
3)При помощи sed выведите из файла /etc/passwd идентификаторы пользователей и их имена, разделенные символом табуляции, в формате:
0 root
1 daemon
2 operator ...
Вывод должен быть отсортирован по идентификатору пользователя.
4)Напишите сценарий для sed, который будет менять местами каждые две строки файла.
Возможно sed прийдется запускать с ключом -n.
5)Напишите сценарий для редактора sed, который будет добавлять:
a) В начало файла строку "<html><body>".
b) В начало всех строк начинающихся словом "Приступ" строку "<H2>", а в конец строку "</H2>".
с) В конец всех остальных строк "<br>".
d) К концу последней строки "</body></html>"
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: BASH Scripting
Темы от студентов с запросами готовых решений по заданиям зарываются не глядя.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
- Сообщения: 3
Re: BASH Scripting
я не прошу готовый ответ, возможно какая-нибуть подсказка или намек, за который я буду очень благодарен.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
-
- Сообщения: 3
-
- Сообщения: 280
- ОС: Linux Suse 10.2-10.3 Sles-10.1
Re: BASH Scripting
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: BASH Scripting
намекаю конкретней: задача:
2)Напишите сценарий, который считывает строки со стандартного ввода и выводит их на стандартный вывод. (Используйте цикл while).
Подсказка номер 0 в условии задачи:
Встроенная команда интерпретатора read имя считывает строку со стандартного ввода и записывает её в переменную имя. Команда возвращает код завершения ноль если строка была успешно считана и код отличный от нуля если произошла ошибка или встретился конец файла.
Подсказка номер раз в моем посте BASH Scripting
фактически test возвращает просто 1 или 0, поэтому вместо test может быть любая операция, ведущая себя аналогично:
ls| while read i; do echo $i; done
и вот так тоже можно напечатать список файлов в директории.
фактически больше ничего для решения не надо. Если не понятно что-то с стандартным вводом-выводом, можно внимательно изучить первый пост этой темы: BASH Scripting
sed'овые задачки посложнее. возможно стоит обратиться к книге sed and awk (ссылка легко находится гуглом, здесь не привожу, ибо не уверен на 100% в законности выкладывания O'Reilly bookshelf в свободный доступ)
-
- Сообщения: 125
- ОС: FreeBSD, Archlinux
Re: BASH Scripting
* разделить команды двумя подряд идущими вертикальными чертами:
Полагаю, что задумывалось
И там дальше еще просмотрите, пожалуйста, листинги кодов.
Код: Выделить всё
echo a
Полагаю, что задумывалось
Код: Выделить всё
echo a || ls
И там дальше еще просмотрите, пожалуйста, листинги кодов.
-
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: BASH Scripting
gabell писал(а): ↑21.06.2008 11:17* разделить команды двумя подряд идущими вертикальными чертами:
Код: Выделить всё
echo a
Полагаю, что задумывалось
Код: Выделить всё
echo a || ls
И там дальше еще просмотрите, пожалуйста, листинги кодов.
Гм, уехало из-за вики-разметки. Поправил.
-
- Сообщения: 30
Re: BASH Scripting
два вопроса.
При понижении битрейта MP3 через lame не сохранятются id3-теги. Есть ли какой-то простой вариант переноса/копирования тегов? Знаю, что можно отдельно перелопачивать теги (читать - записать) через mp3info, id3, id3v2, но хочется гуманного подхода.
И ещё. Есть какие-то интересные mp3-шки у меня: что это за теги такие, что Гном их читает и выводит в свойствах Аудио (mp3), а консольные id3, id3v2, mp3info выводят пустые поля?
решено: eyeD3
При понижении битрейта MP3 через lame не сохранятются id3-теги. Есть ли какой-то простой вариант переноса/копирования тегов? Знаю, что можно отдельно перелопачивать теги (читать - записать) через mp3info, id3, id3v2, но хочется гуманного подхода.
И ещё. Есть какие-то интересные mp3-шки у меня: что это за теги такие, что Гном их читает и выводит в свойствах Аудио (mp3), а консольные id3, id3v2, mp3info выводят пустые поля?
решено: eyeD3
-
- Сообщения: 526
- ОС: FreeBSD 8.0 CURRENT
Re: BASH Scripting
была библиотека на perl, там вставлять точно можно было!!!
то есть то что тебе надо, открыть директориюи с каждого файлы и считать те записи в массивы ссылки на хэши , хэши хэшей, или просто сохранить в б.д...
потом занести обрано...
то есть то что тебе надо, открыть директориюи с каждого файлы и считать те записи в массивы ссылки на хэши , хэши хэшей, или просто сохранить в б.д...
потом занести обрано...
-
- Сообщения: 2
- ОС: Linux
Re: BASH Scripting
Добрый день. У меня есть вопрос. Моя задача состоит в поиске в архивах rar и zip файл test.txt и удаления его. Вручную это накладно. Вот обратился в Гуглу и получил
Ищет файлы в zip, но не удаляет их. Как сделать чтобы искало и удаляло?
PS Как я понял для RAR надо использоваться unrar. А можно эти запросы объеденить (чтобы и в rar и zip искало одновременно)?
Спасибо.
Код: Выделить всё
find ./ -iname "*.zip" -exec sh -c "unzip -l \"{}\" | grep test\.txt | awk '{print \$4\" in {}\"}'" \;
Ищет файлы в zip, но не удаляет их. Как сделать чтобы искало и удаляло?
PS Как я понял для RAR надо использоваться unrar. А можно эти запросы объеденить (чтобы и в rar и zip искало одновременно)?
Спасибо.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: BASH Scripting
igramnet писал(а): ↑24.06.2008 23:00Добрый день. У меня есть вопрос. Моя задача состоит в поиске в архивах rar и zip файл test.txt и удаления его. Вручную это накладно. Вот обратился в Гуглу и получил
Код: Выделить всё
find ./ -iname "*.zip" -exec sh -c "unzip -l \"{}\" | grep test\.txt | awk '{print \$4\" in {}\"}'" \;
Ищет файлы в zip, но не удаляет их. Как сделать чтобы искало и удаляло?
а что из этого должно удалять?
-
- Сообщения: 30
Re: BASH Scripting
надо распаковать, снова найти этот файл, удалить его и запаковать архив. иначе не представляю себе. с кодом сложности, я сам начинающий)
-
- Сообщения: 2
- ОС: Linux
Re: BASH Scripting
test.txt должен удалять. Может скажете как полностью скрипт написать? Просто очень необходимо.
-
- Сообщения: 30
Re: BASH Scripting
Интересная вещь. Изменяю переменную $tag_comment в цикле while. Вывожу для теста её прямо в цикле - нормально, поменялась. Вывожу после цикла - значение, которое было ДО цикла О_о
читабельный вариант http://paste.org.ru/?47r73p
читабельный вариант http://paste.org.ru/?47r73p
Код: Выделить всё
#!/bin/bash
i="02-36_crazyfists-one_more_word-h8me.mp3"
tag_comment="NULL_WORK_JUST_BEGIN!"
tag_descr=""
tag_lang=""
comment_mark_found=false
eyeD3 --no-color "$i" | while read line; do
echo -e "________________________________\n$line" # текущая строка, которая проходит проверку.
if [[ $comment_mark_found == true ]]
then
echo "YES!"
tag_comment=$line
echo "the string is '$tag_comment'"
else
tag_descr=$(echo "$line" | sed -ne "s/Comment: \[Description: \(.*\)\] \[Lang: \(.*\)\].*/\1/p")
echo "$tag_descr"
tag_lang=$(echo "$line" | sed -ne "s/Comment: \[Description: \(.*\)\] \[Lang: \(.*\)\].*/\2/p")
echo "$tag_lang"
if [[ "$tag_descr" != "" ]] && [[ "$tag_lang" != "" ]] # дошли до строчки comment, следующая строка - сама коммент.
then
comment_mark_found=true
echo "comment has been found"
fi
fi
echo "the string is '$tag_comment'"
done
echo "attention!"
echo "the string is '$tag_comment'" #Почему вывод этого строка, которая была до цикла? Хотя вывод в цикле показал какую-то заоплненную строку
exit 0
#Exampe outlines for `eyeD3 --no-color "$i"`
#02-36_crazyfists-one_more_word-h8me.mp3 [ 5.15 MB ]
#--------------------------------------------------------------------------------
#Time: 3:45 MPEG1, Layer III [ 192 kb/s @ 44100 Hz - Stereo ]
#--------------------------------------------------------------------------------
#ID3 v1.1:
#title: One More Word artist: 36 Crazyfists
#album: Bitterness The Star year: 2002
#track: 2 genre: Metal (id 9)
#Comment: [Description: ID3 v1 Comment] [Lang: eng]
#h8me..as alwayz
Код: Выделить всё
#YES!
#the string is 'h8me..as alwayz'
#the string is 'h8me..as alwayz'
#attention!
#the string is 'NULL_WORK_JUST_BEGIN!'
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: BASH Scripting
может быть вам лучше вот с этой опцией поиграться ?
Код: Выделить всё
-d Remove (delete) entries from a zip archive. For example:
zip -d foo foo/tom/junk foo/harry/\* \*.o
will remove the entry foo/tom/junk, all of the files that start with foo/harry/, and all of the files that end with .o (in any path). Note
that shell pathname expansion has been inhibited with backslashes, so that zip can see the asterisks, enabling zip to match on the contents
of the zip archive instead of the contents of the current directory. You can also use quotes to escape wildcards, as in
zip -d foo foo/tom/junk "foo/harry/*" "*.o"
Under systems where the shell does not expand wildcards, such as MSDOS, the backslashes are not needed. The above would then be
zip -d foo foo/tom/junk foo/harry/* *.o
Under MSDOS, -d is case sensitive when it matches names in the zip archive. This requires that file names be entered in upper case if they
were zipped by PKZIP on an MSDOS system.
а потом вставить нужную zip-команду в -exec файндовский. в любом случае - для того чтобы написать вариант с распаковать, удалить, запаковать в этом разделе сказано достаточно(смотрите внимательно мой пост про циклы, и первый пост этого топика + man zip)
-
- Сообщения: 32
Re: BASH Scripting
Привет. А у меня такой вопрос: как в цикле while сделать проверку на ввод нескольких символов сразу? тоесть case'om я выполняю действия по нажатию "Y" || "y" или по нажатию "N" || "n" а весь case поидее надо заключить в while но с проверкой вводимой переменной не на один вариант а, как получается, а на 4 (у меня тока робит while $arg != "y" , а надо что то типа while $arg != {y,Y,n,N} но так не робит.) Отрицание - потому что выполнять запрос и сравнивать его в case с "Y" || "y" или "N" || "n" до тех пор пока не выпадет одна из этих четырех букв. Сходу в гугле не нашел и в ABS guide тоже, там только такое задание как раз есть для практики...
-
- Сообщения: 355
- ОС: Gentoo
Re: BASH Scripting
«! echo "$arg"|grep -i 'y\|n'»?tremor писал(а): ↑17.07.2008 15:21Привет. А у меня такой вопрос: как в цикле while сделать проверку на ввод нескольких символов сразу? тоесть case'om я выполняю действия по нажатию "Y" || "y" или по нажатию "N" || "n" а весь case поидее надо заключить в while но с проверкой вводимой переменной не на один вариант а, как получается, а на 4 (у меня тока робит while $arg != "y" , а надо что то типа while $arg != {y,Y,n,N} но так не робит.) Отрицание — потому что выполнять запрос и сравнивать его в case с "Y" || "y" или "N" || "n" до тех пор пока не выпадет одна из этих четырех букв. Сходу в гугле не нашел и в ABS guide тоже, там только такое задание как раз есть для практики…
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: BASH Scripting
для bash(сравнительно не старого):
UP: лучше там "^(y|Y|n|N)$"
Код: Выделить всё
diesel@debian:/proc$ i=c; [[ $i =~ "(y|Y|n|N)" ]] && echo OK || echo "not OK";
not OK
diesel@debian:/proc$ i=y; [[ $i =~ "(y|Y|n|N)" ]] && echo OK || echo "not OK";
OK
diesel@debian:/proc$ i=n; [[ $i =~ "(y|Y|n|N)" ]] && echo OK || echo "not OK";
OK
UP: лучше там "^(y|Y|n|N)$"
-
- Сообщения: 32
Re: BASH Scripting
to ZyX: Отлично подошло, спасибо, все оказывается просто )) Экранирование "или" тоже весело само по себе )) Есть правда штука что если ввести аброкадабру с символом "y" или "n" то это посчитается за правильный ответ (например ответ вида "sdoNs" или "ydv") но на всех пользователей не угодишь...
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
-
- Сообщения: 96
Re: BASH Scripting
Сделал себе LiveCD: периодически бывает нужно иметь под рукой систему, похожую на домашнюю с доступом в интернет. Если бы япользовался диском один - ладно, всё настроил, сделал образ, записал. Но есть вариант, что такой диск будет не только у меня.
Вот написал скрипт для быстрой настройки интернет соединения, чтобы не тратить время на правку конфигов:
http://pastebin.com/m717ffd36
Пока черновой вариант, но уже вполне рабочий. Вы не могли бы посмотреть и подсказать, что лучше изменить или сделать по-другому.
Или и так сойдёт?
P.S.: С английским у меня никак, так что не смейтесь с комментариев.
Вот написал скрипт для быстрой настройки интернет соединения, чтобы не тратить время на правку конфигов:
http://pastebin.com/m717ffd36
Пока черновой вариант, но уже вполне рабочий. Вы не могли бы посмотреть и подсказать, что лучше изменить или сделать по-другому.
Или и так сойдёт?
P.S.: С английским у меня никак, так что не смейтесь с комментариев.
nyashka
-
- Сообщения: 25
- ОС: debian etch
Re: BASH Scripting
пытаюсь показать файлы только двух типов:
find . -name '*\.(ext1|ext2)' -type f -print
не получается. Подскажите в чём ошибка.
find . -name '*\.(ext1|ext2)' -type f -print
не получается. Подскажите в чём ошибка.
-
- Сообщения: 25
- ОС: debian etch
Re: BASH Scripting
подскажите какой связкой утилит можно выбрать файлы каких то определённых типов.
заранее благодарю.
заранее благодарю.
-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: BASH Scripting
find . -regextype posix-egrep -regex '.*\.(ext1|ext2)'
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Сообщения: 355
- ОС: Gentoo
-
- Сообщения: 27
- ОС: Linux Ubuntu
Re: BASH Scripting
Здравствуйте...
Возникла необходимость создания скрипта для включения и выключения интернета.
Вообще задача такая:
Интернет включается командой pon dsl-provider.
Далее нужно сделать так:
смотрится если есть dsl-provider в процессах, если есть то kill его. - тем самым произойдет отключения интернета.
Объяснение еще проще:
Тыкаем по скрипту - загружается инет.
Тыкаем второй раз по этому скрипту - интернет отключается.
Реализуемо такое вообще?!
Возникла необходимость создания скрипта для включения и выключения интернета.
Вообще задача такая:
Интернет включается командой pon dsl-provider.
Далее нужно сделать так:
смотрится если есть dsl-provider в процессах, если есть то kill его. - тем самым произойдет отключения интернета.
Объяснение еще проще:
Тыкаем по скрипту - загружается инет.
Тыкаем второй раз по этому скрипту - интернет отключается.
Реализуемо такое вообще?!

-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: BASH Scripting
Сто лет назад родился у меня такой кривой скрипт для генерации меню FVWM:
Код: Выделить всё
#!/bin/sh
providers="provider1 provider2"
current=$(ps -o pid,cmd axw | awk '/^ *[0-9]* *(\/usr\/sbin\/)?pppd call/ {print $4}')
if [ -n "$current" ]; then
# Generate disconnect menu
echo "+ \"Disconnect $current\" Exec sudo poff $current"
else
# Generate connect menu
for provider in $providers; do
echo "+ \"Connect $provider\" Exec sudo pon $provider"
done
fi
Думаю, несложно будет адаптировать под ваши нужды, а лучше, просто позаимствовать идею. Или заглянуть в poff и слямзить оттуда.
Мои розовые очки