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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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

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

 

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

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: ASE_DAG, 22:02 01-03-2017
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Запустил скрипт по cron с интервалом в 5 мин, вроде работает, а после Вашего сообщения сделал ps и немного стало плохо, сколько его было в процессах. Прописал в начале скрипта killall script-net.sh.

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 11:35 19-08-2008
albel



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
digital422
а зачем пускать скрипт каждые пять минут?
Скрипт же будет работать, пока не появится сообщение об ошибке.
Его можно в автозагрузку поставить при старте системы - и всё.

Всего записей: 10996 | Зарегистр. 30-08-2002 | Отправлено: 12:50 19-08-2008
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как можно засунуть этот скрипт в процессы? Я его запускаю, он висит как запущенный процесс, но при Ctrl+C и выходе из сеанса в процессы он не попадает. С cron тоже непонятки: ждал 15 срабатываний (через минуту), но по ps скрипт не увидел, тогда как в прошлый раз он наплодился в процессах?

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 18:20 20-08-2008
chu80

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Скрипт будет висеть в процессах пока не отработает либо пока не вывалится в результате ошибки.  Если скрипта в процессах нет, значит он отработал. ps показывает текущие процессы.  
 
По Ctrl+C ты просто вручную завершаешь работу скрипта. Чтобы этого не происходило в конце добавляй через пробел &
 
Лучше всего запускать скрипт (чтобы он не вываливался когда завершает работу shell его породивший) из другого скрипта. Поправьте меня, если не прав.

Всего записей: 11 | Зарегистр. 14-05-2008 | Отправлено: 05:48 22-08-2008
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возник снова вопрос по скрипту. Есть скрипт на базе rsync, который запускается по cron каждые 10 минут. Если размер файла не успевает скачаться то запускается 2-я копия rsync (были случаи когда из висело порядка 30 штук.). Вопрос-как должна выглядеть строка, которая проверяет наличие в процессах уже запущенного rsync и не давать запускать новой копии?

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 19:24 31-03-2009
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
добрый день. подскажите, как проверить, что входной параметр ($1) в скрипте является числом

Всего записей: 708 | Зарегистр. 08-09-2007 | Отправлено: 07:09 30-08-2009
albel



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Jokerjar79
Чтобы проверить, является ли слово числом, попробуйте прибавить к нему любое число (например, 0) командой expr. Если expr завершится с кодом 0, то слово является числом, иначе - нет.  
 

Код:
 
#!/bin/bash
if [ -z $1 ]; then
    echo "You must provide at least one command line argument"
    exit -1;
fi
expr $1 + 0  1>>/dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "$1 is a number"
else
    echo "$1 is a string"
fi
 


----------
Я никогда не спорю. Я никогда не противоречу. Я иногда забываю. / © Б.Дизраэли/

Всего записей: 10996 | Зарегистр. 30-08-2002 | Отправлено: 11:13 30-08-2009
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как в сделать в блоке if [ ]; then сравнение файла по размеру? Задача-есть файл, его надо проверять через определенный промежуток времени, если он 0 размера или не изменил свой размер - то выполнять комманду.

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 10:27 19-11-2009
FuzzyLogic



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

Код:
 
FILENAME=zz.sh
FILESIZE=$(stat -c%s "$FILENAME")
if [ "$FILESIZE" = "0" ] ; then
  .......
fi
 

Всего записей: 1898 | Зарегистр. 27-07-2002 | Отправлено: 10:31 19-11-2009
digital422

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

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 20:38 28-11-2009 | Исправлено: digital422, 10:33 08-05-2010
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите дописать скрипт. Есть папка с картинками, которые создаются ежедневно, надо сделать рассортировку из них по папкам.  
 
#!/bin/sh  
LS=`ls --full-time $PATH_IN |awk '{print($6)}' | uniq`  
 
for create_dir in $LS  
do  
    mkdir -p $PATH_OUT/$create_dir  
done  
 
Создаются папки, например 2010-04-21, 2010-05-01 и т.д., как теперь сделать перемещение файлов одного дня в папку с нужной датой?

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 10:34 08-05-2010
ulego

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
for i in `ls -tl | awk '{print $6}' | uniq | sort`; do for f in `ls -lg | grep -e $i | awk '{print $7}'`;do mv $f ../$i ;done;done
Так например, но это такое через спину, что даже не ругайся!  
 
Добавлено:
Лучшее это сделать через find (в смысле найти файлы по времени и передвинуть), но идея понятнэ

Всего записей: 35 | Зарегистр. 16-05-2008 | Отправлено: 19:52 02-06-2010
SysCommander

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
некрофилы
 
по сабжу:
 
for i in `ls` - это известный bash pitfall, так ни в коем случае нельзя делать

Всего записей: 414 | Зарегистр. 20-07-2007 | Отправлено: 21:53 02-06-2010
ulego

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SysCommander
А что такое питфал? И скажи как правильнее?  
digital422
 
Еще дату создания файла можно узнать так:  
date -r $files +%F
 
 
Добавлено:
for file in *; do if [[ ! -f $file ]];then date -r $file +%F; fi; done  
 
 
Добавлено:
Эх!  
Вот эта строчка делает папки и рассовывает туда файлы по дате создания  
for file in *; do if [[  -f $file ]];then dirname=$(date -r $file +%F) && [ -d $dirname ] ||  mkdir $dirname && mv $file $dirname/$file; fi; done  

Всего записей: 35 | Зарегистр. 16-05-2008 | Отправлено: 11:27 03-06-2010
SysCommander

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

Цитата:
А что такое питфал? И скажи как правильнее?

 
http://mywiki.wooledge.org/BashPitfalls

Всего записей: 414 | Зарегистр. 20-07-2007 | Отправлено: 22:40 03-06-2010
ulego

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот спасибо, хорошо!  
Наконец-то я увидел ребят, которые думают не о том, что Столлмен говорит, а о работе!  
Никаких свобод, главное - правила!  
 
 
Добавлено:
Но вообще я неправ и прошу прощения, ибо учиться надо с верного!  
Но конструктивнее переводить термины на родной язык, а так же предлагать свои решения проблемы, и все-таки Спасибо SysCommander искренне
 
 
Добавлено:
http://bappoy.pp.ru/2008/12/13/bash-pitfalls-part01.html

Всего записей: 35 | Зарегистр. 16-05-2008 | Отправлено: 12:08 04-06-2010
SysCommander

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

Цитата:
конструктивнее переводить термины на родной язык

 
На чей родной язык?
С таким подходом был бы сейчас линукс на финском и пользовался бы им только Торвальдс.
Английский является стандартом интернета и его надо учить, это факт.
 

Цитата:
http://bappoy.pp.ru/2008/12/13/bash-pitfalls-part01.html

 
Об этой ссылке я узнаю только сейчас, наверно потому что даже не задавался целью искать перевод.
Замечательно что автор указал ссылку на оригинал.
Было бы еще лучше если бы он связался с автором оригинала и обсудил бы появление там ссылки на русский перевод. Конечно, при этом придется перевести всю доку полностью и взять на себя определенные обязательства по поддерживанию и синхронизации с возможными новыми изменениями в оригинале. Такова общепринятая практика.

Всего записей: 414 | Зарегистр. 20-07-2007 | Отправлено: 14:48 04-06-2010
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ подскажите плз...
настроил прогу free-sa для анализа логов squid3... запихал скрипт в cron.daily только вот я написал только для ежедневных и ежемесячных отчётов...
ни как не могу понять как написать на еженедельный...
синтаксис вызова создания отчётов "free-sa -o $DIRECTORY -d $from-"
так сейчас вызывается для дня и месяца
Код:
# ежедневный
date1=`date +%x`
free-sa -o /var/www/free-sa-reports/daily -d $date1-
# ежемесячный
cur_m=`date +%m`
cur_g=`date +%g`
free-sa -o /var/www/free-sa-reports/monthly -d 01.$cur_m.20$cur_g-
не могу понять как определить число понедельника текущей недели... отчёты понятное дело месячные и недельные меняются каждый день, но с заменой своих аналогов за меньший период времени...

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 15:17 04-06-2010 | Исправлено: Alukardd, 15:26 04-06-2010
H4rDc0r3

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собсна в создании баш-скриптов я вообще ничего не понимаю, поэтому прошу помощи у пользователей этого форума,
Сабж: http://radjik.blogspot.com/2010/03/wwwpixivnet.html
может кто-нибудь объяснить, ну или даже сделать этот скрипт?
поэтапно, если можно.
Лог и пасс на тест:  
Log(pixid): scarletttt
Pass(pixpass): 666b255
 
Направили сюда, сказали, что тут могут помочь =)
 
И ещё вопросец, под Windows 7 нельзя такое сделать? или только под UNIX OS можно?
 
Заранее огромное спасибо
 

Всего записей: 10 | Зарегистр. 19-09-2010 | Отправлено: 19:48 19-09-2010
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
H4rDc0r3
что куда сделать? скрипт уже написан его только запускай и радуйся - он работает! В нём только один косяк, он качает не сколько укажешь а как-то по другому, то ли постранично, но хз сколько страниц - в общем в этом я не копался...
 

Цитата:
И ещё вопросец, под Windows 7 нельзя такое сделать?
можно, но думаю для этого вам придется скачать unix'овые утилиты под вынь, а именно pcregrep, sed, wget, curl и будет вам счастье и среди форточек...

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

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 20:18 19-09-2010 | Исправлено: Alukardd, 20:19 19-09-2010
Открыть новую тему     Написать ответ в эту тему

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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru