Здравствуйте! Решил плавно перейти на линукс..Знаю некоторые основы,но еще полный пионер! Но дело не в этом.. Мне нужна помощь в написании маленького скрипта(хотя бы структура и команды :rolleyes: ))
Нужно,чтобы скрипт спрашивал сколько ввести чисел(n-ное кол-во штук), затем,чтобы запрашивал ввести пользователя эти числа(n-ное кол-во раз) и сложить их между собой..
как я понимаю,нужно использовать for loop
в и-нете рылся,структуру такую дает:
text
for переменная in 1,2,3...n
do
команда1
команда2
командаN
done
Но как применить это к моей задаче? ( Знаю как это сделать в JavaScripte например,но тут затрудняюсь..не могу сообразить что к чему)
Помогите пожалуйста!))
1)Нужно,чтобы скрипт спрашивал сколько ввести чисел(n-ное кол-во штук),
затем,чтобы запрашивал
2)ввести пользователя эти числа(n-ное кол-во раз) и сложить их между собой..
1) help read
2a) вам наверное интересно, как сделать in 1 2 3 4 5 6 7, если задано только 7?
doc@dt:~$ seq 7
1
2
3
4
5
6
7
man seq
2б) а ещё - как складывать?
doc@dt:~$ (( x = 17 + 12 ))
doc@dt:~$ echo $x
29
man bash
ну вроде все строительные блоки готовы. Чего не хватает?
Видимо я не совсем четко сформулировал свой вопрос..мне нужно,чтобы я ввел n-ное кол-во случайных чисел,а программа их всех сложила между собой. ВЫ предоставили мне немного другой скрипт или это я ничего не понимаю?!
Видимо я не совсем четко сформулировал свой вопрос..мне нужно,чтобы я ввел n-ное кол-во случайных чисел,а программа их всех сложила между собой. ВЫ предоставили мне немного другой скрипт или это я ничего не понимаю?!
1) вводим количество чисел:
read
введённое число оказывается в $REPLY
2) сохраняем количество в $N
N=$REPLY
3) обнуляем сумму
SUMMA=0
4) начинаем цикл
for i in `seq $N`
если мы ввели количество 5, то `seq $N` развернётся в 1 2 3 4 5
5) тело цикла
do
6) ввод i-того числа
read
7) сложение
(( SUMMA = SUMMA + REPLY ))
8) конец тела цикла
done
9) вывод суммы
echo "сумма равна $SUMMA"
Вам это нужно? Видите, я для вас почти всё уже написал ;)
Или вам нужно сначала ввести кучу чисел, а потом их сложить?
Проще всего хранить числа в одной переменной S, разделённые пробелом.
тогда, что-бы добавить к куче чисел очередное число пишите так:
S="$S $RIPLY"
После ввода чисел 12, 5, и 7 переменная примет вид
text
12 5 7
И вот эту переменную мы вставляем после in
for x in $S
тогда, в цикле $x принимает на первой итерации значение 12, на второй 5, а на третьей 7.
Конечно, если у вас bash, то вы можете использовать массивы. Недавно тут была тема про это (с примерами).
[quote=linux_rookie13]Видимо я не совсем четко сформулировал свой вопрос..мне нужно,чтобы я ввел n-ное кол-во случайных чисел,а программа их всех сложила между собой. ВЫ предоставили мне немного другой скрипт или это я ничего не понимаю?!
1) вводим количество чисел:
read
введённое число оказывается в $REPLY
2) сохраняем количество в $N
N=$REPLY
3) обнуляем сумму
SUMMA=0
4) начинаем цикл
for i in `seq $N`
если мы ввели количество 5, то `seq $N` развернётся в 1 2 3 4 5
5) тело цикла
do
6) ввод i-того числа
read
7) сложение
(( SUMMA = SUMMA + REPLY ))
8) конец тела цикла
done
9) вывод суммы
echo "сумма равна $SUMMA"
Вам это нужно? Видите, я для вас почти всё уже написал ;)
Или вам нужно сначала ввести кучу чисел, а потом их сложить?
Проще всего хранить числа в одной переменной S, разделённые пробелом.
тогда, что-бы добавить к куче чисел очередное число пишите так:
S="$S $RIPLY"
После ввода чисел 12, 5, и 7 переменная примет вид
text
12 5 7
И вот эту переменную мы вставляем после in
for x in $S
тогда, в цикле $x принимает на первой итерации значение 12, на второй 5, а на третьей 7.
Конечно, если у вас bash, то вы можете использовать массивы. Недавно тут была тема про это (с примерами).[/quote]
Спасибо огромное!)) очень большая помощь, но мне нужно сначала ввести кучу чисел,чтобы скрипт их сам потом сложил..но думаю,что я уловил мысль))
для того,чтобы скрипт просил ввести числа нужно писать следующее,так?:
echo "Введите кол-во чисел x >"
read x
и потом как то добавить этот x в сам for loop так?)
цикл будет выполнен ОДИН раз. переменной $i будет присвоено значение "x".
linux_rookie13 написал:
result = result +i
(( двойные скобки забыли ))
linux_rookie13 написал:
read result
read - это ввод с клавиатуры.
если написано
read result
то скрипт остановится, и будет ждать, пока вы введёте result
linux_rookie13 написал:
ЗНАЮ,что не хватает $ где их ставить?
везде. перед КАЖДОЙ переменной. Имеются исключения:
1) нельзя ставить перед переменно КОТОРОЙ присваивается значение:
text
X=$Y
переменной $X присваивается значение $Y
(ВНИМАНИЕ! пробелов тут НЕ надо ставить)
2) внутри оператора for
text
for X in 2 12 85 06
Переменной $X присваиваются значения
2
12
85
06
(по одному значению на каждую итерацию)
(на самом деле, это тоже присваивание)
3) внутри оператора read
text
read X
переменной $X присваивается значение, которое вводится с клавиатуры
4) внутри двойных скобок
text
(( X = Y + Z ))
Дело в том, что ((внутри таких скобок)) только цифры.
На самом деле, символ $ нужен для того, что-бы отличить строку X от переменной $X. В тех случаях, когда это и так понятно, символ $ не ставится. Например
text
X=X
Первое X тут переменная, мы просто ничему другому присвоить значение не можем. Второе X здесь - строка. После выполнения оператора, переменная $X станет равной "X".
цикл будет выполнен ОДИН раз. переменной $i будет присвоено значение "x".
linux_rookie13 написал:
result = result +i
(( двойные скобки забыли ))
linux_rookie13 написал:
read result
read - это ввод с клавиатуры.
если написано
read result
то скрипт остановится, и будет ждать, пока вы введёте result
linux_rookie13 написал:
ЗНАЮ,что не хватает $ где их ставить?
везде. перед КАЖДОЙ переменной. Имеются исключения:
1) нельзя ставить перед переменно КОТОРОЙ присваивается значение:
text
X=$Y
переменной $X присваивается значение $Y
(ВНИМАНИЕ! пробелов тут НЕ надо ставить)
2) внутри оператора for
text
for X in 2 12 85 06
Переменной $X присваиваются значения
2
12
85
06
(по одному значению на каждую итерацию)
(на самом деле, это тоже присваивание)
3) внутри оператора read
text
read X
переменной $X присваивается значение, которое вводится с клавиатуры
4) внутри двойных скобок
text
(( X = Y + Z ))
Дело в том, что ((внутри таких скобок)) только цифры.
На самом деле, символ $ нужен для того, что-бы отличить строку X от переменной $X. В тех случаях, когда это и так понятно, символ $ не ставится. Например
text
X=X
Первое X тут переменная, мы просто ничему другому присвоить значение не можем. Второе X здесь - строка. После выполнения оператора, переменная $X станет равной "X".
text
X=$Y
А тут в переменную $X копируется переменная $Y.[/quote]
Спасибо огромное за разъяснение и потраченное время! Вы мне очень помогли!!
( но до сих пор меня мучает один момент..если мы заранее не знаем какие значения примет х, что делать?
например мы знаем,что значению х будут присвоены 5 переменных..нам самим по ходу выполнения скрипта нужно ввести эти 5 чисел,а потом скрипт их сложит..
а если у нас 10 , 34, 50 значений х, что делать? :( )