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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 154

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
у меня работает, я проверял...
давайте те файлы с которыми не работает... (точнее их куски и конечно же через файлопомойку а не копипастом)
 
Причем работает не зависимо от того, полный путь или только имя. Так что если вы поленитесь где-то писать путь, то это не помешает работает скрипта.
 
p.s. не имею привычки постить куски кода не проверив их. Если до этого дело доходит, то обычно ставлю пометку об этом...

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:51 14-09-2011 | Исправлено: Alukardd, 22:53 14-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://hddfiles.ru/download/9157/

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 08:10 15-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Все работает... Вы просто изменили конец строки в файле base.txt он у вас стал unix (т.е. \n, а не \r\n)
На всякий случай вот полный скрипт, который я запустил с вашими файлами (путь мой прописан...)
Код:
#!/usr/bin/gawk -f
BEGIN {
    FILELIST="/home/alukardd/script/9175/base.txt"
    RS=",\n";
    FS="_";
    while (getline < FILELIST) {
        var=$0;
        gsub(/.*\\/,"",$1);
        files[$1]=var;
    }
    RS="\n";
    FS=";";
    OFS=";";
}
/[[:digit:]]{6,9}/{
        gsub(/"/,"",$NF);  
      if ($1 == time)
          print ("",$2,$3,$4,$5,$6, $NF in files ? files[$NF] : "E: FILE " $NF " NOT FOUND");
      else {
          print ($0, $NF in files ? files[$NF] : "E: FILE " $NF " NOT FOUND");
        time = $1;
      }
}


----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 12:18 15-09-2011 | Исправлено: Alukardd, 12:19 15-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня тоже частично заработал. Есть проблема, если есть папка, содержащая символ нижнего подчеркивания, например:
v:\sound\brand1_brand1\123456_1111_25-5.mp3,
то путь не подставляется - NOT FOUND.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 13:30 15-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
ну вы блин... щас придумаю регулярку...
 
Добавлено:
Вот очередной костыль:
    while (getline < FILELIST) {
        var=$0;
        gsub(/.*\\/,"");
        gsub(/_.*/,"");
        files[$0]=var;
    }
 
p.s. может меня к вам на работу возьмут?)
 
В таком случае, кстати, строку FS="_"; можно удалять - она больше не нужна...

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 13:42 15-09-2011 | Исправлено: Alukardd, 13:47 15-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все, теперь все работает как надо, еще раз огромное СПАСИБО!
На работу - у нас не совсем стандартная специализация, есть много автоматизации, но нет стыковок между программами, приходится выдумывать, чтобы люди не тратили целый день на то, что можно сделать за секунды.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 14:47 15-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Пожалуйсто, заходите исчо)))
 
Нородная мудрость: Спасибо не булькает!

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 15:52 15-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всю голову себе сломал - не понимаю как выполнить условие (на вложенные if'ы принципиально бить не хочу)
Вот то, что накорябал: if ! [ -n "$OU" -o "$buf" =~ ".txt" ]; then
Написано для bash
 
Условие в теории должно выполнится, когда переменная OU пустая (="") И переменная buf не содержит .txt.
 
При такой записи у меня вообще вываливается ошибка: line 105: [: too many arguments и при этом заходит в тело if'а.

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 19:42 15-09-2011
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, Alukardd
А что должно значить/делать  if [ "$buf" =~ ".txt" ] ? У меня выдается ошибка "Ожидается бинарный оператор".  
Вроде как рабочий монстрик if ! [ -n "$OU" ]  && ! echo "$buf" | grep -q "\.txt" ; then

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 21:32 15-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Цитата:
что должно значить
должен искать совпадения.
Всё работает. Я допер разбить на 2 куска тест, но не допер к двум по отдельности НЕТ прилепить, все пытался их как-то объединить. Вы меня на мысль натолкнули!!!) Спасибо.
Вот рабочая строка: if ! [ -n "$OU" ] && ! [[ "$buf" =~ ".txt" ]]; then
Или что бы не отрицать лишний раз, то так: if [ -z "$OU" ] && ! [[ "$buf" =~ ".txt" ]]; then

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 21:37 15-09-2011 | Исправлено: Alukardd, 21:41 15-09-2011
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alukardd
Рад, что смог помочь.
PS Может таки [[ "$buf" =~ "\.txt" ]] (регекспы...)? Или так и надо?
PPS Понял.   if [[ "$buf" =~ ".txt" ]] работает, а if [ "$buf" =~ ".txt" ] выдает ошибку.

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 22:09 15-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Цитата:
(регекспы...)?
да вот хз - сам гадал, пока мучил эту строку... Пришёл к выводу что ничего не надо...

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:13 15-09-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> (регекспы...)?  
> вот хз - сам гадал

Цитата:
An additional binary operator, =~, is available, with the same precedence as == and !=.  When it is used, the string to the right of  the  operator  is considered  an  extended  regular  expression and matched accordingly (as in regex(3)).
bash(1), раздел «Compound Commands»

 
Да и зачем вам здесь вообще регэксп?
 
[[ !$OU && $buf != *.txt ]] — что может быть проще?


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:55 16-09-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
та хз) ну по поводу !$OU - я привык пользоваться функциями test. а что до != даже как-то в глову не пришло использовать wildcards (и самое главное что так будет работать)...
Думаю менять уже ни чего не буду, но как вариант спасибо, постараюсь запомнить.

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:57 16-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для финального запуска вышенаписанного скрипта написал несколько строчек, в папке ищется xls файлы, прогоняются через конвертер и на выходе в папке /make получаются финальные csv. Сильно нагородил?

Код:
 
### Чистим папку /make
$FIND $kanal1/make -type f -exec $RM {} \;
 
### После конвертера получаем файл с расширением xls.csv
file_list_kanal1=`$FIND $kanal1 -type f -name "*.xls" -printf "%f\n" | sort`
for a in $file_list_kanal1; do
    if [ -n "$a" ] ;
then
    $XLS2CSV $INPUT_PATH_kanal1/$a -c ";" > "$OUTPUT_PATH_kanal1/$a.csv"
    fi
done
 
### Убираем расширение xls.csv (получаемое от $a)
file_list_kanal1_out=`$FIND $kanal1/make -type f -name "*.xls.csv" -printf "%f\n" | sort`
for b in $file_list_kanal1_out; do
    if [ -n "$b" ] ;
then
    mv $OUTPUT_PATH_kanal1/$b $OUTPUT_PATH_kanal1/${b%%.xls.csv}
    fi
done
 
### Делаем финальный csv файл
file_list_kanal1_out1=`$FIND $kanal1/make -type f -printf "%f\n" | sort`
for c in $file_list_kanal1_out1; do
    if [ -n "$c" ] ;
then
    $GAWK --re-interval -f $CONVERTER $OUTPUT_PATH_kanal1/$c > $OUTPUT_PATH_kanal1/$c.txt
    $ICONV -f UTF-8 -t CP1251 $OUTPUT_PATH_kanal1/$c.txt > $OUTPUT_PATH_kanal1/$c.csv
    $RM $OUTPUT_PATH_kanal1/$c
    $RM $OUTPUT_PATH_kanal1/$c.txt
    fi
done
 
### Делаем отчет об отсутствующих файлах
$RM $PATH_LIST/error.txt
ERROR=$PATH_LIST/error.txt
 
$FIND $kanal1/make/ -type f -name "*.csv" -exec grep "NOT FOUND" {} \; | uniq >> $ERROR
 
echo "Convert OK" ......
 

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 15:10 20-09-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Уверены, что пути будут без пробелов?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:45 20-09-2011
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, для этого работает скрипт замены пробелов на символ "_".

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 16:05 20-09-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
InsideTM
 
Вы, когда гуглили, вот эту заметку находили? В курсе изменений на Твиттере я не состою, но ничего указывающего на ее неактуальность не вижу.


Цитата:
Добрый день.
Для одного скрипта требуется отправка сообщений в твитер, как форма уведомления. Можно ли это реализовать через Bash? или возможно есть отдельная консольная софтинка?
 
Раньше использовался следующий скрипт:
 
curl --basic --user "user:pass" --data-ascii "status=This Twitter update brought to you by curl on the command line" "http://twitter.com/statuses/update.json"
 
а теперь у него проблема с авторизацией, они закрыли обычную авторизацию и что делать дальше я не в курсе, т.к. линуксом не так давно занимаюсь.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 12:01 22-09-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SoftLord
 
Получать почту — очевидно, fetchmail. А дальше есть варианты: либо передавать их какому-нибудь MTA и идти курить по нему маны, либо обойтись без него и вытаскивать аттачи из RAW-потока.
Последнее нисколько не сложно, аттачи же — простое base64 представление.
 
Вот как можно это (загрузить письма и извлечь из них все аттачи) сделать без MTA:
 
$ fetchmail -s --nosyslog --bsmtp - | gawk -v RS='\r\n\\.\r\n' '{print > "message-" NR}'
$ munpack message-*

 
1. Здесь подразумевается, что fetchmail сконфигурен для доступа к нужному аккаунту, т.е. в .fetchmailrc прописано что-то вроде:
poll pop.mail.example.org protocol POP3 user "myusername" there with password "mypassword" nofetchall keep
2. Не понятно, зачем резать поток на отдельные сообщения, хотите сказать? Я тоже не понял почему, но факт, что с цельным bstmp-файлом munpack корректно работать отказывается.
3. munpack обычно поставляется вместе со своим «прямым» коллегой в пакете mpack.
 



Цитата:
Доброго времени суток, уважаемые форумчане!
 
Есть следующая задача: нужно получать e-mail'ы через pop3, вытаскивать из них вложения и складывать в определенную папку. Причем это надо делать в автоматическом режиме по крону на машине под управлением Linux. С помощью какой программы (пакета программ) это можно осуществить?
 
Заранее спасибо.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:32 25-09-2011 | Исправлено: ASE_DAG, 20:45 25-09-2011
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
ASE_DAG
Большое спасибо, камрады! Почерпнул много мудрости
 
Могу, если интересно, поделится нашими костыльками - я так слету скрипты писать не могу, приходится документировать.
Там наверху был совет с nohup - лучше IMHO # disown -a && exit иначе после закрытия терминала процесс грохнется.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 19:55 29-09-2011 | Исправлено: CrownRU, 20:01 29-09-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 154

Компьютерный форум 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