Здраствуйте все.
Пишу скрипт в bash#!/bin/bash
perem1=$1
На вход этой переменной подается строка '32130 1234 7563 2134345'.Внимание вопрос!
Как можно присвоить perem2 значение 7563. (число через 2 пробела).Т.е. из этой строки меня интересует только третье число.
Как быть?
>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 ?
Просто этот скрипт запускается при определенных условиях и когда условие выполняется на вход подается строка '32130 1234 7563 2134345' Которую я записываю в perem1, но из этой строки меня интересует только третье число.
Другими словами
>Nuzno 3 4islo v lubom slu4ajeЩас попробую
>perem2=`echo $perem1 | awk '{print $3}' - `
и отпишу 8-)
>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 ?
>>SCHas poprobuyu
>>>perem2=`echo $perem1 | awk '{print $3}' - `
>>i otpishu 8-)
ZARABOTАЛО. Спасибо действительно помогло.
>
>kstate kak s qmail'om re6il problemu ?QMAIL работает, проблема была в DNS сейчас её устранил все работает не могу не нарадоваться.
>>>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.
Сейчас другая проблема.(Bash)Пишу условие на существование файла.
Мне нужна проверка условия, на существования файла, если файл существует то записать в файл 123, если не существует, то в файл 321.
В общем виде выглядит вот так:
#!/bin/bashfile1=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-) !!!!
>Сейчас другая проблема.(Bash)
>
>Пишу условие на существование файла.
>Brainbug HELP 8-) !!!!Сделал.
if [ -e /home/user/${file1}.abc ]; then
Просто по не знанию не поставил пробелы после первой '[' и ']'
Смешная ошибка.
>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.
Спасибо
Как в 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,
а арифметические действия с ней делать не могу.
Как быть?
>Как в Bash перевести переменную в которой содержиться строка '30482',
>в число 30482.
>Cкрипту на вход дается строка.
>А мне нужно число.
Tipi dannih razli4ajutca po kontekstu. Shell ne tipizirovanij jazik.
>Tipi dannih razli4ajutca po kontekstu. Shell ne tipizirovanij jazik.
Выше описана моя ситуация.
Вы хотите сказать используя Bash ничего не получиться?
>>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.
>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остальной код не изменился.
т.е вся разница в том, что в первом случае я переменным присваиваю значения в скрипте и все работает, а во втором (как мне надо) значения переменных выдираются из строки подаваемой на вход!
Вот такие изменения, а вычисления уже не выполняются.
Вот в чем проблема !
>>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
>
>остальной код не изменился.
>т.е вся разница в том, что в первом случае я переменным присваиваю
>значения в скрипте и все работает, а во втором (как мне
>надо) значения переменных выдираются из строки подаваемой на вход!
>Вот такие изменения, а вычисления уже не выполняются.
>Вот в чем проблема !
> 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 рекомендуется все переменные брать в фигурные скобки.
Весь топик - какая-то каша из basic-a и транслита
Ничего общего с shell-программированием это не имеет
Объясни внятно и уже до конца чего ты хочешь,
тогда можно будет что-нибудь посоветовать
>Весь топик - какая-то каша из 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=10000Rezult=$[ $perem2 - $perem1 ] #остальной код, как видите тот-же
#проблема в том, что вычисления уже не
#выполняются. Пробовал вместо проверки
if [ "$Rezult" -le "1" ]; then #условия записывать значения переменных
#user и perem1 в какой нибудь файл.
touch /home/user/$user.lock #Эти значения были верные. Тогда поче-
else #му когда явно задаешь значения все
echo $Rezult > /home/user/Rezult #работает, а когда выдираешь из строки,
fi #нет.
Вот в чем проблема.
Помогите советом.
$ 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
Более универсальный вариант$ 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"
>$ 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
>6577Neverno.
й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
>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",
оставим любителям этого творчества.
> Эти значения были верные. Тогда почему когда явно задаешь значения
> все работает, а когда выдираешь из строки, нет.
Ответ очевиден - проверь, присваиваются ли переменным те значния, которые ты ожидаешь (т.е. после
user=`echo $stroka | awk '{print $3}' - `
сделай
echo '>'$user'<'
и посмотри глазками, что в эту переменную заносится (уголки дл ятого, чтобы видеть границы переменной).