На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
Krist_ALL
Сообщения: 113
ОС: Fedora 13
Сообщение
Krist_ALL » 28.04.2013 22:11
привет.
не пойму что за конструкция
Код: Выделить всё
f=123;
echo ${ff/456/789/};
или
echo $(ff/.A/.a/)
если в скобках буквы то один результат, буквы другой..
fedora13
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 28.04.2013 23:27
тут основная разница не в буквах и цфирах, а в видах скобок.
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
Сообщение
Krist_ALL » 29.04.2013 13:47
Код: Выделить всё
ls |while read fname; do mv fname ${fname/.txt/.TXT/};
> bash: ошибка синтаксиса: неожиданный конец файла
хотя пример почти как в книге.. где ошибка?
fedora13
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 29.04.2013 14:05
что значит "почти"? видимо в этом и проблема.
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
Сообщение
Krist_ALL » 29.04.2013 14:17
ой , а вот done я правда не написал а в книге есть. спс)
Код: Выделить всё
ls |while read fname; do mv fname ${fname/.txt/.TXT}; done
работает номрально.
а вот for пока еще не проходил)
теперь маюсь с if.. можно в этой теме спрашивать ? или новую создавать? я думаю просто у меня много мелких вопросов будет т.к. синтаксис необычный у баша
fedora13
Krist_ALL
Сообщения: 113
ОС: Fedora 13
Сообщение
Krist_ALL » 29.04.2013 14:23
Код: Выделить всё
#!/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
Сообщение
SLEDopit » 29.04.2013 14:47
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
Контактная информация:
Сообщение
drBatty » 29.04.2013 15:02
это не баг, а фича. if это конструкция языка, а вот [ это команда. (хотя и встроенная). Между ними пробел должен быть.
И да, нужно БОЛЬШЕ пробелов ☺
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 29.04.2013 19:34
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.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:
Сообщение
drBatty » 30.04.2013 10:27
SLEDopit писал(а): ↑ 29.04.2013 19:34
ну есть ещё и /usr/bin/[ . для тех кто не любит встроенные команды
лучше test, ибо нет man [ (обычно), а вот man test есть, и это одно и тоже.
yars писал(а): ↑ 29.04.2013 21:24
Думаю, ТСу стоит прочесть Частые ошибки в bash-скриптинге
вот вы "думаете", а я УВЕРЕН, что автору этой ерунды не помешает перечитать man bash, который он похоже даже и не открывал.
И переименовать свой пост на маздайном хабре: "как я пытался осилить bash методом тыка".
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 30.04.2013 10:27
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
Контактная информация:
Сообщение
drBatty » 30.04.2013 10:43
Bizdelnick
вы слово "обычно" не понимаете? Обычно нет man [, а вот man test есть всегда, если есть test. (разве что специально маны вырезали).
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 30.04.2013 11:05
drBatty писал(а): ↑ 30.04.2013 10:43
вы слово "обычно" не понимаете? Обычно нет man [
Извините, запишу в блокнотик, чтобы не забыть: Debian Squeeze - необычный дистрибутив.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 30.04.2013 12:57
Ну справедливости ради:
Код: Выделить всё
$ 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
Контактная информация:
Сообщение
drBatty » 30.04.2013 15:36
SLEDopit писал(а): ↑ 30.04.2013 12:57
и в каком-нибудь red hat'e (и, емнип, потомках) подобной сим линки действительно нет.
а в слаке раньше был, а теперь почему-то нету. Хотя /bin/[ есть.
В данном случае важно, что
1. его может не быть
2. программист может подумать, что это часть ЯП, и просто не догадается использовать man
Потому-то лучше использовать test или башизмы типа [[ ]] и (( ))
Bizdelnick
Модератор
Сообщения: 20791
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 30.04.2013 15:51
drBatty писал(а): ↑ 30.04.2013 15:36
лучше использовать test или башизмы типа [[ ]] и (( ))
Так test в bash'е всё равно встроенный, и не факт, что полностью соответствует man'у. А башизмы ИМХО лучше не использовать без крайней необходимости.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:
Сообщение
drBatty » 30.04.2013 16:05
Bizdelnick писал(а): ↑ 30.04.2013 15:51
Так test в bash'е всё равно встроенный, и не факт, что полностью соответствует man'у.
за то полностью соответствует help'у :)
(впрочем, help [ в моём баше таки работает).
Bizdelnick писал(а): ↑ 30.04.2013 15:51
А башизмы ИМХО лучше не использовать без крайней
ИМХО можно писать на bash, а можно писать на POSIX sh. Нельзя быть немножко беременной.
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 30.04.2013 16:27
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.