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

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

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

 

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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Опять вывод ls’а парсите? -_- Вы бы еще вывод дэйта додумались АВКом разобрать... И ведь, блин, додумались.
 

alarm() {
# тут что-нибудь на типа
# mail -s "Alarm!" root <<< "File $1 is not up to date."
}
now=$(date +%Y-%m-%d)
for f in /home/ftp/*.zip; do
    date=$(date -r "$f" +%Y-%m-%d)
    [[ $date == $now ]] || alarm "$f"
done


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:31 03-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Да-а-а, я такой извращенец)

Цитата:
%Y-%m-%d
а про часы забыли... Так что если укорачивать то так: %D\ %H.
 
p.s. да у ls-то дату не вывести в произвольном формате, вот я машинально и date за компанию распарсил. Выражение уже было, просто скопировал его и всё)
 
Добавлено:
Я поначалу думал вывод stat распарсить, честно не знал что date имеет ключ -r...

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 14:14 04-08-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> а про часы забыли
Да, да, признаюсь, саму задачу я не читал.
 
> думал вывод stat распарсить
Да, можно было бы; а если бы потребовалась дата доступа, а не модификации, то и пришлось бы. Вот:
$ date -d "@$(stat -c %X file)" "+%F %H"
Но не АВКом же. ;-)

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:31 04-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Я как-то не привык к такому использованию date... Надо будет запомнить)

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 14:35 04-08-2012
ck80

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Да, действительно, вы правы. Без имени файла не удобно.
 
ASE_DAG
Не могу заставить работать ваш скрипт, подскажите, пожалуйста, что не так?
 

Код:
#!/bin/bash
alarm() {
mail -s "File $1 is not up to date." root  
}
 now=$(date +%Y-%m-%d)
 for f in /home/ftp/exchange/*1.zip; do
     date=$(date -r "$f" +%Y-%m-%d)
     [[ $date == $now ]] || alarm "$f"
 done

 
Ругается:

Код:
sh /usr/share/autoobmen2.sh
/usr/share/autoobmen2.sh: 9: [[: not found
alarm /home/ftp/exchange/a1.zip
/usr/share/autoobmen2.sh: 9: [[: not found
alarm /home/ftp/exchange/b1.zip
/usr/share/autoobmen2.sh: 9: [[: not found
alarm /home/ftp/exchange/c1.zip
/usr/share/autoobmen2.sh: 9: [[: not found
alarm /home/ftp/exchange/d1.zip
 

Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 10:17 10-08-2012 | Исправлено: ck80, 10:19 10-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ck80
Вообще скрипт корректен... Ошибка знакомая но не могу вспомнить когда она вылезает, кроме случаев когда вы не поставили пробел между [[ и $date.
Можете заменить эту строку на такую - test $date == $now || alarm "$f"

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 10:56 10-08-2012
ck80

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
А now это команда? Если так то у меня в системе нет такой команды. А вот date есть.

Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 12:26 10-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ck80
Вас просто немного запутали имена переменных которые использовал т. ASE_DAG.
То что стоит перед знаком =, что и логично это имя переменной. Соответсвенно что бы получить её значение перед именем ставится $. И того now — это переменная, а date это и переменная и одноимённая команда.

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 12:40 10-08-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Упс, что-то я пропустил последние посты.
 
>> sh /usr/share/autoobmen2.sh
>> [[: not found
> когда она вылезает
Ну, например, когда синтаксического элемента [[ в вашем шелле нет. Тов. Ck80 из каких-то соображений во-первых вместо того, что вызывать скрипт как исполняемый, явно вызывает интерпретатор (что еще не беда), а во-вторых вызывает не тот интерпретатор, под который скрипт написан — sh вместо bash — вот тут результат ожидаем.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 03:28 22-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
Упс, что-то я пропустил последние посты.  
) ответ 12 дней спустя)

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 09:15 22-08-2012
dimmer123

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, нужно в зависимости от содержимого файла  запускать определенную задачу. Пример из nncron:

Код:
 
#( Задача_084213062012
NoActive
SingleInstance
Action:
S" E:\Tes\1.txt" FILE S>NUM
CASE  
 70 OF MSG: "70" ENDOF
 60 OF MSG: "60" ENDOF
 50 OF MSG: "50" ENDOF
 DUP OF MSG: "0" ENDOF
ENDCASE
)#
 

 
Как сделать то же самое средствами линукс (Centos)?

Всего записей: 98 | Зарегистр. 17-09-2007 | Отправлено: 22:35 26-08-2012 | Исправлено: dimmer123, 22:39 26-08-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimmer123
> в зависимости от содержимого файла  запускать определенную задачу
Давайте без мнимых упрощений. Какая реальная задача стоит?
 
> Пример из nncron
Извините, но этот синтаксис мне не знаком и не кажется интуитивно понятным. Опишите словами или псевдоязыком.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:30 26-08-2012
dimmer123

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В файле находится одно число: 10 или 20, 30 и т.д до 360. В зависимости от числа, ImageMagick поворачивает картинку на определенный угол и вырезает кусок.
 
Например,  
если в файле 10, то запускаем convert big.png -rotate 80 -crop 80x22+190+173 small.png
если в файле 20, то запускаем convert big.png -rotate 70 -crop 80x22+185+185 small.png
если в файле 30, то запускаем convert big.png -rotate 60 -crop 80x22+178+197 small.png
и т.д

Всего записей: 98 | Зарегистр. 17-09-2007 | Отправлено: 01:36 27-08-2012 | Исправлено: dimmer123, 01:39 27-08-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> если в файле 10
А если в файле 15? Угол поворота — это 90 – a; а координаты левого верхнего края каким соотношением со входом связаны?
 
Впрочем, если хотите плодить китайский код, то не вижу затруднений, какие могли бы вам встретиться:
 

Код:
#!/bin/bash
set -e
INPUTFILE='/tmp/myinputfile'
INPUTIMG='big.png'
OUTPUTIMG='small.png'
 
do_convert() {
    convert "$INPUTIMG" -rotate $1 -crop 80x22+${2}+${3} "$OUTPUTIMG"
}
 
read IN < "$INPUTFILE"
case $IN in
    10) do_convert 80 190 173 ;;
    20) do_convert 70 185 185 ;;
    30) do_convert 60 178 197 ;;
    # and so on
    *)  echo >&2 'E: Invalid input.' ;;
esac

 
Написано навскидку и не проверено, надеюсь, что косяков нет.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 09:30 27-08-2012 | Исправлено: ASE_DAG, 09:39 27-08-2012
dimmer123

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Большое спасибо. Работает.
 

Цитата:
Впрочем, если хотите плодить китайский код, то не вижу затруднений, какие могли бы вам встретиться:

Я так и не нашел, как в Imagemagick вырезать кусок картинки под определенным углом. Поэтому я просто вращаю картинку на нужный угол и вырезаю прямоугольник.

Всего записей: 98 | Зарегистр. 17-09-2007 | Отправлено: 23:35 27-08-2012 | Исправлено: dimmer123, 23:38 27-08-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimmer123
> Большое спасибо.
Всегда пожалуйста. :-) Но основную мысль моего сообщения вы почему-то проигнорировали. Пусть сам по себе Баш и не умеет тригонометрии, но всегда можно и нужно использовать внешнюю утилиту (в этом и смысл шелла), а не писать код удивительно сочетающий в себе благодаря 36-и строчкам условий — детскую прямоту и наивность, а благодаря 72-м предварительно рассчитанным неизвестным образом «магическим» числам — абсолютную непрозрачность.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:42 28-08-2012
dimmer123

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

Цитата:
Но основную мысль моего сообщения вы почему-то проигнорировали.  

Основную мысль я понял сразу, но она не совпадает с моей, поэтому не хотел вас как-то обидеть или показаться неблагодарным. Я не программист и для меня существует 2 вида кода: рабочий и нерабочий. Пусть он корявый, длинный и с точки зрения настоящего программиста не правильный, но он работает! Пусть он обрабатывается на несколько секунд дольше или больше загружает процессор - пока меня это не волнует. Возможно, знающий человек сможет заменить мои 36 условий на что-нибудь покороче, но я сделал как мог, и оно работает.

Всего записей: 98 | Зарегистр. 17-09-2007 | Отправлено: 15:37 28-08-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimmer123
Вопрос, который я задал, требовал, кажется, куда более простого ответа, чем вы дали.
Он, я напомню, звучал так: «координаты левого верхнего края каким соотношением со входом связаны?». Ответ я полагал получить вида: «x = f(a); y = g(a)». Ответьте, пожалуйста.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:32 28-08-2012 | Исправлено: ASE_DAG, 18:33 28-08-2012
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.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 20:42 28-08-2012
dimmer123

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В формулах не силен, объясню на пальцах. Есть такая картинка. Из INPUTFILE берется направление (10-360). А вырезать нужно стрелку с противоположным направлением (плюс 180 градусов). Т.е если в файле 90, вырезаем стрелку 270 + немного по бокам от стрелки, прямоугольник 80x22. Магические цифры я подбирал вручную, просто вырезал кусок и смотрел, подходит или нет. Стрелки сходятся в центре с координатами 262px слева, 287px сверху.

Всего записей: 98 | Зарегистр. 17-09-2007 | Отправлено: 21:00 28-08-2012
Открыть новую тему     Написать ответ в эту тему

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