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

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

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

 

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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
> после аутентификации происходит редирект
Не совсем. Вы упорно не приводите вывод, а приводили бы — видели бы, что login.php возвращает 302 Found пустым полем Location. Это не стандартизированное поведение, и обрабатывать такой ответ могут по-разному: никак, как Location: / или как обновление текущей страницы. Курл его никак не обрабатывает. Ко всему прочему, и корректным редиректам он будет следовать только если явно ему это приказать (-L). Поэтому я и говорю, что «в ответ на $ curl -k -v --output file_rez  --user-agent Mozilla/4.0 -d "login=***&password=***" https://stat2.magnus.net.ua/login.php страница https://stat2.magnus.net.ua/ никогда не вернется».
 
> Благодарю
Всегда пожалуйста.
 
> Насколько ... критично передавать информацию о браузере?
Вы это меня спрашиваете? У меня действительного логина-пароля от этого ресурса нет.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:53 02-09-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее... Да, так и есть, каюсь, в ответ на $ curl -k -v --output file_rez  --user-agent Mozilla/4.0 -d "login=***&password=***" https://stat2.magnus.net.ua/login.php ничего не возвращается.
Файл file_rez вообще не создается.
Вывод:
 

Код:
 
< HTTP/1.1 302 Found^M
< Date: Sun, 02 Sep 2012 13:43:32 GMT^M
< Server: Apache/2.2.20 (FreeBSD) DAV/2 PHP/5.3.8 with Suhosin-Patch mod_ssl/2.2.20 OpenSSL/0.9.8q^M
< X-Powered-By: PHP/5.3.8^M
< Set-Cookie: PHPSESSID=; path=/^M
< Expires: Thu, 19 Nov 1981 08:52:00 GMT^M
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0^M
< Pragma: no-cache^M
< Location: ^M
< Content-Length: 0^M
< Content-Type: text/html^M
 

 
>> Насколько ... критично передавать информацию о браузере?  
> Вы это меня спрашиваете? У меня действительного логина-пароля от этого ресурса нет.
Я за общий случай. Или это всегда индивидульно для каждого конкретного случая?
 [/more] [/more]

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 17:55 02-09-2012 | Исправлено: kpp77, 18:14 02-09-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
> Или это всегда индивидульно для каждого конкретного случая?  
Да, это, очевидно, зависит от настроения в отношении неинтерактивных качалок со стороны владельцев ресурса. По-умолчанию веб-сервера никакой дискриминации по юзер-агентам не проводят, т. е. User-Agent: curl/7.26.0 в запросе их тоже устроит.
 
> Set-Cookie: PHPSESSID=sessi0nc00kiehere; path=/^M  
А куку по которой вы, тов. Кохан, только что авторизировались, публиковать в открытом виде не надо. ;-) Логин и пароль же вы не публикуете, верно?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:13 02-09-2012 | Исправлено: ASE_DAG, 18:18 02-09-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мда, совсем плох... ;(
 
В шапку темы я бы еще добавил две хорошие книги:
- Дэвид Тейнсли "Linux и UNIX: программирование в SHELL"
- Д. Пик, Т. О'Райли, М. Лукидис "UNIX инструментальные средства" 2-е идание
Доступны в электронном виде.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 18:19 02-09-2012 | Исправлено: kpp77, 23:02 02-09-2012
urodliv



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги.
Пытаюсь для отладки скрипта использовать конструкцию:

Код:
read -s -n 1

Вне циклов всё работает идеально. Но как только хочу притормозить вывод сообщений на экран в середине цикла, то данный код не помогает. Где косяк?

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6691 | Зарегистр. 29-04-2009 | Отправлено: 15:15 15-09-2012
ASE_DAG



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

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:03 15-09-2012
urodliv



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

Цитата:
УМВР

Ну всё, сейчас будет наводнение от вопросов.
Есть у меня файлик с таким содержимым:

Код:
tttt;15;1190;V-t-15-1190;O-t-15-1190-1;0
tttt;15;1190;V-t-15-1190;O-t-15-1190-2;0
tttt;15;1190;V-t-15-1190;O-t-15-1190-3;0
tttt;15;1190;V-t-15-1190;O-t-15-1190-4;1
tttt;15;1189;V-t-15-1189;O-t-15-1189-1;1
tttt;15;1189;V-t-15-1189;O-t-15-1189-2;0
tttt;15;1189;V-t-15-1189;O-t-15-1189-3;0
pppp;11;889;V-p-11-889;O-t-11-889-1;1
pppp;11;889;V-p-11-889;O-t-11-889-2;0
pppp;11;889;V-p-11-889;O-t-11-889-3;0
pppp;11;889;V-p-11-889;O-t-11-889-4;0
pppp;11;888;V-p-11-888;O-t-11-888-1;0
pppp;11;888;V-p-11-888;O-t-11-888-2;0
pppp;11;888;V-p-11-888;O-t-11-888-3;1
 

И есть маааленький тестовый скриптик (spisok.csv):

Код:
#! /bin/bash
 
cat spisok.csv | while read line;
do
    echo $line;
    read -s -n 1;
done
 

Я считал, что после вывода каждой строки программа должна ожидать от меня нажатия клавиши. Так нет же. Она вываливает весь список в терминал без задержки. Что я не догоняю?

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6691 | Зарегистр. 29-04-2009 | Отправлено: 18:16 15-09-2012
FuzzyLogic



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

Цитата:
Я считал, что после вывода каждой строки программа должна ожидать от меня нажатия клавиши. Так нет же. Она вываливает весь список в терминал без задержки. Что я не догоняю?

В обоих случаях (и while read line и read -s -n 1) ваши read'ы читают из STDIN куда вы кинули spisok.csv посредством cat. Вам нужен отдельный дескриптор для одного из read.
 
Добавлено:

Код:
 
exec 3<spisok.csv
while read -u 3 -r line; do  
  echo $line;  
  read -s -n 1;  
done  
 

как-то так

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 18:28 15-09-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
В дополнение к оперативному ответу тов. FuzzyLogic, могу заметить, что если бы файл spisok.csv имел осмысленное (или хотя бы типа Lorem ipsum) содержимое, то вы бы заметили, что вываливается на выход не весь список, а без первых букв каждой строки начиная со второй, которые как раз и были считаны при помощи read -s -n 1.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:59 15-09-2012 | Исправлено: ASE_DAG, 19:00 15-09-2012
urodliv



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

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

Это-то я заметил. Но для меня это не являлось проблемой, поэтому не стал "бить в колокола".

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6691 | Зарегистр. 29-04-2009 | Отправлено: 19:33 15-09-2012
kpp77

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

Код:
exec 3<spisok.csv
...
 
явным образом закрывать входной поток 3 ?
Не держится ли открытым файл spisok.csv?

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 11:12 18-09-2012 | Исправлено: kpp77, 11:12 18-09-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
> Нужно ли, после exec 3<spisok.csv явным образом закрывать входной поток 3 ?
Если он вам не мешает, то не нужно. Для справки могу сообщить, что закрытие входного дескриптора делается так:
$ exec 3<&-
 
> Не держится ли открытым файл spisok.csv?
Держится, разумеется, все время, пока выполняется процесс, его открывший.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:42 18-09-2012 | Исправлено: ASE_DAG, 19:43 18-09-2012
kpp77

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

Цитата:
> Не держится ли открытым файл spisok.csv?  
 Держится, разумеется, все время, пока выполняется процесс, его открывший.

Вопрос в том, файл будет держаться открытым до окончания работы скрипта или до конца выполнения цикла while ?

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 22:12 18-09-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
В данном случае — до конца работы скрипта. Даже если бы цикл выполнялся как пайп — в отдельном от всего скрипта процессе (что не так), то какое это значение имело бы для дескриптора, который был открыт вне цикла? А вообще, вместо того, чтоб спрашивать хрен знает кого (т. е. меня), а потом верить этому х/з кому на слово, взяли бы и проверили бы сами:
$ exec 3< .bashrc
$ lsof -a -p $$ -d 3
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    7661 main    3r   REG    8,5     4353 3424635 /home/main/.bashrc
$ exec 3<&-
$ lsof -a -p $$ -d 3
$

В общих чертах понятно?
 
И еще, кстати, почему, если не тайна, вас это все вообще волнует?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:53 18-09-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Благодарю за ответ.
Конечно проверяю.
Меня волнует все, что связано с шелл-скриптами.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 10:33 19-09-2012 | Исправлено: kpp77, 10:34 19-09-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
Всё это сильно сказано. Такие знания реально остаются в голове только с опытом, man'ом сыт не будешь если нету практики (тестовые примеры слабо спасают для крепких знаний).

----------
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:37 19-09-2012
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Абсолютно с Вами согласен.
Теория + практика - только так.
Пишу скрипты для домашней автоматизации и для всего, что под руку попадается
Поднадоело программировать под Винду (занимаюсь этим с 1995 года), хотя именно это меня и кормит все эти годы.
Поставил перед собой задачу изучить на практике программирование на Шелл, Перл, ПХП, Питон.
 

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 10:47 19-09-2012 | Исправлено: kpp77, 10:52 19-09-2012
DocBeen



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток уважаемые коллеги!!!
решаю проблему одну и малость не получается
 
имеется в каталоге музыка с файлом разметки "cue" хочу автоматизировать процесс с помощью скрипта:
 

Код:
 
echo "Введите номер начального эпизода в каталоге";
read j;
find *.mp3 -type f | while read f; do
mp3="$(basename $f .mp3).mp3"
cue="$(basename $f .mp3).cue"
mkdir $j
mp3splt -c $cue $mp3 -d $j
rm $mp3 $cue
j=`expr $(echo $j) + 1`
done
 

 
где j номер вводимый самостоятельно (хотелось бы его извлечь из имени файла, собственно за советом к вам и обращаюсь)
 
Файлы имеют такой вид:
 
Armin_van_Buuren_-_A_State_of_Trance_551-SBD_(08-03-2012).cue
Armin_van_Buuren_-_A_State_of_Trance_551-SBD_(08-03-2012).mp3
Armin_van_Buuren_-_A_State_of_Trance_552-SBD_(15-03-2012).cue
Armin_van_Buuren_-_A_State_of_Trance_552-SBD_(15-03-2012).mp3
Armin_van_Buuren_-_A_State_of_Trance_553-SBD_(22-03-2012).cue
Armin_van_Buuren_-_A_State_of_Trance_553-SBD_(22-03-2012).mp3
 
хочу в конце разбить их по каталогам с названием эпизода (551,552,553)  
разбиваю с помощью mp3splt
 
буду рад совету как сие организовать чуть проще или удобнее.

Всего записей: 147 | Зарегистр. 15-07-2005 | Отправлено: 12:19 19-09-2012 | Исправлено: DocBeen, 12:20 19-09-2012
kpp77

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

Код:
sed 's/^.*_\([0-9]*\)-.*$/\1/'

Инкремент (exp - встроенная команда шелла, expr - внешняя утилита):

Код:
j=`exp $j + 1`

или

Код:
j=$(($j+1))

Неясна запись типа:

Код:
mp3="$(basename $f .mp3).mp3"

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 12:45 19-09-2012 | Исправлено: kpp77, 13:06 19-09-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DocBeen
1 - точка с запятой не обязательна, перевод строки тоже отделяет команды
2 - вы не правильно используете команду find прочтите man... — find /path/to/folder -type f -name '*.mp3'
3 - вообще разумнее сделать вообще без find: for f in /path/to/folder/*.mp3; do
4 - табулируйте пожалуйста код, так ужасно неудобно читать
5 - инкриментировать значение j лучше так — let i=i+1, вроде как-то еще можно было, не помню уже
6 - все пути лучше брать в кавычки

----------
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:48 19-09-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