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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snikersmu
Не надо описывать вывод словами. Надо его просто привести.
 
Должно быть:
 
$ cat lease.list
lease 192.168.1.70 {  
starts 2 2011/03/29 15:02:04;  
ends 4 2011/04/28 15:02:04;  
cltt 2 2011/03/29 15:02:04;  
binding state active;  
next binding state free;  
hardware ethernet 00:0c:29:70:78:9e;  
uid "\001\000\014)px\236";  
}

 
$ awk -v 'RS=}' '/00:0c:29:70:78:9e/{print $2}' lease.list
192.168.1.70

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 03:11 30-03-2011
snikersmu

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как передать и т.д. это я в курсе,  ваш вариант не работает.  
Пока что я делаю это через одно место, из другого файла в котором знаю мак адрес машины делаю  
| grep "MAC" | head -1 | awk '{print $3}' | sed -e 's/,//g;s/"//g'
Потом IP=`cat /var/log/syslog | grep "to $MAC" | awk '{print $8}' | head -1`
В syslog dhcp пишет как раз строку "to нужный_мне_мак", 8-ое слово - нужный мне IP  
 
Добавлено:
root@debian:/var/lib/dhcp# awk -v 'RS=}' '/00:0c:29:70:78:9e/{print $2}' dhcpd.leases
The
Вот вывод вашей команды в случае если в файле dhcpd.leases ещё куча значений и второе слово The )

Всего записей: 5 | Зарегистр. 23-12-2008 | Отправлено: 03:12 30-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snikersmu
> | grep "MAC" | head -1 | awk '{print $3}' | sed -e 's/,//g;s/"//g'  
Потом IP=`cat /var/log/syslog | grep "to $MAC" | awk '{print $8}' | head -1`  
Какой ужас. ;)
 
Так как он там работает вместо того, как должен?
Система, кстати, какая: ГНУ или нет?

 
Ага, вижу.
 
Добавлено:
Вы файл-то ваш (dhcpd.leases) приведите, а то вы дали за образец одно, а проверяете на другом.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 03:17 30-03-2011 | Исправлено: ASE_DAG, 03:26 30-03-2011
snikersmu

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.1.1-P1
 
server-duid "\000\001\000\001\025$\252\031\000\014)\230\016l";
 
lease 192.168.1.70 {
  starts 2 2011/03/29 15:02:04;
  ends 4 2011/04/28 15:02:04;
  cltt 2 2011/03/29 15:02:04;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:70:78:9e;
  uid "\001\000\014)px\236";
}
lease 192.168.1.74 {
  starts 2 2011/03/29 15:02:04;
  ends 4 2011/04/28 15:02:04;
  cltt 2 2011/03/29 15:02:04;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:70:55:44;
  uid "\001\000\014)px\236";
}
и так далее и тому подобное

Всего записей: 5 | Зарегистр. 23-12-2008 | Отправлено: 03:27 30-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snikersmu
Ну можно, конечно написать так:
 
$ awk 'BEGIN{do getline; while (match($0,"^#|^server-duid")); getline;  RS="}"}; /00:0c:29:70:78:9e/{print $2}' dhcpd.leases
 
, но это уже крайне неопрятно.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 04:02 30-03-2011
snikersmu

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, попробую потом.  
Ну это же лучше чем через другой! сервер через ssh лезть за файлом с маком, потом по логам! dhcp читать какой IP присвоен на этот мак)))

Всего записей: 5 | Зарегистр. 23-12-2008 | Отправлено: 04:24 30-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snikersmu
Ну, по-хорошему, наверное, имеет смысл сформировать таблицу соответствий IP — Mac:
 
$ awk '/^lease/{printf $2" "}; /[:space:]*hardware ethernet/{print $3}' dhcpd.leases
192.168.1.70 00:0c:29:70:78:9e;
192.168.1.74 00:0c:29:70:55:44;

 
; а потом по ней уже искать. ;)

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 04:42 30-03-2011 | Исправлено: ASE_DAG, 04:48 30-03-2011
SergeyKulikov



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG, большущее спасибо за ответы.

Цитата:
P.S. Простите за любопытство, вы вручную разукрашиваете посты?

Да, хотел, чтобы было читабельнее и красивее
 
Про watch не слышал, но потом попробую cmdwatch. Хотелось бы примерно понять, что она делает?
 
Alukardd, учитель на курсах по FreeBSD в КПИ посоветовал мне изучать Python и попробовать перейти на оболочку IPython
Говорит это типа bash + python, типа всё в одном. Не знаю вот тратить время на изучение или нет

Всего записей: 24 | Зарегистр. 09-02-2011 | Отправлено: 23:01 04-04-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо проверить ftp сервер на наличие обновлений с определенной даты.
Ни как не могу учесть дату...
Пытался так:
touch -d ' . . . ' tf - создаю файл с нужной временной меткой
curl -sz tf ftp:/... - получаю список файлов обновленных с периода метки tf
Только хрен он учитывает временную метку. Вываливает мне листинг всей директории, а она мне ну ни как не впёрлась.
Писать парсер с условиями мне не охота, когда есть специальная опция для этого!

----------
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 | Отправлено: 18:31 08-04-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> curl
А никакие другие клиенты принципиально нельзя использовать?
lftp там, не? А у него хорошая команда — mirror — есть.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:50 08-04-2011 | Исправлено: ASE_DAG, 18:50 08-04-2011
Glaf

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Понадобилось мне тут написать небольшой скрипт (Ссылка).
В консоли ввожу команду:

Код:
> zmprov csig user@org.ru main zimbraPrefMailSignatureHTML 'user@org.ru, www.org.ru<img style="border: 0pt none;" src="http://org.ru/bannerletter.gif">'
 

Работает.
Пытаюсь то же проделать в скрипте:

Код:
#!/bin/sh
# Формирую текст почтовой сигнатуры. $1 - email
SIGNATURE=$1', www.org.ru<img style="border: 0pt none;" src="http://org.ru/bannerletter.gif">'
# Готовлю команду. Сигнатуру заключаю в одинарные кавычки
SIGN_COMMAND='zmprov csig '$1' main zimbraPrefMailSignatureHTML '"'"$SIGNATURE"'"
# Проверяю, что должно выполниться
echo $SIGN_COMMAND
# Выполняю, должен получить ID новой записи в БД
echo "`$SIGN_COMMAND`"
 

Результат работы скрипта:

Код:
> . /opt/script/modify_signature.sh user@org.ru
 
zmprov csig user@org.ru main zimbraPrefMailSignatureHTML 'user@org.ru, www.org.ru<img style="border: 0pt none;" src="http://org.ru/bannerletter.gif">'
usage:  createSignature(csig) {name@domain} {signature-name} [attr1 value1 [attr2 value2...]]
.....
 

и дальше куча ошибок.
Что делаю не так? Есть идеи?

Всего записей: 6 | Зарегистр. 26-04-2006 | Отправлено: 23:41 08-04-2011 | Исправлено: Glaf, 23:42 08-04-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
спс, не знал о нём)))
если кому пригодится то вот как всё просто выглядит:
lftp -e 'mirror --newer-than="Mar 01 2011" && exit' ftp://login:pwd@server.ru
скачает в текущую директорию все файлы новее указанной даты включительно, можно указать точное время.

----------
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 | Отправлено: 00:08 09-04-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Glaf
Так тоже выдает ошибки:
#!/bin/sh
zmprov csig "$1" main zimbraPrefMailSignatureHTML "$1"', www.org.ru<img style="border: 0pt none;" src="http://org.ru/bannerletter.gif">'

?

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:12 09-04-2011 | Исправлено: ASE_DAG, 00:30 09-04-2011
Alukardd



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

Цитата:
 '"'"$SIGNATURE"'"  

вы кажется тут перемудрили с кавычками...
попробуйте так: ...HTML \''"$SIGNATURE"'\''

----------
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 | Отправлено: 00:15 09-04-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> спс, не знал о нём
Всегда пожалуйста.
 
> вы кажется тут перемудрили с кавычками
Я вообще не понимаю, зачем так мудрить с записью команды в переменную, а не сделать так, как я написал выше.
 
> echo "`$SIGN_COMMAND`"  
Вот это, кстати, замечательный костыль для замены команды command (вполне позиксной, афайк).

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG, Alukardd

Цитата:
#!/bin/sh
zmprov csig "$1" main zimbraPrefMailSignatureHTML "$1"', www.org.ru<img style="border: 0pt none;" src="http://org.ru/bannerletter.gif">'

Ошибок не выдаёт. Значит, точно перемудрил с кавычками.  
Ага, вижу, переменные надо в двойные кавычки заключать.
 

Цитата:
...HTML \''"$SIGNATURE"'\''
ругается на неожиданный EOF. Попробую с кавычками в SIGNATURE разобраться, направление поиска понял  
 

Цитата:
echo "`$SIGN_COMMAND`"
изначально выглядело как
Код:
SIGN_ID="`$SIGN_COMMAND`"
. Мне эта переменная потом в скрипте нужна будет. Синтаксис стянул из какого-то скрипта. А как это будет выглядеть с командой command?
 
 
 

Всего записей: 6 | Зарегистр. 26-04-2006 | Отправлено: 11:16 09-04-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Glaf
если ругается на eof то попробуйте вместо \' написать просто "

Цитата:
А как это будет выглядеть с командой command?  
command "$SIGN_COMMAND"
 
Добавлено:

Цитата:
Ага, вижу, переменные надо в двойные кавычки заключать.  
это вообще неотложная истина!

----------
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 | Отправлено: 11:31 09-04-2011
Glaf

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

Цитата:
попробуйте вместо \' написать просто "
 
то есть, в таком виде:

Код:
...HTML "'"$SIGNATURE"'"'  
? Номер не проходит, т.к. внутри SIGNATURE есть двойные кавычки. Или я чего не понял?
 

Цитата:
command "$SIGN_COMMAND"
А как вернуть результат в переменную SIGN_ID?
 
 
 
Добавлено:
Alukardd, ASE_DAG, благодарю!
Всё получилось.
В результате конец скрипта выглядит так:
Код:
SIGN_ID=`zmprov csig "$1" "$1" zimbraPrefMailSignatureHTML "$SIGNATURE"`
zmprov ma "$1" zimbraPrefDefaultSignatureId "$SIGN_ID"
zmprov ma "$1" zimbraPrefForwardReplySignatureId "$SIGN_ID"
 


Всего записей: 6 | Зарегистр. 26-04-2006 | Отправлено: 11:41 09-04-2011
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди добрые, посодействуйте плиз! Имеется система Kubuntu 10.10, локаль utf-8, Опера 11.01 1190. В Опере меню подрихтовано и добавлен пункт:

Код:
Item, "Вывести имя файла"="execute program,"xterm -hold -e echo","%l""

Проблема в следующем, при выборе этого пункта на ссылках с русскими символами в именах файлов, выводится всякая дрянь. Например ссылка (это копипаст из Оперы):
http://server/Живой%20Ленин.avi
принимает вид:
http://server/82>9%20=8=.avi
 
Помогите забороть этот баг.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 11:01 10-04-2011 | Исправлено: Maximus777, 11:03 10-04-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
Ну это, очевидно, проблема на стороне Оперы.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:37 10-04-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