echo и слеши

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

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

Ответить
Krist_ALL
Сообщения: 113
ОС: Fedora 13

echo и слеши

Сообщение Krist_ALL »

привет.
не пойму что за конструкция

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

f=123;
echo ${ff/456/789/};

или

echo $(ff/.A/.a/)

если в скобках буквы то один результат, буквы другой..
fedora13
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: echo и слеши

Сообщение SLEDopit »

тут основная разница не в буквах и цфирах, а в видах скобок.
Krist_ALL писал(а):
28.04.2013 22:11
echo ${ff/456/789/};
заменить 456 на 789 в переменной ff. подробнее.
Krist_ALL писал(а):
28.04.2013 22:11
echo $(ff/.A/.a/)
выполнить команду ff/.A/.a/ , результатом выплюнутым в stdout заменить себя и выполнить исходную команду. подробнее.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Krist_ALL
Сообщения: 113
ОС: Fedora 13

Re: echo и слеши

Сообщение Krist_ALL »

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

 ls |while read fname; do  mv fname ${fname/.txt/.TXT/};
> bash: ошибка синтаксиса: неожиданный конец файла

хотя пример почти как в книге.. где ошибка?
fedora13
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: echo и слеши

Сообщение SLEDopit »

Krist_ALL писал(а):
29.04.2013 13:47
почти
что значит "почти"? видимо в этом и проблема.
Krist_ALL писал(а):
29.04.2013 13:47
ls |while read fname; do mv fname ${fname/.txt/.TXT/};
тут как минимум не хватает done.
к тому же читать выхлоп ls не самая лучшая практика.
лучше использовать for file in * ; do smth ; done.
ну и ${fname/.txt/.TXT/} не заменит .txt на .TXT, как вы, вероятно ожидаете. оно заменит .txt на .TXT/ . последний слэш стоит убрать.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Krist_ALL
Сообщения: 113
ОС: Fedora 13

Re: echo и слеши

Сообщение Krist_ALL »

ой , а вот done я правда не написал а в книге есть. спс)

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

ls |while read fname; do  mv fname ${fname/.txt/.TXT}; done

работает номрально.
а вот for пока еще не проходил)

теперь маюсь с if.. можно в этой теме спрашивать ? или новую создавать? я думаю просто у меня много мелких вопросов будет т.к. синтаксис необычный у баша
fedora13
Спасибо сказали:
Krist_ALL
Сообщения: 113
ОС: Fedora 13

Re: echo и слеши

Сообщение Krist_ALL »

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

#!/bin/bash
echo -n "name - "
read user_name

if[ -n $user_name ];
 then
          echo "hello $user_name"

fi


это внимательно переписал из книги и все равно ошибки..
./aa.sh: line 5: if[ -n vlad ]: команда не найдена
./aa.sh: line 6: syntax error near unexpected token `then'
./aa.sh: line 6: ` then '




fedora13
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: echo и слеши

Сообщение SLEDopit »

Krist_ALL писал(а):
29.04.2013 14:23
это внимательно переписал из книги и все равно ошибки..
значит надо ещё внимательнее. пробел между if и [ где?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: echo и слеши

Сообщение drBatty »

Krist_ALL писал(а):
29.04.2013 14:23
if[

это не баг, а фича. if это конструкция языка, а вот [ это команда. (хотя и встроенная). Между ними пробел должен быть.

И да, нужно БОЛЬШЕ пробелов ☺
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: echo и слеши

Сообщение SLEDopit »

drBatty писал(а):
29.04.2013 15:02
команда. (хотя и встроенная)
ну есть ещё и /usr/bin/[ . для тех кто не любит встроенные команды (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: echo и слеши

Сообщение yars »

Думаю, ТСу стоит прочесть Частые ошибки в bash-скриптинге
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: echo и слеши

Сообщение drBatty »

SLEDopit писал(а):
29.04.2013 19:34
ну есть ещё и /usr/bin/[ . для тех кто не любит встроенные команды

лучше test, ибо нет man [ (обычно), а вот man test есть, и это одно и тоже.

yars писал(а):
29.04.2013 21:24
Думаю, ТСу стоит прочесть Частые ошибки в bash-скриптинге

вот вы "думаете", а я УВЕРЕН, что автору этой ерунды не помешает перечитать man bash, который он похоже даже и не открывал.

И переименовать свой пост на маздайном хабре: "как я пытался осилить bash методом тыка".
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: echo и слеши

Сообщение Bizdelnick »

drBatty писал(а):
30.04.2013 10:27
SLEDopit писал(а):
29.04.2013 19:34
ну есть ещё и /usr/bin/[ . для тех кто не любит встроенные команды

лучше test, ибо нет man [ (обычно), а вот man test есть, и это одно и тоже.

$

$ man [ | head -n15 TEST(1) User Commands TEST(1) NAME test - check file types and compare values SYNOPSIS test EXPRESSION test [ EXPRESSION ] [ ] [ OPTION $

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: echo и слеши

Сообщение drBatty »

Bizdelnick
вы слово "обычно" не понимаете? Обычно нет man [, а вот man test есть всегда, если есть test. (разве что специально маны вырезали).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: echo и слеши

Сообщение Bizdelnick »

drBatty писал(а):
30.04.2013 10:43
вы слово "обычно" не понимаете? Обычно нет man [

Извините, запишу в блокнотик, чтобы не забыть: Debian Squeeze - необычный дистрибутив.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: echo и слеши

Сообщение SLEDopit »

Ну справедливости ради:

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

 $ ls -l /usr/share/man/man1/[.1.gz
lrwxrwxrwx 1 root root 9 Nov 18 19:25 /usr/share/man/man1/[.1.gz -> test.1.gz
и в каком-нибудь red hat'e (и, емнип, потомках) подобной сим линки действительно нет.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: echo и слеши

Сообщение drBatty »

SLEDopit писал(а):
30.04.2013 12:57
и в каком-нибудь red hat'e (и, емнип, потомках) подобной сим линки действительно нет.

а в слаке раньше был, а теперь почему-то нету. Хотя /bin/[ есть.

В данном случае важно, что

1. его может не быть
2. программист может подумать, что это часть ЯП, и просто не догадается использовать man

Потому-то лучше использовать test или башизмы типа [[ ]] и (( ))
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: echo и слеши

Сообщение Bizdelnick »

drBatty писал(а):
30.04.2013 15:36
лучше использовать test или башизмы типа [[ ]] и (( ))

Так test в bash'е всё равно встроенный, и не факт, что полностью соответствует man'у. А башизмы ИМХО лучше не использовать без крайней необходимости.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: echo и слеши

Сообщение drBatty »

Bizdelnick писал(а):
30.04.2013 15:51
Так test в bash'е всё равно встроенный, и не факт, что полностью соответствует man'у.

за то полностью соответствует help'у :)

(впрочем, help [ в моём баше таки работает).

Bizdelnick писал(а):
30.04.2013 15:51
А башизмы ИМХО лучше не использовать без крайней

ИМХО можно писать на bash, а можно писать на POSIX sh. Нельзя быть немножко беременной.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: echo и слеши

Сообщение SLEDopit »

Bizdelnick писал(а):
30.04.2013 15:51
А башизмы ИМХО лучше не использовать без крайней необходимости.
А можно пример такой крайней необходимости?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Ответить