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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
Цитата:
Подскажите,как в баше сделать выход из цикла,то есть так чтобы прервался только цикл,но не скрипт ? Пробовал break,но эта команда  у меня прерывает выполнение всего скрипта.
 
Стоит следующая задача - перебрать массив данных и в случае выполнения определенного условия прервать цикл,иначе - продолжать перебор для выяснения элемента наиболее подходящего другому условию.

Цикл прерывает именно break.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:12 16-10-2013 | Исправлено: ASE_DAG, 21:15 16-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
Цитата:
как в баше сделать выход из цикла

Цитата:
break [n]
       Exit from within a for, while, until, or select loop.  If n is specified, break n levels.  n must be >= 1.  If n is
       greater than the number of enclosing loops, all enclosing loops are exited.  The return value is 0 unless n is not  
       greater than or equal to 1.
 
 
continue [n]  
       Resume the next iteration of the enclosing for, while, until, or select loop.  If n is specified,  resume  at  the  
       nth  enclosing  loop.  n must be >= 1.  If n is greater than the number of enclosing loops, the last enclosing loop
       (the ``top-level'' loop) is resumed.  The return value is 0 unless n is not greater than or equal to 1.


----------
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 | Отправлено: 21:16 16-10-2013 | Исправлено: Alukardd, 21:39 16-10-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Alukardd
Да,действительно,ступил у себя в одном месте Спасибо за разъяснения !

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 21:35 16-10-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Забавно.
 
$ ARRAY=( a b c )
$ a='ARRAY'
$ echo ${!a[0]} # косвенная ссылка на массив
a
$ # все правильно
$ echo ${!a[1]}
 
$ # баг?
$ echo ${!a[@]}
0
$ # тоже правильно, поскольку это уже совсем другой синтаксис, но совершенно неочевидно

 

Цитата:
       
       ${!prefix*}
       ${!prefix@}
          Names  matching prefix.  Expands to the names of variables whose
          names begin with prefix, separated by the first character of the
          IFS  special variable.  When @ is used and the expansion appears
          within double quotes, each variable name expands to  a  separate
          word.
 
       ${!name[@]}
       ${!name[*]}
          List  of    array  keys.  If name is an array variable, expands to
          the list of array indices (keys) assigned in name.  If  name  is
          not  an  array,  expands to 0 if name is set and null otherwise.
          When @ is used and the expansion appears within  double  quotes,
          each key expands to a separate word.
— bash(1)

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 05:44 24-10-2013 | Исправлено: ASE_DAG, 05:46 24-10-2013
D1D1D1D

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

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 00:28 25-10-2013 | Исправлено: D1D1D1D, 00:30 25-10-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите,где найти версию утилиты sort под Linux с поддержкой рандомной сортировки (-R)

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 17:07 28-10-2013
Santal

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
 
https://www.gnu.org/software/coreutils/
 
а для какого дистрибутива?

Всего записей: 29 | Зарегистр. 24-07-2006 | Отправлено: 17:42 28-10-2013 | Исправлено: Santal, 17:42 28-10-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Santal
CentOS 5.x
 
Вопрос решен  - сделал обновление coreutils по этой инструкции http://www.question-defense.com/2010/08/07/install-or-upgrade-one-application-from-coreutils-package-on-centos-linux

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 17:49 28-10-2013 | Исправлено: mithridat1, 18:17 28-10-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sanchomaster (15:40 01-11-2013)
Цитата:
Здравствуйте, подскажите пожалуйста каким образом можно дописать последнюю строку в файле, >> записывает данные в новую строку, а мне нужно именно дописать последнюю.

 
PlastUn77 (16:14 01-11-2013)
Цитата:
ну например так
#echo -n 'text kototy nuno dopisat' >> test.txt
или так  
#echo -e '\b text kototy nuno dopisat' >> test.txt

 
 
PlastUn77, проверяйте что-ли свои советы прежде чем давать их.
 
$ \cat sanchomaster.txt
First line.      
Second line.
Last line.
$ echo -n 'text kototy nuno dopisat' >> sanchomaster.txt
$ \cat sanchomaster.txt
First line.
Second line.
Last line.
text kototy nuno dopisat$ # ага, \n нет в новой строке

 
$ echo -e '\b text kototy nuno dopisat' >> sanchomaster.txt
А это какая-то адовая ересь, в результате получится именно то, что написано — новая строка с непечатаемым символом в начале. В Виме это будет выглядеть так:
First line.
Second line.
Last line.
^H text kototy nuno dopisat

 
Sanchomaster, если вы ограничены в средствах не строго Башем, а всем окружением ГНУ, то короче всего Седом:
$ sed -i '$s/$/append this/' sanchomaster.txt  
$ \cat sanchomaster.txt  
First line.
Second line.
Last line.append this

 


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:17 01-11-2013 | Исправлено: ASE_DAG, 19:20 01-11-2013
Krist



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
Сидел битых часа 3 думал, гуглил, так и не чего не придумал, может кто поможет.
Есть два файла:
1) строки с текстом
aabbbcc hhh
bbb cc  
cc hh
btrnr hnyrt yhnry
 
2) номера строк
2
4
 
как удалить из первого файла строки с соответствующими номерами, ничего путного не придумал, как только через awk сделать скрипт большущим множеством  
 

Код:
sed 'номерстрокиd'


Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 00:41 05-11-2013 | Исправлено: Krist, 00:46 05-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krist
$ cat num
2
4
 
$ cat list
First line.
Second line.
Third line.
Fourth line.
 
$ gawk 'ARGIND == 1 { d[$0]++ }; ARGIND == 2 && !d[FNR]' num list
First line.
Third line.

 
Комментарии нужны?

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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо большое, работает даже на cygwin. Но если честно хоть и немного на AWK писал, эта контсрукция вводит в ступор, пойду читать мануалы.

Всего записей: 247 | Зарегистр. 07-03-2006 | Отправлено: 01:20 05-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что значит «даже на Цигвине»? Цигвин — вполне себе гнушное окружение. Вот на Фре — не будет, переменная ARGIND, содержащая номер п/п обрабатываемого файла введена только в gawk’е. Но это не беда, можно записать так:
$ original-awk 'FILENAME == ARGV[1] { d[$0]++ }; FILENAME == ARGV[2] && !d[FNR]' num list

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

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



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

Цитата:
Sanchomaster, если вы ограничены в средствах не строго Башем, а всем окружением ГНУ, то короче всего Седом:  
$ sed -i '$s/$/append this/' sanchomaster.txt  
$ \cat sanchomaster.txt  
First line.  
Second line.  
Last line.append this  

 
ASE_DAG, спасибо, получилось, но есть еще вопрос, как туда добавить переменную?
 
$ sed -i '$s/$/$append this/' sanchomaster.txt
 
sed не определяет что внутри конструкции она есть.
 
Сам нашел ответ, если кому понадобится, то:
 

Цитата:
$ sed -i "$s/$/$append this/" sanchomaster.txt

либо

Цитата:
$ sed -i '$s/$/'$append this'/' sanchomaster.txt


Всего записей: 21 | Зарегистр. 08-11-2011 | Отправлено: 09:44 05-11-2013 | Исправлено: sanchomaster, 10:03 05-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sanchomaster
> $ sed -i '$s/$/'$append this'/' sanchomaster.txt
Нет, так делать нельзя — оставлять пробелы и переменные, которые их могут содержать, незакавыченными.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 14:30 05-11-2013
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Запускаю
 curlftpfs $USER:$PASSWD@$SERVER $DEST_DIR  
на телике
получаю
 curlftpfs: error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file: No such file or directory  
как получить нужный файл  
libglib-2.0.so.0
?
 
Добавлено:
всякие переменные к библиотекам вроде прописаны

Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 16:30 05-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
Это вопрос, в общем-то к вашим коллегам по несчастью иметь оный телевизор, а не сюда. В любом случае в вопросе слишком многое оставлено за кадром, чтобы на него можно было ответить.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:17 05-11-2013
king_stiven

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

Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:32 05-11-2013 | Исправлено: king_stiven, 20:17 05-11-2013
Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
comrades, прошу помощи: уточняю подсветку .sh-файлов для AkelPad и возник ряд вопросов, на которые не удалось нагуглить внятные ответы.
 
1. В секции "Words:" список слов для подсветки, так понимаю, там внутренние команды bash, не требующие сторонних утилит и условные операторы/операторы циклов, хотел уточнить список, нашел внутренние команды на вики http://ru.wikipedia.org/wiki/Bash , добавил в ;--Builtin commands-- set, pwd и printf, есть что-то еще, на что стоит обратить внимание? В кандидаты попали read, touch.
 
2. Flags=1 в секции "Words:" указывает, что слово должно подсвечиваться только в написанном регистре (здесь - в нижнем), в связи с чем возник вопрос: возможно ли столкнуться со скриптом, в котором команды в верхнем регистре? Или это грубое нарушение сложившихся традиций? Таких скриптов не нашел, но в голове засел вопрос и хочется ясности
 
3. И по комментариям: символ # может быть параметром команды echo?
Дело в том, что сейчас строка с комментарием на той же строке выглядит так:

Код:
echo условие выполняется #комментарий

хотя по идее должно быть так:

Код:
echo условие выполняется #комментарий

если # не может быть параметром echo, то просто назначу его как конец диапазона без захвата.
 
Заранее спасибо за помощь.

Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 18:43 21-11-2013 | Исправлено: Skif_off, 18:44 21-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пришло местной личной почтой от т-ща Skif_off:

Цитата:
Приветствую, обращаюсь как к опытному человеку, ибо не могу нагуглить внятные ответы
Уточняю подсветку .sh-файлов для AkelPad, не найдется ли свободного времени взглянуть на список слов в секции "Words:"?
Так понимаю, там внутренние команды bash, не требующие сторонних утилит и условные операторы/операторы циклов, хотел уточнить список, нашел внутренние команды на вики http://ru.wikipedia.org/wiki/Bash , есть что-то еще?
 
И вопрос, который не иначе как вызывает недоумение у поисковых машин, как бы я его не формулирова
Flags=1 в секции "Words:" указывает, что слово должно подсвечиваться только в написанном регистре (здесь - в нижнем), в связи с чем возник вопрос: возможно ли столкнуться со скриптом, в котором команды в верхнем регистре? Или это грубое нарушение сложившихся традиций?
Таких скриптов не нашел, но в голове засел вопрос

 
> там внутренние команды bash, не требующие сторонних утилит и условные операторы/операторы циклов
Там написано, что есть что. Есть и внешние команды («Basic commands»), при этом выборка очень странная, например rmdir есть, а rm нет.
 
Мне разграничение встроенных команд от всех остальных разумным не кажется. От того, что они встроены, они никаких особых свойств не приобретают. Да и потом я не нашел в файле указания, что это синтаксис для Баша. А в разных шеллах встроены разные команды — в busybox’е, например, — вплоть до awk’а, а в dash’е — весьма немного.
 
> хотел уточнить список, нашел внутренние команды на вики
Не смотрел, что вы там нашли на Википедии, но сначала, очевидно, надо обращаться к прилагающийся документации. В данном случае — к ману bash(1) или сразу bash-builtins(1).
 
> возможно ли столкнуться со скриптом, в котором команды в верхнем регистре? Или это грубое нарушение сложившихся традиций?
Достаточно взять и проверить, чтобы убедиться, что не нарушение традиций, а нарушение синтаксиса.
$ CD ~
CD: command not found

 
Добавлено:
О! Вы уже сами сюда написали.
 
> И по комментариям: символ # может быть параметром команды echo?  
Опять же. Вы гуглите и спрашиваете, вместо того, чтобы взять и проверить. В чем дело?
 
$ echo foo # bar
foo

— хорошо же видно, что неэкранированный хэш обработался как начало комментария.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:53 21-11-2013 | Исправлено: ASE_DAG, 19:00 21-11-2013
Открыть новую тему     Написать ответ в эту тему

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