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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
Странно это. А что при этом попадает на экран или в nohup.out?
К тому же "как должно" быть и хак это не совсем равноценные конструкции. Хотя бы потому что команда в одном случае работает как фоновая задача в текущем шеле, а при хаке, он вообще про нее ни чего не знает, т.к. родителем числится init (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 | Отправлено: 18:06 15-02-2018
CrownRU



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

Цитата:
Странно это. А что при этом попадает на экран или в nohup.out?  

Ничего не попадает окромя echo. nohup.out тоже пуст. Завтра утром проверю как скрипт поведет себя в боевой обстановке.
 
Может со screen можно что-то сделать?

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 18:21 15-02-2018 | Исправлено: CrownRU, 18:36 15-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU, о!  Сколько лет, а Арчхрени все те же.  :-)
 
Во-первых, давайте-те-ка без конских отступов:

#!/bin/bash
 
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
CYAN="$(tput setaf 6)"
SGR0="$(tput sgr0)"
BOLD="$(tput bold)"
 
# Читает ini файлы в директории...
for k in /archive/obj/cssap/*/*/archint.ini.*
do
    # ...и выуживает оттуда соответствующий номер порта.
    WEBPORT=$(awk /^WEBPORT/'{ print $2 }' $k)
    ARCHWIN=$(awk /^ARCHWIN_PORT/'{ print $2 }' $k)
    # Проверяет возможность соединения через WEBPORT, прописанный в файле $k
    curl -sm1 $(hostname -f):$(awk /^WEBPORT/'{ print $2 }' $k)  >/dev/null
    if [ $? -eq 0 ]
    then
        echo "Connected">/dev/null
        # Если соединение невозможно, то:
    else
        # 1. Показать ini файл, где происходит затык
        echo ${BOLD}${GREEN}$k${SGR0}
        # 2. Дополнительная информация через lsof
        lsof -i:$WEBPORT,$ARCHWIN $k
        # 3. Если инстанция висит, то...
        if [ $? -eq 0 ]
        then
            echo ${BOLD}${RED}Stoppe die Instanz $k${SGR0} >> /tmp/arge.log
            # 4. останавливаем ее
            archstop -i $k
            # 5. И на всякий случай прибиваем то, что по
            # останавливаться по-хорошему не хочет
            fuser -k -n tcp $WEBPORT
        fi
        echo ${BOLD}${RED}Starte die Instanz $k${SGR0} >> /tmp/arge.log
        # 6. Стартуем инстанцию. И вот здесь начинаются проблемы. $k
        # не поренимается, хотя echo $k показывает переменную
        # правильно.
        nohup archpro -i $k &
    fi
done

 
> ошибка в выполнении nohup archpro -i $k
 
Че, прямо по-русски пишет?  Интересно, кто.  Вообще написать такое может только Баш — $k-то нераскрыта, но я что-то не припомню у него сообщения, да и он всегда должен представляться — bash: и только потом сообщение.
 
Так или иначе, ну закавычивать же надо переменные.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:44 15-02-2018
CrownRU



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

Цитата:
Че, прямо по-русски пишет?  Интересно, кто.

 
Приветствую, маэстро
Не, пишет по-немецки - это я так, для понятности. Но суть-то в том, что переменная не перенимается - так и пытается подставить вместо переменной $k
Завтра попробую заковычить, но вещует мне что-то, что не поможет.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 20:24 15-02-2018 | Исправлено: CrownRU, 20:35 15-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU> Не, пишет по-немецки - это я так, для понятности.  
 
Это не надо.  Если хочется понятности, то лучше просто $ export LANG=C.
 
> Завтра
 
Ну, если это такая тягомотина, то следующий шаг — это, разумеется, включить трассировку, и посмотреть, что там происходит.
 
#!/bin/bash
заменить на
#!/bin/bash -x

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:31 15-02-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG, CrownRU
Может, для начала, лучше set -x перед проблемной строкой и set +x сразу после?
А то там цикл, вывод может быть огромен...

----------
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 | Отправлено: 22:35 15-02-2018 | Исправлено: Alukardd, 22:35 15-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd, и еще сутки долой?  ;-)

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:42 15-02-2018
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 | Отправлено: 22:53 15-02-2018
CrownRU



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

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 00:00 16-02-2018
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем здравствовать!
Извините, что задержался.
Вот вывод. Переменные, как вы и сказали, закавычил. Включил set -x.
Также вставил echo для наглядности.
 

Код:
set -x
nohup archpro -i "$k" &
echo "nohup archpro -i "$k" &"
set +x

 
 

Код:
/archive/obj/cssap/N/NQT_R/archint.ini.NQT_R
+ echo 'nohup archpro -i /archive/obj/cssap/N/NQT_R/archint.ini.NQT_R &'
nohup archpro -i /archive/obj/cssap/N/NQT_R/archint.ini.NQT_R &
+ set +x
+ nohup archpro -i /archive/obj/cssap/N/NQT_R/archint.ini.NQT_R
nohup: h&#228;nge Ausgabe an „nohup.out“ an
./pck_restart.sh: line 15:  8325 Error nohup archpro -i "$k"
 

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 13:36 16-02-2018
qw12



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

Код:
./run.sh $line > result.txt

как в переменную line записать данные построчно из файла?

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 14:28 16-02-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
 вы спросили одно, а в куске кода привели противоположную операцию...
 

Цитата:
как в переменную line записать данные построчно из файла?
lines=`cat config.txt`
или
lines=$(<config.txt)
 
Добавлено:
CrownRU
Двойные кавычки внутри двойных не работают, надо экранировать... У тебя получилось что в echo переменная $k оказалась вне кавычек.
 
Почему у тебя в выводе сначала идет echo а потом nohup, а в отрывке кода что ты показал наоборот?
 
И почему line 15? Ты запускал не совсем такой скрипт как показывал нам?
 
Если сделать полностью на весь скрипт bash -x вывод слишком большой что бы нам показывать? есть же [more=тут большой вывод]

----------
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:33 16-02-2018
qw12



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
есть мне бы надо прочитать строку и файла, отправить ее в переменную, выполнить run.sh, записать результат, повторить со следующей и т.д.
lines=`cat config.txt`
это немного не то.

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 15:05 16-02-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
Ну так сразу надо писать задачу полностью и так что бы понятно было

Код:
OLDIFS=$IFS
IFS=''
while read -r line; do
  echo "line is $line"
done </path/to/your/file
IFS=$OLDIFS


----------
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 | Отправлено: 15:55 16-02-2018 | Исправлено: Alukardd, 15:56 16-02-2018
CrownRU



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

Цитата:
CrownRU  
Двойные кавычки внутри двойных не работают, надо экранировать... У тебя получилось что в echo переменная $k оказалась вне кавычек.  
 
Почему у тебя в выводе сначала идет echo а потом nohup, а в отрывке кода что ты показал наоборот?  
 
И почему line 15? Ты запускал не совсем такой скрипт как показывал нам?  
 
Если сделать полностью на весь скрипт bash -x вывод слишком большой что бы нам показывать? есть же [more=тут большой вывод]
 

 
Понял, сделаю в понедельник. 15 линия это строка с find.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 22:59 16-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
 
> Также вставил echo для наглядности.
 
А трассировка для чего же?  ;-)
 
> + nohup archpro -i /archive/obj/cssap/N/NQT_R/archint.ini.NQT_R
> nohup: h&#228;nge Ausgabe an „nohup.out“ an
> ./pck_restart.sh: line 15:  8325 Error nohup archpro -i "$k"
 
Ну и к уже отмеченному т-щем Алукардом, еще можно заметить, что вовсе не пишет он этого по-немецки.  Он пишет какой-то номер, а что-то не припомню я, чтобы у ГНУ Баша были номерные ошибки.  Это точно он?
 
Добавлено:
> это строка с find
 
Какой еще find?  Там нет find’а.
 
> Понял, сделаю [полную трассировку]
 
А толку...  Если только еще какую-нибудь странность найти.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:27 16-02-2018 | Исправлено: ASE_DAG, 23:33 16-02-2018
qw12



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще раз, как, черт возьми, это работает?
допустим

Код:
ping $line > result.txt

в переменную $line мне нужно построчно прочитать данные из файла test.txt

Цитата:
OLDIFS=$IFS
IFS=''
while read -r line; do
  echo "$line"
done <test.txt
IFS=$OLDIFS

Куда мне вставить ping $line > result.txt?
Можно прокомментировать построчно, чтобы понять логику?

Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 04:05 17-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12> Можно прокомментировать построчно, чтобы понять логику?
 
Упростим маленько:

while read -r; do
    printf '%s\n' "$REPLY"
done <test.txt

 
А теперь можно:

# Пока читается, читать со стандартного ввода (умолчание) построчно
# (умолчание) в переменную REPLY (умолчание), не интерпретируя ‘\’
# особо (-r).
while read -r; do
    # Напечатать переменную REPLY на стандартный вывод (умолчание).
    printf '%s\n' "$REPLY"
# Перенаправить файл с именем test.txt из текущего каталога на
# стандартный ввод цикла.
done <test.txt



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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 05:25 17-02-2018
NvvLazyTiger



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет, подскажите, pls.
 
Диспозиция:
Среда: WinXP x32 +SP3.
gAwk: GNU Awk 3.1.6
 
1. Я знаю как получить из целого положительного числа литерал «дата». Например:
Код:
gAwk.exe "BEGIN{print strftime(\"%Y.%m.%d\",0);exit}"
порождает литерал «1970.01.01».
 
2. А выражение:
Код:
gAwk.exe "BEGIN{print strftime(\"%Y.%m.%d\",systime());exit}"

порождает литерал «сегодня», например «2018.02.25».
 
Вопрос: как из такого литерала «дата» получить эквивалентное число?
(не «в лоб», через итерации)
 
Спасибо.
 
---
Удачи!
Влад.

Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 14:38 25-02-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
NvvLazyTiger
А чем date не угодил?
Цитата:
date -u -d'@0' +%Y.%m.%d
date -u  +%Y.%m.%d
 
date -u -d'1970/01/01' +%s
date -u +%s

Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 15:07 25-02-2018
Открыть новую тему     Написать ответ в эту тему

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