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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я еще, вчера пока копался с escape-последовательностями, переизобрёл read -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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 00:02 29-12-2011 | Исправлено: Alukardd, 00:03 29-12-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> наконец-то нашёл способ делать обратный отсчёт меняя цифру в той же строке
Ну и привели бы его тут.
$ for i in {100..0}; do echo -ne "\e[0K$i\r"; sleep .1s; done; echo
— это вы имели в виду?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:26 29-12-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Я все скинул себе в пост сразу... Просто оно в тюрьме (#)
И я же сказал, что извращенец - вместо \r я тоже использовал некоторую escape-последовательность

----------
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 | Отправлено: 00:34 29-12-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А кто бы подсказал простой cкрипт под такую задачу:
 
1) постоянно в цикле пингуем server.com
2) если потеряно больше 2х пакетов переименовываем:
\etc\hosts => \etc\hosts-tmp
\etc\hosts-bak => \etc\hosts
\etc\hosts-tmp => \etc\hosts-bak
3) идем в пункт 1 (но с учетом того, что ip адрес для server.com изменился)
 
Т.е. идея в том, чтобы назначать хосту server.com 2 разных IP адреса, когда один недоступен назначаем другой, и наоборот.

Всего записей: 1070 | Зарегистр. 30-05-2006 | Отправлено: 20:58 11-01-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
> А кто бы подсказал простой cкрипт
Что значит «подсказал скрипт»? В смысле дать ссылку на готовое решение? Никто такого не написал, скорее всего, а если и написал, то в жизни бы не опубликовал, поскольку сам подход кошмарен.
 
P.S. В вашей раскладке клавиатуры нет слэша (только обратный)?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:20 11-01-2012
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подсказал, в смысле нашел время написать его А почему код должен быть кошмарным?
 
P.S. Клавиатуру поменяю.

Всего записей: 1070 | Зарегистр. 30-05-2006 | Отправлено: 22:20 11-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
Ахаха, а не пробовали в hosts несколько записей прописать?
Код:
78.78.78.78 server.com
78.78.78.79 server.com
78.78.78.80 server.com
...
А если это ваша зона, то аналогичные настройки следует выполнить на DNS сервере.

----------
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 | Отправлено: 23:41 11-01-2012
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Ахаха, пробовали, но нужный софт всегда коннектится только к первому IP из списка...

Всего записей: 1070 | Зарегистр. 30-05-2006 | Отправлено: 01:03 12-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
оО
Сочувствую... Хотя не понятно как это он так... Покажите строку hosts: в файле /etc/nsswitch.conf.
 
Скрипт будет примерно такой:
Код:
#!/bin/bash
 
while true; do
  if [ $(ping -c 5 server.com | awk -F, '/received/{gsub(/received/,"",$2); gsub(/[\t ]*/,"",$2); print $2}') -le 2 ]; then
    mv /etc/hosts /tmp/hosts
    mv /etc/hosts-bak /etc/hosts
    mv /tmp/hosts /etc/hosts-bak
  fi  
  sleep 5s
done
 
Посылает 5 пакетов, если пришло 2 или меньше, то меняет файл hosts. Между проверками 5сек поспать...

----------
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 | Отправлено: 02:05 12-01-2012
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
 
passwd:         compat
group:          compat
shadow:         compat
 
hosts:          files dns
networks:       files
 
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
 
netgroup:       nis

Всего записей: 1070 | Зарегистр. 30-05-2006 | Отправлено: 11:09 12-01-2012
Hatiko

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

Всего записей: 1 | Зарегистр. 12-01-2012 | Отправлено: 11:52 12-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
Я же только одну строку попросил...
 
Скрипт вас устроил?

----------
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 | Отправлено: 01:16 13-01-2012
gap5



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

Всего записей: 1070 | Зарегистр. 30-05-2006 | Отправлено: 11:13 13-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как можно красиво (ASCII art) вывести данные в виде таблицы в терминал?
Как вариант рассматривается занести данные в OpenOffice. Хотелось бы увидеть таблицы calc в эмуляторе терминала так же выглядящие.
Можно и без OOo, если есть удобные способы. В "ячейке" может быть несколько строк. Таблица только с 5 строками и кучей столбцов.

----------
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:09 13-01-2012
sCloudo

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

Всего записей: 206 | Зарегистр. 06-01-2012 | Отправлено: 20:18 13-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sCloudo
Ну спасибо, такое я и сам могу навоять - геморой еще тот, все выверять...
 
Я надеялся, что есть готовые решения, проверенные годами...

----------
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 | Отправлено: 01:47 14-01-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> как можно красиво (ASCII art) вывести данные в виде таблицы в терминал?
> В "ячейке" может быть несколько строк.
> такое я и сам могу навоять
> Я надеялся, что есть готовые решения, проверенные годами...
Может быть и есть, но мне на глаза как-то не попадались.
А наваять попробовать можно. Если число столбцов и строк в пределах постоянно, то принципиальных сложностей я не вижу.
 
Вот, как вам, например, такой вариант:

Код:
#!/usr/bin/perl
 
use Text::CSV;
use Switch;
 
binmode (STDOUT, ":encoding(utf8)");
 
%BOX = (
    'L,T' => "\x{250C}",
    'L,M' => "\x{251C}",
    'L,B' => "\x{2514}",
    'M,T' => "\x{252C}",
    'M,M' => "\x{253C}",
    'M,B' => "\x{2534}",
    'R,T' => "\x{2510}",
    'R,M' => "\x{2524}",
    'R,B' => "\x{2518}",
    'H'   => "\x{2500}",
    'V'   => "\x{2502}"
);;
 
open (my $csvfile, '<:encoding(utf8)', $ARGV[0]);
my $csv = Text::CSV -> new ({ binary => 1, eol => $/ });
while (my $row = $csv -> getline ($csvfile)) {
    my @ROW;
    for my $f (0 .. @$row-1) {
        push @ROW, [ split ("\n", @$row[$f]) ];
        for my $l (0 .. $#ROW) {
            $WIDTH[$f] = length ($ROW[$f][$l]) if $WIDTH[$f] < length ($ROW[$f][$l]);
        }
    }
    push @T, [@ROW];
}
close ($csvfile);
for my $i ( 0 .. 2*($#T+1) ) {
    switch ($i) {
        case 0 { $TMB = 'T' }
        case (2*($#T+1)) { $TMB = 'B' }
        else { $TMB = 'M' }
    }
    if ($i % 2 == 0) {
        for my $j ( 0 .. 2*($#WIDTH+1) ) {
            switch ($j) {
               case 0 { $LMR = 'L' }
               case (2*($#WIDTH+1)) { $LMR = 'R' }
               else { $LMR = 'M' }
            }
            if ($j % 2 == 0) {
               print $BOX{"$LMR,$TMB"};
            } else {
               $f = ($j-1)/2;
               print $BOX{'H'} x $WIDTH[$f];
            }
        }
        print "\n";
    } else {
        my $r = ($i-1)/2;
        my $l = 0;
        my $continue = 1;
        while ($continue) {
            $continue = 0;
            for my $j ( 0 .. 2*($#WIDTH+1) ) {
               if ($j % 2 == 0) {
                   print $BOX{'V'};
               } else {
                   my $f = ($j-1)/2;
                   printf ("%-$WIDTH[$f]s", $T[$r][$f][$l]);
                   $continue = 1 if $T[$r][$f][$l+1];
               }
            }
            $l++;
            print "\n";
        }
    }
}

 
Выводит таблицу, сохраненную Либрофисом в CSV с дефолтными настройками вот в таком виде:
   
 
Новая строка между именем и фамилией здесь задана жестко.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 03:22 19-01-2012 | Исправлено: ASE_DAG, 03:27 19-01-2012
vitalik36

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

Всего записей: 3 | Зарегистр. 18-01-2012 | Отправлено: 03:47 19-01-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vitalik36
> ычфчы
Будьте здоровы!

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 03:51 19-01-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые Гуру! Подскажите плиз, в bash-скрипте используется функция printf, в выводе есть дробные числа. Выводятся они с разделителем - запятой. Надо, чтоб была точка вместо запятой. Как это можно организовать?
 

Код:
printf "%02d:%02d:%06.3f\n" 30 30 300

 
Вывод = 30:30:300,000
Требуется 30:30:300.000
 
Желательно глобально, а не с помощью sed'а в каждой строке.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 20:44 19-01-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 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