The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Надо присвоить переменной часть строки."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Надо присвоить переменной часть строки."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 15-Апр-04, 16:40  (MSK)
Здраствуйте все.
Пишу скрипт в bash

#!/bin/bash

perem1=$1
На вход этой переменной подается строка '32130 1234 7563 2134345'.

Внимание вопрос!
Как можно присвоить perem2 значение 7563. (число через 2 пробела).

Т.е. из этой строки меня интересует только третье число.

Как быть?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от Brainbug Искать по авторуВ закладки on 15-Апр-04, 16:57  (MSK)
>Zdrastvujte vse.
>Pishu skript v bash
>
>#!/bin/bash
>
>perem1=$1
>Na vhod `etoj peremennoj podaetsya stroka '32130 1234 7563 2134345'.
>
>Vnimanie vopros!
>Kak mozhno prisvoit' perem2 znachenie 7563. (chislo cherez 2 probela).
>
>T.e. iz `etoj stroki menya interesuet tol'ko tret'e chislo.
>
>Kak byt'?

#!/bin/sh

perem1="32130 1234 7563 2134345"
perem2=`echo $perem1 | awk '{print $3}' - `

Na sh, no dumaju bash v etom plane ne budet olti4atca. Pri4em ne sovsem ponal. Nuzno 3 4islo v lubom slu4aje ili esli ono 3 i ego zna4enije 7563 ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 15-Апр-04, 17:03  (MSK)
Просто этот скрипт запускается при определенных условиях и когда условие выполняется на вход подается строка '32130 1234 7563 2134345' Которую я записываю в perem1, но из этой строки меня интересует только третье число.
Другими словами
>Nuzno 3 4islo v lubom slu4aje

Щас попробую
>perem2=`echo $perem1 | awk '{print $3}' - `
и отпишу 8-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от Brainbug Искать по авторуВ закладки on 15-Апр-04, 17:15  (MSK)
>Prosto `etot skript zapuskaetsya pri opredelennyh usloviyah i kogda uslovie vypolnyaetsya na
>vhod podaetsya stroka '32130 1234 7563 2134345' Kotoruyu ya zapisyvayu v
>perem1, no iz `etoj stroki menya interesuet tol'ko tret'e chislo.
>Drugimi slovami
>>Nuzno 3 4islo v lubom slu4aje
>
>SCHas poprobuyu
>>perem2=`echo $perem1 | awk '{print $3}' - `
>i otpishu 8-)


kstate kak s qmail'om re6il problemu ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 15-Апр-04, 17:19  (MSK)
>>SCHas poprobuyu
>>>perem2=`echo $perem1 | awk '{print $3}' - `
>>i otpishu 8-)
ZARABOTАЛО. Спасибо действительно помогло.
>
>kstate kak s qmail'om re6il problemu ?

QMAIL работает, проблема была в DNS сейчас её устранил все работает не могу не нарадоваться.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от Brainbug Искать по авторуВ закладки on 15-Апр-04, 17:22  (MSK)
>>>SCHas poprobuyu
>>>>perem2=`echo $perem1 | awk '{print $3}' - `
>>>i otpishu 8-)
>ZARABOTALO. Spasibo dejstvitel'no pomoglo.
>>
>>kstate kak s qmail'om re6il problemu ?
>
>QMAIL rabotaet, problema byla v DNS sejchas eio ustranil vse rabotaet ne
>mogu ne naradovat'sya.

Rad sli6at. Uda4i.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 16-Апр-04, 12:23  (MSK)
Сейчас другая проблема.(Bash)

Пишу условие на существование файла.
Мне нужна проверка условия, на существования файла, если файл существует то записать в файл 123, если не существует, то в файл 321.
В общем виде выглядит вот так:
#!/bin/bash

file1=qwerty

if [-e /home/user/${file1}.abc]; then    #ключ -e -проверка на #существование

echo ${file1} > /home/user/123           #если есть то запись в 123

fi

echo ${file1} > /home/user/321           #нет, то запись в 321

пробовал и с else, то же самое.

Файл /home/user/qwerty.abc - существует 100%.

Brainbug HELP 8-) !!!!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 16-Апр-04, 12:38  (MSK)
>Сейчас другая проблема.(Bash)
>
>Пишу условие на существование файла.
>Brainbug HELP 8-) !!!!

Сделал.

if [ -e /home/user/${file1}.abc ]; then

Просто по не знанию не поставил пробелы после первой '[' и ']'
Смешная ошибка.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от Brainbug Искать по авторуВ закладки on 16-Апр-04, 13:07  (MSK)
>Sejchas drugaya problema.(Bash)
>
>Pishu uslovie na suschestvovanie fajla.
>Mne nuzhna proverka usloviya, na suschestvovaniya fajla, esli fajl suschestvuet to zapisat'
>v fajl 123, esli ne suschestvuet, to v fajl 321.
>V obschem vide vyglyadit vot tak:
>#!/bin/bash
>
>file1=qwerty
>
>if [-e /home/user/${file1}.abc]; then    #klyuch -e -proverka na #suschestvovanie
>
>
>echo ${file1} > /home/user/123           #esli est' to zapis' v 123
>
>fi
>
>echo ${file1} > /home/user/321           #net, to zapis' v 321
>
>proboval i s else, to zhe samoe.
>
>Fajl /home/user/qwerty.abc - suschestvuet 100%.
>
>Brainbug HELP 8-) !!!!

Esli sravnit trebovanije i kod, to oni ne odinakovije. V dannom slu4aje esli fail su6estvujet, to zapis idet sna4ala v 123, a potom posle etogo v 321. A esli net to budet pisat tolko v 321.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 16-Апр-04, 15:09  (MSK)
Спасибо
  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 16-Апр-04, 17:47  (MSK)
Как в Bash перевести переменную в которой содержиться строка '30482',
в число 30482.
Cкрипту на вход дается строка.
А мне нужно число.
Описание:
#!/bin/bash
user=$1      #Строка подаваемая на вход скрипта сохраняется в перем user.
perem1=`echo $perem1 | awk '{print $3}' - `#Выдираеися третий параметр в
                                      #строке и присваевается перем perem1
остальной код не изменился.
Вопрос как мне заставить переменную perem1 быть не строкой, а числом.
строчка подаваемая скрипту имеет такой вид:
qwerew 12312 30482 dsad asdfdf 3003213 2343545.
Из этой строчки выдираю 30482,
а арифметические действия с ней делать не могу.
Как быть?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от PORT Искать по авторуВ закладки on 16-Апр-04, 17:54  (MSK)
>Как в Bash перевести переменную в которой содержиться строка '30482',
>в число 30482.
>Cкрипту на вход дается строка.
>А мне нужно число.
Tipi dannih razli4ajutca po kontekstu. Shell ne tipizirovanij jazik.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 16-Апр-04, 18:00  (MSK)
>Tipi dannih razli4ajutca po kontekstu. Shell ne tipizirovanij jazik.
Выше описана моя ситуация.
Вы хотите сказать используя Bash ничего не получиться?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от Brainbug Искать по авторуВ закладки on 16-Апр-04, 18:07  (MSK)
>>Tipi dannih razli4ajutca po kontekstu. Shell ne tipizirovanij jazik.
>Выше описана моя ситуация.
>Вы хотите сказать используя Bash ничего не получиться?

Ho4u skazat 4to skazhem a="1", budet vosprinimatca i kak stroka i kak 4islo v zavisimosti ot togo v kakom kontekste ono ispolzujetca. Esli skazhem budet arifmeti4eskaja operacija zna4it budet s4itat peremennuju a kak 4islo, budet operacii so strokami, zna4it budet a kak stroka ili kak simvol. Nikakih javnih preobrazovanij ne nado delat.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 16-Апр-04, 18:12  (MSK)
>Ho4u skazat 4to skazhem a="1", budet vosprinimatca i kak stroka i kak
>4islo v zavisimosti ot togo v kakom kontekste ono ispolzujetca. Esli
>skazhem budet arifmeti4eskaja operacija zna4it budet s4itat peremennuju a kak 4islo,
>budet operacii so strokami, zna4it budet a kak stroka ili kak
>simvol. Nikakih javnih preobrazovanij ne nado delat.

Описываю скрипт в котором производяться некоторые вычисления с цифрами.

#!/bin/bash
user=name                         #символы
perem1=3000                       #число
perem2=10000                      #число

Rezult=$[ $perem2 - $perem1 ]     #расчитываем разницу между этими  
                                  #переменными результат запоминаем
                                  #в Rezult.

if [ "$Rezult" -le "1" ]; then    #если Rezult <= 1, то

touch /home/user/$user.abc        #создаем файл с именем $user.abc
echo $perem2 $Rezult > /home/user/$user.abc
                                  #и записываем в него переменные
                                  #perem2 и Rezult.

else                              #иначе, записываем в файл
echo $Rezult > /home/user/Rezult  #/home/user/Rezult значение Rezult
fi

Все вычисления работают и записываются в файл результаты как и должно быть, но проблема в том, что у меня на вход скрипта подается строка из которой меня интересует третий параметр который я присваиваю переменной perem1. Затем произвожу вышеупомянутые действия.
Описание:
#!/bin/bash
user=$1      #Строка подаваемая на вход скрипта сохраняется в перем user.
perem1=`echo $user1 | awk '{print $3}' - `#Выдираеися третий параметр в
                                #строке и присваевается перем perem1
user1=`echo $user1 | awk '{print $11}'   `#Выдираеися 11-ый параметр в
                                #строке и присваевается перем user1

остальной код не изменился.
т.е вся разница в том, что в первом случае я переменным присваиваю значения в скрипте и все работает, а во втором (как мне надо) значения переменных выдираются из строки подаваемой на вход!
Вот такие изменения, а вычисления уже не выполняются.
Вот в чем проблема !

  Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "Nado prisvoit' peremennoj chast' stroki."
Сообщение от Brainbug Искать по авторуВ закладки on 16-Апр-04, 18:36  (MSK)
>>Ho4u skazat 4to skazhem a="1", budet vosprinimatca i kak stroka i kak
>>4islo v zavisimosti ot togo v kakom kontekste ono ispolzujetca. Esli
>>skazhem budet arifmeti4eskaja operacija zna4it budet s4itat peremennuju a kak 4islo,
>>budet operacii so strokami, zna4it budet a kak stroka ili kak
>>simvol. Nikakih javnih preobrazovanij ne nado delat.
>
>Описываю скрипт в котором производяться некоторые вычисления с цифрами.
>
>#!/bin/bash
>user=name            
>          
>  #символы
>perem1=3000            
>          
>#число
>perem2=10000            
>          #число
>
>
>Rezult=$[ $perem2 - $perem1 ]     #расчитываем разницу между
>этими
>            
>


Rezult=`expr $perem2 - $perem1` #V Bash ne znaju no v sh tak.

          
>          
>#переменными результат запоминаем
>            
>          
>          
>#в Rezult.
>
>if [ "$Rezult" -le "1" ]; then    #если Rezult
><= 1, то
>
>touch /home/user/$user.abc        #создаем файл с
>именем $user.abc
>echo $perem2 $Rezult > /home/user/$user.abc
>            
>          
>          
>#и записываем в него переменные
>            
>          
>          
>#perem2 и Rezult.
>
>else            
>          
>       #иначе, записываем в файл
>
>echo $Rezult > /home/user/Rezult  #/home/user/Rezult значение Rezult
>fi
>
>Все вычисления работают и записываются в файл результаты как и должно быть,
>но проблема в том, что у меня на вход скрипта подается
>строка из которой меня интересует третий параметр который я присваиваю переменной
>perem1. Затем произвожу вышеупомянутые действия.
>Описание:
>#!/bin/bash
>user=$1      #Строка подаваемая на вход скрипта сохраняется
>в перем user.
>perem1=`echo $user1 | awk '{print $3}' - `#Выдираеися третий параметр в
>            
>          
>         #строке и
>присваевается перем perem1
>user1=`echo $user1 | awk '{print $11}'   `#Выдираеися 11-ый параметр в
>
>            
>          
>         #строке и
>присваевается перем user1
>
>остальной код не изменился.
>т.е вся разница в том, что в первом случае я переменным присваиваю
>значения в скрипте и все работает, а во втором (как мне
>надо) значения переменных выдираются из строки подаваемой на вход!
>Вот такие изменения, а вычисления уже не выполняются.
>Вот в чем проблема !


  Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "Надо присвоить переменной часть строки."
Сообщение от Дмитрий Ю. Карпов emailИскать по авторуВ закладки on 17-Апр-04, 07:38  (MSK)
> perem1=$1
> На вход этой переменной подается строка '32130 1234 7563 2134345'.
> Как можно присвоить perem2 значение 7563. (число через 2 пробела).
> Т.е. из этой строки меня интересует только третье число.

Кажется, что-то типа $perem1[3] (т.е. каждая строка одновременно является массивом, где разделитель - пробельные символы, но можно установить другие). Операция `echo $perem1 | awk '{print $3}' - ` требует запуска двух процессов, что несколько накладно по времени.

> Мне нужна проверка условия, на существования файла

Там много вариантов - "-f" на то, что это действительно файл (а не директория); "-r" на то, что его можно читать и т.п.
А '[' (в отличие от "]") - это не скобка, а программа "/usr/bin/[", возвращающая код завершения (и это многое объясняет).

> как мне заставить переменную perem1 быть не строкой, а числом.

А как ты её используешь, что это не получается? В Shell AWK и Perl переменные не делятся на числовые и строчные.

> user1=`echo $user1 | awk '{print $11}'   `#Выдираеися 11-ый параметр в строке и присваевается перем user1

А ты проверь, что получается в результате. IMHO, AWK может воспринимать "$11" как "${1}1" (т.е. первый аргумент с подшитой к нему единицей), а не  как "${11}". В Shell рекомендуется все переменные брать в фигурные скобки.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "Надо присвоить переменной часть строки."
Сообщение от vt Искать по авторуВ закладки(??) on 17-Апр-04, 10:40  (MSK)
Весь топик - какая-то каша из basic-a и транслита
Ничего общего с shell-программированием это не имеет
Объясни внятно и уже до конца чего ты хочешь,
тогда можно будет что-нибудь посоветовать
  Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "Надо присвоить переменной часть строки."
Сообщение от dimabsd emailИскать по авторуВ закладки(ok) on 18-Апр-04, 15:50  (MSK)
>Весь топик - какая-то каша из basic-a и транслита
>Ничего общего с shell-программированием это не имеет
>Объясни внятно и уже до конца чего ты хочешь,
>тогда можно будет что-нибудь посоветовать

Сейчас попробую.

Мне нужно из значения переменной 'perem2' вычесть значение  переменной 'perem1' и результат присвоить третьей переменной 'Rezult'.
Затем мне нужна проверка условия:
Если значение третьей переменной меньше либо равно 1, то нужно создать файл с именем первой переменной 'User'(/home/user/test.lock ), иначе создать файл (к примеру /home/user/123 ) и записать в него значение третьей переменной 'Rezult'.
Я это делаю вот таким образом, то все работает.
#!/bin/bash
user=test                         #символы
perem1=3000                       #число
perem2=10000                      #число

Rezult=$[ $perem2 - $perem1 ]     #расчитываем разницу между этими  
                                  #переменными результат запоминаем
                                  #в Rezult.

if [ "$Rezult" -le "1" ]; then    #если Rezult <= 1, то

touch /home/user/$user.lock        #создаем файл с именем $user.lock
else                              #иначе, записываем в файл
echo $Rezult > /home/user/Rezult  #/home/user/123 значение Rezult
fi

Проблема в том, что это работает когда значения переменных 'User' и 'perem1' задаю в скрипте т.е.
user=test
perem1=3000
А у меня когда запускается скрипт в программе ему на вход подается строка

4342 123431 vasya  asdas 3423  321331

и мне надо чтобы значения переменных user и perem1 брались из третьего и пятого параметра строки, для этого я пишу вот так:
#!/bin/bash
stroka=$1           #значение переменной равно строке поданной на вход

user=`echo $stroka | awk '{print $3}' - `   #Выдираеися третий
                                            #параметр в строке и
                                            #присваевается user
              #т.е в данном случае значение пер-ой user=vasya.

perem1=`echo $stroka | awk '{print $5}' - `#Выдираеися пятый
                                           #параметр в строке и
                                           #присваевается perem1
              #т.е в данном случае значение пер-ой perem1=3423.
perem2=10000

Rezult=$[ $perem2 - $perem1 ]     #остальной код, как видите тот-же
                                  #проблема в том, что вычисления уже не
                                  #выполняются. Пробовал вместо проверки
if [ "$Rezult" -le "1" ]; then    #условия записывать значения переменных
                                  #user и perem1 в какой нибудь файл.
touch /home/user/$user.lock       #Эти значения были верные.  Тогда поче-
else                              #му когда явно задаешь значения все
echo $Rezult > /home/user/Rezult  #работает, а когда выдираешь из строки,
fi                                #нет.
Вот в чем проблема.
Помогите советом.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

19. "Надо присвоить переменной часть строки."
Сообщение от vt Искать по авторуВ закладки(??) on 19-Апр-04, 15:11  (MSK)
$ cat script
#!/bin/sh
let r=10000-$5
test $r -le 1 && touch $3.lock || echo $r > result

$ ./script 4342 123431 vasya asdas 3423 321331

$ ./script 4342 123431 vasya asdas 13423 321331

$ ls
result  script*  vasya.lock

$ cat result
6577

  Рекомендовать в FAQ | Cообщить модератору | Наверх

20. "Надо присвоить переменной часть строки."
Сообщение от vt Искать по авторуВ закладки(??) on 19-Апр-04, 15:29  (MSK)
Более универсальный вариант

$ cat ./script
#!/bin/sh
set $@
let r=10000-$5
test $r -le 1 && touch $3.lock || echo $r > result

позволяет и так

$ ./script "4342 123431 vasya asdas 3423 321331"

  Рекомендовать в FAQ | Cообщить модератору | Наверх

22. "Надо присвоить переменной часть строки."
Сообщение от Brainbug Искать по авторуВ закладки on 21-Апр-04, 10:29  (MSK)
>$ cat script
>#!/bin/sh
>let r=10000-$5
>test $r -le 1 && touch $3.lock || echo $r > result
>
>$ ./script 4342 123431 vasya asdas 3423 321331
>
>$ ./script 4342 123431 vasya asdas 13423 321331
>
>$ ls
>result  script*  vasya.lock
>
>$ cat result
>6577

Neverno.
йt script
#!/bin/sh
let r=1000-$1
echo $r
%./script 10
let: arith: syntax error: "r=1000-10"
%

Verno

йt script
#!/bin/sh
r=$((1000-$1))
echo $r
%./script 10
990
%

Eto v otno6enii sh. V bash let rabotajet.

%uname -rs
FreeBSD 4.9-RC


  Рекомендовать в FAQ | Cообщить модератору | Наверх

23. "Надо присвоить переменной часть строки."
Сообщение от vt Искать по авторуВ закладки(??) on 21-Апр-04, 12:10  (MSK)
>Neverno.
>йt script
>#!/bin/sh
>let r=1000-$1
>echo $r
>%./script 10
>let: arith: syntax error: "r=1000-10"
>%
>
>Verno
>
>йt script
>#!/bin/sh
>r=$((1000-$1))
>echo $r
>%./script 10
>990
>%
>
>Eto v otno6enii sh. V bash let rabotajet.
>
>%uname -rs
>FreeBSD 4.9-RC

Во-первых, читаем subj: "Пишу скрипт в bash"

Во-вторых, "верно"-"не верно" в соответствии с чем ?
$ sh --posix -c 'let a=1+2; echo $a'
3

А творчество создателей sh в "FreeBSD 4.9-RC",
оставим любителям этого творчества.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

21. "Надо присвоить переменной часть строки."
Сообщение от Дмитрий Ю. Карпов emailИскать по авторуВ закладки on 19-Апр-04, 19:01  (MSK)
> Эти значения были верные. Тогда почему когда явно задаешь значения
> все работает, а когда выдираешь из строки, нет.
Ответ очевиден - проверь, присваиваются ли переменным те значния, которые ты ожидаешь (т.е. после
user=`echo $stroka | awk '{print $3}' - `
сделай
echo '>'$user'<'
и посмотри глазками, что в эту переменную заносится (уголки дл ятого, чтобы видеть границы переменной).
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру