bash, несколько вопросов

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: bash, несколько вопросов

Сообщение diesel »

t.t писал(а):
22.10.2006 01:55
(diesel @ Oct 17 2006, в 16:20) писал(а):i=10; while [ $i != 20 ]; do i=$[$i+1]; echo $i; done
Вообще-то, $[ использовать не рекомендуется. А рекомендуется -- $(( ... ))

Да,точно. Извиняюсь, я такими "математическими" конструкциями не пользуюсь, поэтому написал первое что пришло в голову, а пришло вот это :)
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: bash, несколько вопросов

Сообщение t.t »

(diesel @ Oct 22 2006, в 04:05) писал(а):Да,точно. Извиняюсь, я такими "математическими" конструкциями не пользуюсь, поэтому написал первое что пришло в голову, а пришло вот это
А почему оно не рекомендуется, я и сам, к слову, не знаю :)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: bash, несколько вопросов

Сообщение ety »

diesel писал(а):
17.10.2006 17:20
soko1 писал(а):
17.10.2006 17:11

Вот это выкрунтас! Спасибо. Может заодно и посоветуете выход из ситуации когда надо тупо писать `for i in 1 2 3 ...` (вот тут бы seq и пригодился) для больших диапазонов?=)

еще один изврат, но я не знаю работает ли такое в csh:
i=10; while [ $i != 20 ]; do i=$[$i+1]; echo $i; done

в csh работает, но там свой синтаксис, и для циклов вроде 'for((i=10; i<20; i++)) do echo $i; done' есть, хотел кстати узнать о ее портабельности, вроде на sh работает.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: bash, несколько вопросов

Сообщение diesel »

ety писал(а):
23.10.2006 21:26
diesel писал(а):
17.10.2006 17:20

soko1 писал(а):
17.10.2006 17:11

Вот это выкрунтас! Спасибо. Может заодно и посоветуете выход из ситуации когда надо тупо писать `for i in 1 2 3 ...` (вот тут бы seq и пригодился) для больших диапазонов?=)

еще один изврат, но я не знаю работает ли такое в csh:
i=10; while [ $i != 20 ]; do i=$[$i+1]; echo $i; done

в csh работает, но там свой синтаксис, и для циклов вроде 'for((i=10; i<20; i++)) do echo $i; done' есть, хотел кстати узнать о ее портабельности, вроде на sh работает.

а у вас sh не есть симлинк на что-нить? :) про фрю не знаю - в линуксе часто /bin/sh - симлинк на /bin/bash(Debian,SuSE)
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: bash, несколько вопросов

Сообщение ety »

diesel писал(а):
23.10.2006 21:31
ety писал(а):
23.10.2006 21:26

diesel писал(а):
17.10.2006 17:20

soko1 писал(а):
17.10.2006 17:11

Вот это выкрунтас! Спасибо. Может заодно и посоветуете выход из ситуации когда надо тупо писать `for i in 1 2 3 ...` (вот тут бы seq и пригодился) для больших диапазонов?=)

еще один изврат, но я не знаю работает ли такое в csh:
i=10; while [ $i != 20 ]; do i=$[$i+1]; echo $i; done

в csh работает, но там свой синтаксис, и для циклов вроде 'for((i=10; i<20; i++)) do echo $i; done' есть, хотел кстати узнать о ее портабельности, вроде на sh работает.

а у вас sh не есть симлинк на что-нить? :) про фрю не знаю - в линуксе часто /bin/sh - симлинк на /bin/bash(Debian,SuSE)

агамсь, они зачем-то сделали симлинком. но в csh вроде можно извратится и за-aliasить while в классический for(i=10; i<20; i++)
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash, несколько вопросов

Сообщение sash-kan »

(diesel @ Oct 23 2006, в 20:31) писал(а):в линуксе часто /bin/sh - симлинк на /bin/bash
но, в принципе, тот же bash, в случае вызова с такого симлинка, должен вести себя аки чистый sh.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: bash, несколько вопросов

Сообщение t.t »

sash-kan писал(а):
24.10.2006 13:48
(diesel @ Oct 23 2006, в 20:31) писал(а):в линуксе часто /bin/sh - симлинк на /bin/bash
но, в принципе, тот же bash, в случае вызова с такого симлинка, должен вести себя аки чистый sh.
Должен-то должен, но на практике я уже видел как минимум один момент, который bash понимает, а "чистый sh" понимать, по идее, не обязан, и тот же dash, к примеру, будучи вызван как /bin/sh таки да не понимает.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar
Контактная информация:

Re: bash, несколько вопросов

Сообщение n2j2r »

подскажите, пожалйста, как закомментировать определенную строку в файле.
Что-то на ум ничего дельного не приходит...
спасибо.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash, несколько вопросов

Сообщение sash-kan »

n2j2r
по номеру строки:
sed -i -e 'номер_строки s/^/#/' файл
по подстроке:
sed -i -e 's/\(.*подстрока.*\)/#\1/' файл
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar
Контактная информация:

Re: bash, несколько вопросов

Сообщение n2j2r »

sash-kan
большое спасибо.
Спасибо сказали:
Аватара пользователя
lexus3d
Сообщения: 172

Re: bash, несколько вопросов

Сообщение lexus3d »

подскажите пажалста как из строки вида:

Код: Выделить всё

 /dev/sda1 on /mnt/usb type vfat (rw,nosuid,nodev,umask=000,codepage=866)

получить строку вида:

Код: Выделить всё

 /dev/sda1
Gentoo 2007.0 / 2.6.19-r5 / Gnome
"Всё в этом мире относительно..." (с)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: bash, несколько вопросов

Сообщение diesel »

awk '{print $1}' /etc/fstab
echo '/dev/sda1 on /mnt/usb type vfat (rw,nosuid,nodev,umask=000,codepage=866)'|awk '{print $1}'
echo '/dev/sda1 on /mnt/usb type vfat (rw,nosuid,nodev,umask=000,codepage=866)'|cut -d' ' -f1
Спасибо сказали:
Аватара пользователя
lexus3d
Сообщения: 172

Re: bash, несколько вопросов

Сообщение lexus3d »

а если просто sda1

ЗЫ не пинайте сильно
Gentoo 2007.0 / 2.6.19-r5 / Gnome
"Всё в этом мире относительно..." (с)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: bash, несколько вопросов

Сообщение diesel »

гм по разному можно. зависит от того что вам надо :)

echo '/dev/sda1 on /mnt/usb type vfat (rw,nosuid,nodev,umask=000,codepage=866)'|awk '{print $1}'|awk -F/ '{print $3}'

echo '/dev/sda1 on /mnt/usb type vfat (rw,nosuid,nodev,umask=000,codepage=866)'|awk '{ sub("/dev/","",$1); print $1;}'
Спасибо сказали:
Аватара пользователя
lexus3d
Сообщения: 172

Re: bash, несколько вопросов

Сообщение lexus3d »

огромное спасибо, дальше думаю разберусь
Gentoo 2007.0 / 2.6.19-r5 / Gnome
"Всё в этом мире относительно..." (с)
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar
Контактная информация:

Re: bash, несколько вопросов

Сообщение n2j2r »

а как правильно в bash скрипте правильно передать переменную awk?
в примере:

Код: Выделить всё

read val
cat $file | awk '/$val/{print}'

спасибо
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: bash, несколько вопросов

Сообщение diesel »

Из man awk:

-v var=value assigns value to program variable var.
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar
Контактная информация:

Re: bash, несколько вопросов

Сообщение n2j2r »

diesel
там так же сказано

Код: Выделить всё

Such variable values are available to the BEGIN block of an AWK program.

и как мне в BEGIN все это сделать/это ж фактически до выполнения работает?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: bash, несколько вопросов

Сообщение diesel »

n2j2r писал(а):
13.11.2006 13:42
diesel
там так же сказано

Код: Выделить всё

Such variable values are available to the BEGIN block of an AWK program.

и как мне в BEGIN все это сделать/это ж фактически до выполнения работает?

Вообще это значит что эти переменные становятся доступными в BEGIN-блоке :)

как вариант:
awk "BEGIN{print \"$LANG\";}" напечатает значение системной переменной $LANG :)
можно даже вот так:
echo test|awk "BEGIN{a=\"$LANG\"};"'{print a}'
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar
Контактная информация:

Re: bash, несколько вопросов

Сообщение n2j2r »

(diesel @ Nov 13 2006, в 16:00) писал(а):Вообще это значит что эти переменные становятся доступными в BEGIN-блоке

Код: Выделить всё

They are executed before any of the  input is read.

так вот. мне то как раз не надо выводить переменную.Мне нужно использовать ее как шаблон для вывода совпавших строк из файла.
Вопрос то вобщем такой/ как затолкать жту переменную в pattern???
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: bash, несколько вопросов

Сообщение diesel »

http://www.gnu.org/software/gawk/manual/ht...-Variables.html - вот тут пример есть :) того как затолкать переменную в паттерн :) ровно так же как и в BEGIN :) :) :)

BEGIN блок перед тем как начинается обработка текста который на входе. Переменные которые вы передаете в -v доступны уже в BEGIN-блоке(и во всем скрипте есс-но) - что тут непонятного?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: bash, несколько вопросов

Сообщение sash-kan »

в примере:
(n2j2r @ Nov 13 2006, в 12:26) писал(а):cat $file | awk '/$val/{print}'
переменная $val определена несколькимм строчками выше. я правильно понял?
дело в том, что одинарные кавычки являются экранирующими. и внутри них, в частности, не происходит подстановка переменных. в данном случае можно их просто заменить на двойные.
универсальнее вынести нужные переменные из кавычек:
awk '/'$val'/{print}'
универсальнее в том плане, что подстановка внешних для awk переменных не должна мешать употреблению его собственных внутренних переменных.

p.s. ага, внимательнее надо быть (:
в преведенной diesel-ем ссылке как раз, в частности, и про это самое.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Pinea Gofman
Сообщения: 4
ОС: MacOSX
Контактная информация:

Re: bash, несколько вопросов

Сообщение Pinea Gofman »

можно и мне вопросик про sed

почему вот эта строчка выполняется правильно

Код: Выделить всё

echo "[tT][iI][fF]" | sed 's/\]//g' | sed 's/[\[A-Z]//g'


а такой вариант (вроде логичный и правильный) не работает

Код: Выделить всё

echo "[tT][iI][fF]" | sed 's/[\[A-Z]\]//g'


и как бы я не старался выполнить задачу одной командой sed
ничего не выходит
Не фэйка для а водки ради!!!
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: bash, несколько вопросов

Сообщение v04bvs »

sed 's/[][A-Z]//g'
Спасибо сказали:
Аватара пользователя
Pinea Gofman
Сообщения: 4
ОС: MacOSX
Контактная информация:

Re: bash, несколько вопросов

Сообщение Pinea Gofman »

v04bvs писал(а):
07.12.2006 23:10
sed 's/[][A-Z]//g'


большое спасибо
Не фэйка для а водки ради!!!
Спасибо сказали:
Аватара пользователя
Malcolm
Сообщения: 860
Статус: Изменник
ОС: Archlinux on IBM Z60m
Контактная информация:

Re: bash, несколько вопросов

Сообщение Malcolm »

Суть вопроса:
в /etc/rc.conf есть строка:
MODULES=()
надо заменить её типа:
MODULES=(nvram i810 etc module)
но что-то не получается. Что я неправильно делаю?

Код: Выделить всё

MODULES="nvram i810 speedstep_centrino cpufreq_conservative ibm_acpi ppp-generic capability e100"
sed -i -e 's/\(^MODULES.*\)/MODULES=\('$MODULES'\)/' /etc/rc.conf
Win7 on X200s || Android 2.3 on Galaxy Tab
Блог
Спасибо сказали:
Аватара пользователя
Бодрый и Веселый
Сообщения: 66
ОС: What?

Re: bash, несколько вопросов

Сообщение Бодрый и Веселый »

Можно так:

Код: Выделить всё

MODULES="a b c"; echo "MODULES=(e f g)" | sed -e "s/^MODULES=(.*)$/MODULES=(${MODULES})/"
Спасибо сказали:
BaBL
Сообщения: 767
ОС: Debian GNU/Linux SID
Контактная информация:

Re: bash, несколько вопросов

Сообщение BaBL »

А я, вот, не придумал как можно простенько проверить наличие установленного приложения. locate, по идее, не везде есть, а вот через test -x наличие нужного бинарника как-то не смог проверить. Возможно просто где-то ошибся в выражении. Проверить желательно весь PATH
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: bash, несколько вопросов

Сообщение elide »

BaBL
man which
слава роботам!
Спасибо сказали:
BaBL
Сообщения: 767
ОС: Debian GNU/Linux SID
Контактная информация:

Re: bash, несколько вопросов

Сообщение BaBL »

elide писал(а):
23.01.2007 00:38
BaBL
man which

Спасибо, то что нужно =) Как-то и пропустил, мучал whereis, а он при пустом результате возвращает эррор мессадж, опять же не постоянный.
Спасибо сказали:
Ответить