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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
 
> ещё чепухню в конец read'а, анпример ___
 
Да собственно ни что не мешает использовать ту же __.
 
> Что бы в скрипте, который source'ится избавиться от влияния alias'ов я стараюсь пользоваться либо which с определением полного пути до бинарника, либо использовать конструкцию вида \command, что бы избежать alias'ов.
 
???  О скрипте на каком языке речь?  В скриптах на ГНУ Баше alias’ы по-умолчанию отключены, а в более простых оболочках — вообще, по-моему, не поддерживаются в неинтерактивном режиме.
 
> либо which с определением полного пути до бинарника
 
which — это внешняя программа, использовать ее для получения пути до исполняемости (которая вовсе не обязательно бинарна), когда есть command -v, довольно странно.  Ну а для вызова исполняемости по полному пути есть просто command, без -v.
 
> Да и alias'ы я использую только для ls --color, grep --color=auto и т.п. А если мне нужно новое поведение от ssh, то я пишу функцию или alias с новым именем.
 
Я, честно говоря, не улавливаю концептуальной разницы меж grep --color=auto и ssh -o StrictHostKeychecking=no.  Почему в первом случае переопределение уместно, а во втором нет?
 
Но да, я в целом понимаю мысль, что переопределять документированные функции (в широком смысле) в программе (а не в интерактивной оболочке) может быть не очень разумно вовсе.
 



1karavan1
 
> Все же, если найдете время, я бы с удовольствием выслушал критику.
 
А зачем, если вы все-равно не вникаете в то, что вам пишут:
 
«За Ваш код спасибо, однако я его не проверял» и «До сих пор меня мучает вопрос "как прочитать из файла только второе слово из строки и передать в итерацию циклу?»
 
> [мой код] собран из сотни примеров найденных на просторах интернета.
> Из всех примеров я не нашел ни одного, который бы нормально описывал построчное чтение файла в баше.
 
Понимаете ли в чем дело...  Вообще-то подразумевается, что прежде, чем что-то пытаться писать, человек сначала освоит основы программирования вообще и основы языка, на котором он собирается писать, а не будет работать с интерпретатором / компилятором, как с черным ящиком: гугль, копипаст, тык-тык — ошибка, гугль, копипаст, тык-тык — о, заработало.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 10:20 07-07-2016 | Исправлено: ASE_DAG, 10:41 07-07-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
> ???  О скрипте на каком языке речь?  В скриптах на ГНУ Баше alias’ы по-умолчанию отключены, а в более простых оболочках — вообще, по-моему, не поддерживаются в неинтерактивном режиме.  
 
Речь о ситуации когда в bashrc объявлены функции и они должны выполнятькоманды без раскрытия alias'ов.
 
Про command -v я знаю, собственно его и использую, но для обзего понимания ситуации проще на форуме писать which.
 
>  Я, честно говоря, не улавливаю концептуальной разницы меж grep --color=auto и ssh -o StrictHostKeychecking=no. Почему в первом случае переопределение уместно, а во втором нет?  
 
Потому что первая лишь добавляет раскраску, а вторая влияет на функциональность.
 
 
Метод "тык-тык" тоже имеет право на жизнь)

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 10:44 07-07-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
> Речь о ситуации когда в bashrc объявлены функции и они должны выполнятькоманды без раскрытия alias'ов.
 
Ага, понял.
 
> Потому что первая лишь добавляет раскраску, а вторая влияет на функциональность.
 
Лишь да не лишь.  Хотя да, в гнушных утилитах --color зело умный — пишет цвета только тогда, когда надо, и сломать что-то очень сложно.  
 
Ну а потом, пожалуйста, давайте рассмотрим несколько менее хрестоматийный alias: alias free='free -h' — он по-вашему имеет право на существование?
 
> Метод "тык-тык" тоже имеет право на жизнь)
 
Имеет, конечно.  И более того, совсем без него не обойтись.  Просто если он дает такие сбои, это повод задуматься.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 11:01 07-07-2016 | Исправлено: ASE_DAG, 11:01 07-07-2016
1karavan1

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

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

А изучение невозможно без практики - рекурсия, мать ее... ))))

Всего записей: 382 | Зарегистр. 20-11-2015 | Отправлено: 13:50 07-07-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
Ну а потом, пожалуйста, давайте рассмотрим несколько менее хрестоматийный alias: alias free='free -h' — он по-вашему имеет право на существование?
Нет. он должен выглядеть как freeh или ещё как...

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 14:24 07-07-2016
1karavan1

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

Всего записей: 382 | Зарегистр. 20-11-2015 | Отправлено: 09:16 11-07-2016 | Исправлено: 1karavan1, 09:17 11-07-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1karavan1
 
> Зачем использовать калькулятор bc вместо:
> echo $((($end_date_seconds-$now_seconds)/24/3600))
 
Для совместимости с устаревшими и неполноценными интерпретаторами.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 09:39 11-07-2016
1karavan1

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Спасибо.
Пока спрашивал, догадался по шебангу на sh

Всего записей: 382 | Зарегистр. 20-11-2015 | Отправлено: 11:13 11-07-2016
SAVage22



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго вечера друзья, ни кто не сможет помочить преобразовать php в bash? в крайнем случае в perl
 
есть кусок кода с вложенным if и foreach

Код:
 
if($a) {
    $c = 0;
    foreach($d as $e) {
        $b++;
        if($c >= $f) {
            $a--;
            exec();
            $c = 0;
            if(!$a) {
                break;
            }
        }
    }
    if($b) {
        exec();
    }
}

 
Буду оч. признателен, ибо сам не сильно силён в таких конструкциях, ибо в основном писал только однострочники.

Всего записей: 1104 | Зарегистр. 30-12-2003 | Отправлено: 23:14 12-07-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SAVage22
Не знаю что вы хотели добиться от пустого exec()'а, так что вот
Ну и не знаю где и как вы инициализировали остальные переменные, $a, $b, $d.
А ещё я сделал допущение что $d это массив. А какой смысл по нему итерироваться, если вы ни где потом $e не используте????
Ну ладно, этого на bash'е как-то так:

Код:
#!/bin/bash
 
if [[ "$a" -ne 0 ]]; then
  c=0;
  for e in $d[@]; do
    ((b++))
    if [[ "$c" -ge "$f" ]]; then
      ((a--))
      exec somecommand
      c=0;
      [[ "$a" -eq 0 ]] && break
    fi
  done
  [[ "$b" -ne 0 ]] && exec somecommand
fi

exec как и положено заменит текущий скрипт, если вы хотите что бы что-то выполнилось и вернуло управление в точку вызова, то просто вместо exec somecommand оставьте только somecommand без слова exec.
 
Добавлено:
А вообще лучше задачу словами описывать и предоставлять пример исходных данных и того что надо получить.

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 11:59 13-07-2016 | Исправлено: Alukardd, 17:27 13-07-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
> for e in $d[@]; do  
> $d[@]
 
${d[@]}
 
> А какой смысл по нему итерироваться, если вы ни где потом $e не используте?
 
Ну, как нетрудно догадаться, это цикл с двойным счетчиком — что раньше закончится.  Понятно он пишется как-то так:
 
for (( a, l = ${#d[@]}; a > 0 && l > 0; a--, l-- )); do ...
 
 
P. S. Разукрасить — разукрасили, а моноширным шрифтом обозначить и забыли.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:26 13-07-2016 | Исправлено: ASE_DAG, 14:29 13-07-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
${d[@]}

oops

Цитата:
Ну, как нетрудно догадаться, это цикл с двойным счетчиком — что раньше закончится.  Понятно он пишется как-то так:
 
for (( a, l = ${#d[@]}; a > 0 && l > 0; a--, l-- )); do ...
Вы намеренно не инициализировали "a"? Или должно быть так: a = l = ${#d[@]}?
Ну и писать a>0, l>0 нету ни какой необходимости, достаточно написать просто a, l. Хотя для наглядности лучше оставить операции сравнения.
 

Цитата:
P. S. Разукрасить — разукрасили, а моноширным шрифтом обозначить и забыли.
Да не помню я эти BBCode'ы... Кстати, я уже спрашивал, но чем вы красите? А то highlight'ом я не пойму как изменить цветовую схему...

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 17:20 13-07-2016 | Исправлено: Alukardd, 17:29 13-07-2016
1karavan1

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

Цитата:
a--, l--

Впервые такое вижу, а как у гугла об этом поинтересоваться не могу сообразить.

Всего записей: 382 | Зарегистр. 20-11-2015 | Отправлено: 21:11 13-07-2016
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
1karavan1
http://www.opennet.ru/docs/RUS/bash_scripting_guide/c4875.html#LOOPS1
Пример 10-12. С-подобный цикл с инкрементом (или в случае вашего цикла - с декрементом). Запятая тоже как в С.

Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 21:45 13-07-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
> Вы намеренно не инициализировали "a"?
 
Разумеется, она же, как следует из примера ОПа, уже где-то ранее инициализирована.  Можно было ее вовсе не упоминать.
 
> Или должно быть так: a = l = ${#d[@]}?
 
Разумеется, нет.  Что это по-вашему вообще такое будет?  Цикл, где одни и те же значения перебираются для верности (вдруг один декремент сбойнет, да?) дважды?
 
> Ну и писать a>0, l>0 нету ни какой необходимости
 
Писать a > 0, l > 0 действительно никакой необходимости, а есть надобность написать то, что я и написал — a > 0 && l > 0.
 
> достаточно написать просто a, l.
 
Кто бы сомневался, что в Си-подобных языках всегда существует способ сделать текст чуть менее понятным.  :-)
 
> Да не помню я эти BBCode'ы.
 
Однако же давно и систематически забираете каждый кусочек кода в совершенно не предназначенный для того [i], чем позволяете мне хотя бы применить такой вот костыль:
 
a.tpc[href$="Alukardd"] ~ .post i { font-family: monospace !important; font-style: normal !important; }

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:54 13-07-2016
1karavan1

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Спасибо.
Чем дальше в лес, тем толще партизаны...
Я уже не знаю с какой стороны изучать этот bash, если он на каждом шагу позволяет себе всяческие выкрутасы с синтаксисом.
И на каждом шагу куча поправок на использование каждого из возможных вариантов.
Это я сейчас не про этот конкретный случай декремента, а вообще.

Цитата:
# А теперь C-подобный синтаксис.
LIMIT=10
for ((a=1; a <= LIMIT ; a++))  # Двойные круглые скобки и "LIMIT" без "$".
do
  echo -n "$a "
done                           # Конструкция заимствована из 'ksh93'.
echo; echo

"LIMIT" без "$" - вот как это запомнить?
 
Те же условия if почитать на опеннет - голова пухнет ((
 
Очень сожалею, что еще не везде могу использовать python3. Я, хотя, и знаю его хуже, но изучается он как-то значительно быстрее.

Всего записей: 382 | Зарегистр. 20-11-2015 | Отправлено: 23:03 13-07-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
Кто бы сомневался, что в Си-подобных языках всегда существует способ сделать текст чуть менее понятным.    
Эт да, Perl'а тут только и не хватает. Там умолчано всё что только возможно и сокращено до пары символов.

Цитата:
Однако же давно и систематически забираете каждый кусочек кода в совершенно не предназначенный для того [i], чем позволяете мне хотя бы применить такой вот костыль:
 
a.tpc[href$="Alukardd"] ~ .post i { font-family: monospace !important; font-style: normal !important; }
Ну [i] нанмнгого короче чем описывать моноширный фришт А вообще Вы меня сильно позабавили тем что имеете для моих постов отдельный парсер)))
 
1karavan1
Цитата:
"LIMIT" без "$" - вот как это запомнить?  
Это на Ваше усмотрение

Цитата:
      Shell variables are allowed as operands; parameter expansion is performed before the expression is evaluated.  Within an expression, shell variables may also be referenced by name without using the parameter expansion syntax.   A  shell  variable
       that  is null or unset evaluates to 0 when referenced by name without using the parameter expansion syntax.  The value of a variable is evaluated as an arithmetic expression when it is referenced, or when a variable which has been given the inte-
       ger attribute using declare -i is assigned a value.  A null value evaluates to 0.  A shell variable need not have its integer attribute turned on to be used in an expression.

 
p.s. не, я категорически не люблю питон.

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 23:31 13-07-2016 | Исправлено: Alukardd, 23:32 13-07-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
>> "LIMIT" без "$" - вот как это запомнить?  
> Это на Ваше усмотрение
 
Ну как «на ваше усмотрение»?  Так же, как на ваше усмотрение использовать ли глоб-подстановки или регулярные выражения.  Это разные вещи, короче.
 
$ i=5; echo $((++i + ++i))
13
 
$ i=5; echo $((++$i + ++$i))
10


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:21 14-07-2016
1karavan1

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Пример доходчивый для понимания разницы использования в случае операций над переменной.
Но он не объясняет необходимости пропуска $, когда переменная остается неизменной и участвует только в сравнении.
Т.е. из процитированного мной примера мне понятно использование "a++" без $, но мой мозг отказывается воспринимать "LIMIT" без $

Всего записей: 382 | Зарегистр. 20-11-2015 | Отправлено: 02:06 14-07-2016
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 09:45 14-07-2016
Открыть новую тему     Написать ответ в эту тему

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