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

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

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

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



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

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

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

Всего записей: 360 | Зарегистр. 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 и не давать запускать новой копии?

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



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

Всего записей: 710 | Зарегистр. 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
 


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

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

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

Всего записей: 360 | Зарегистр. 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
 

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

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

Всего записей: 360 | Зарегистр. 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 и т.д., как теперь сделать перемещение файлов одного дня в папку с нужной датой?

Всего записей: 360 | Зарегистр. 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, так ни в коем случае нельзя делать

Всего записей: 421 | Зарегистр. 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

Всего записей: 421 | Зарегистр. 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

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

Всего записей: 421 | Зарегистр. 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.

Всего записей: 6571 | Зарегистр. 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.

Всего записей: 6571 | Зарегистр. 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 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