Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
AltTab



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго всем дня!
 
Прошу совета у сообшества.
Ubnutu server 12.04.
Есть скрипт, которым архивирую данные на виндовой машине. Перенес с учетом логики скрипта, как мог, в меру своих скудных знаний, на sh. И получаю картину: если запускать скрипт построчно, копируя строки из редактора в консоль, все выходит отлично. Но как только пробую готовый скрипт запустить - не выходит каменный цветок.
 
Если напрямую запускать

Код:
 
# /opt/share/public/_/arc_base.sh
-su: /opt/share/public/_/arc_base.sh: /bin/bash^M: плохой интерпретатор: Нет такого файла или каталога
 

 
Если через sh 'скрипт' - море ошибок и нет толку. Скрыто:
Подробнее...
 
Причем в точке назначения создаются две папки с текущей датой и точкой и двумя точками. То есть, к примеру, сегодня:
2013-06-26.
2013-06-26..
 
и скрипт не выполняет практически никакой работы, только создает пустые архивы.
 
Сам скрипт:
 
Подробнее...
 
Пожалуйста, тыкните носом, что там не так? Спасибо!

----------
Все, я пошел...
Шалабудабуда...

Всего записей: 247 | Зарегистр. 07-06-2004 | Отправлено: 15:24 26-06-2013 | Исправлено: AltTab, 15:25 26-06-2013
Sphinx114



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо сохранить скрипт в Unix-кодировке, вы видимо в винде писали. Они переносом строк различаются.
Гугл подсказывает:
# apt-get install dos2unix
# dos2unix /opt/share/public/_/arc_base.sh
 
Можно так: gedit ->сохранить как -> конец строки Unix

Всего записей: 1201 | Зарегистр. 26-03-2011 | Отправлено: 15:53 26-06-2013 | Исправлено: Sphinx114, 16:05 26-06-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AltTab
> /bin/bash^M: плохой интерпретатор
Дык у вас мусор в конце каждой строки. Символ \r (он же ^M, он же carriage return (CR) — возврат каретки).  
 
Последовательность \r\n — это MSDOS’овский способ перевода строки. Вам же надо использовать просто \n.
 
В Виме можно поменять формат строк так:
:set fileformat=unix

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:59 26-06-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
В Виме можно поменять формат строк так:
:set fileformat=unix

Или в командной строке,с помощью tr -d "\r"

Всего записей: 4969 | Зарегистр. 05-01-2006 | Отправлено: 16:02 26-06-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
#!/bin/bash
dat="$1"
echo "сегодня $dat" >> /tmp/testscript.log

 
И вызывать его, например, так: /tmp/testscript $(date '+%D')
 
Ну и в чем тут смысл? Чему не просто
 
#!/bin/bash
echo "сегодня $(date '+%F')" >> /tmp/testscript.log

 
или даже
 
#!/bin/bash
date '+сегодня %F' >> /tmp/testscript.log

 
 
Добавлено:
mithridat1
> tr -d "\r"
Не вполне корректно на самом деле. Ни dos, ни unix формат текстовых файлов не запрещает использовать \r равно как и любой другой доступный символ, т. е. он может встречаться не только в конце строки.
 
А вообще, очевидно, есть тысяча и один способ это сделать, в т. ч. не имея под рукой особых средств, например:
$ awk -v RS='\r\n' -v ORS='\n' '1' arc_base.sh  > arc_base.unix.sh
$ sed -i 's/\r$//' arc_base.sh
но ни к чему их все здесь приводить, поскольку т-щу AltTab’у будет куда полезнее узнать, где задается формат в его любимом текстовом редакторе, и им и воспользоваться.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:02 26-06-2013 | Исправлено: ASE_DAG, 16:25 26-06-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
смысл в передаче даты как аргумента

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6565 | Зарегистр. 28-08-2008 | Отправлено: 17:10 26-06-2013
yrkrus



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
Немного поясню, есть скрипт который проверяет наличе инета на канале, в случае падения переключает на резервный и через echo должна передаться дата "падения" и восстановления канала

Всего записей: 379 | Зарегистр. 30-11-2010 | Отправлено: 22:05 26-06-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yrkrus
Замечательно. Только есть мнение, что пояснять надо не «немного», а как можно подробнее. По крайней мере мне так и не понятно, чавой вы таки от нас хотите.
 
Как вывести в произвольном контексте текущую дату, я написал выше. Если есть вопросы — задавайте.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 01:46 27-06-2013 | Исправлено: ASE_DAG, 01:47 27-06-2013
AltTab



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sphinx114
ASE_DAG
mithridat1
Огромное спасибо! Вот никогда бы о таком исходе не подумал бы - точнее, знал же о разнице в переносе строки и специально сначала пытался сохранить в N++ с переносами UNIX. Затем, подозревая именно эту проблему, построчно копировал в vim строки из скрипта. Видимо, строка копируется с символом переноса, даже если перенос определяешь "энтером" вручную сам.
 
Огромное спасибо еще раз! И за полезную ветку обсуждений по такой теперь уже актуальной теме для меня. Буду штудировать.

----------
Все, я пошел...
Шалабудабуда...

Всего записей: 247 | Зарегистр. 07-06-2004 | Отправлено: 09:03 27-06-2013
yrkrus



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем спасибо, проблему передачи даты решил, двумя запросами, сначало передача "date" >> /var/log, а следом передача echo с текстом >> /var/log, скрипт после это корявый по написанию, но теперь хотябы время знаю если имеет место падение канала.

Всего записей: 379 | Зарегистр. 30-11-2010 | Отправлено: 09:32 27-06-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос
RedGeek
POSIX стандарт не предусматривает хранение времени создания файла. Знакомимся.
И того команда у Вас будет выглядеть примерно так:
find /data -mindepth 1 -maxdepth 2 -type f -printf '%f, %h, %s, %Tm.%Td.%TY %TT\n' > /tmp/result
 
Добавлено:
Выведет все файлы текущего катлога и его ближайших "потомков". Формат csv с разделителем запятая. Размер файла в байтах, время указано последнего изменения файла в формате "ДД.ММ.ГГГГ ЧЧ:ММ:СС.сс"

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6565 | Зарегистр. 28-08-2008 | Отправлено: 20:59 01-07-2013
RedGeek



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сообщением выше Alukardd ответил на вопрос:
-----------------------------------------------------
Добрый день!
 
Никак не получается написать команду, которая будет сохранять файлы из определенных директорий в csv файлы (имя файла, путь, размер, дата создания файла).
 
Название директорий 1 уровня должно состоять из 4-х цифр:
Код:
find . -maxdepth 1 -type d -name '[0-9][0-9][0-9][0-9]'

 
Директории выводятся правильно, но мне-то нужно рекурсивно обойти все файлы и поддиректории таких директорий 1 уровня и вывести в csv файл данные: имя файла, путь, размер, дата создания файла.
 
P.S. Если есть способ быстрее (например, locate), чем find - он был бы предпочтительнее, т.к. будет обрабатываться большое количество файлов и папок.
-----------------------------------------------------

Всего записей: 157 | Зарегистр. 11-12-2006 | Отправлено: 15:11 02-07-2013 | Исправлено: RedGeek, 16:42 02-07-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RedGeek
Думаю, вы совершенно правы — лучше привести вопрос даже после ответа, чем не привести вовсе (ссылки все-таки недостаточно); но отмечайте что-ли как-нибудь то, что этот вопрос к уже данному выше ответу, а то странно выглядит же. ;-)

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:38 02-07-2013 | Исправлено: ASE_DAG, 15:42 02-07-2013
RedGeek



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG действительно, поправил.
 
Alukardd Спасибо, это то, что нужно! А как передать регулярное выражение '[0-9][0-9][0-9][0-9]', т.е. чтобы команда выводила файлы, у которых корневая (папка 1 уровня, подпапок может быть много) состоит из 4-х цифр?

Всего записей: 157 | Зарегистр. 11-12-2006 | Отправлено: 16:40 02-07-2013 | Исправлено: RedGeek, 16:42 02-07-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RedGeek
как-то так:
-path "/data/[0-9][0-9][0-9][0-9]\|/data"
не проверял!

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6565 | Зарегистр. 28-08-2008 | Отправлено: 20:28 02-07-2013 | Исправлено: Alukardd, 20:29 02-07-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
А между тем, совершенно напрасно не проверяли. Аргументом к -path (он же -wholename) является не регэксп, а глоб. Со всеми вытекающими.
 
$ find
.
./6532
./6532/dd4e
./6532/dd4e/file
./6532/file
./43a6
 
$ find -path './[0-9][0-9][0-9][0-9]*' -type f
./6532/dd4e/file
./6532/file


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 04:03 03-07-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
я собственно и добавил \|/data, потому что pattern без него теряет файлы в текущем каталоге... Видимо придётся запускать 2 отдельных find...

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6565 | Зарегистр. 28-08-2008 | Отправлено: 10:12 03-07-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
> pattern без него теряет файлы в текущем каталоге
Во-первых, тов. Ред-Гик, вроде-бы, ничего не говорил про то, что ему потребны файлы в текущей директории. А во-вторых, регэксп /data/[0-9][0-9][0-9][0-9]\|/data находит файлы во всех каталогах. Нет, ну правда, посмотрите, он же избыточен и сокращается до /data. :-)
 
> 2 отдельных find
Хм. Ну если отвлечься от того, что использовать регэкспы вам никто не мешает (-regex), то, да, задача вывести файндом все файлы в текущей директории плюс рекурсивно все файлы в директориях ./[0-9][0-9][0-9][0-9] становится нетривиальной.
 
Третьим лицам
 
Нет, тов. Алукард прав, -maxdepth 1 применить нельзя, он непозиционный.
 
$ find \( -maxdepth 1 -o -path './[0-9][0-9][0-9][0-9]*' \) -type f
find: warning: you have specified the -maxdepth option after a non-option argument (, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 12:40 03-07-2013 | Исправлено: ASE_DAG, 14:06 03-07-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обнаружил, что ссылки на http://www.funtoo.org в шапке «побились». Исправил.

#: шапка версии ASE_DAG, 19:23 08-10-2012


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:43 03-07-2013
Aroun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, помогите с регуляркой под поиск e-mail
 
grep -Eo '(\w+\.)*\w+@(\w+\.)+[A-Za-z]+' mail.log
 
Не выводит адреса с дефисом, например адрес mana-1@ya.ru он спарсит так:
 
1@ya.ru
 
 
Добавлено:
Сам же и отвечаю:
 
grep -Eo '[0-9A-Za-z.-]+@(\w+\.)+[A-Za-z]+' mail.log

Всего записей: 680 | Зарегистр. 19-07-2005 | Отправлено: 16:58 06-07-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru