2013-03-31 3 views
3

Напишите сценарий bash, который будет читать 10 целых чисел от пользователей и добавит вывод в файл «XYZ». Вы не можете использовать инструкцию «читать» несколько раз в скрипте.Используйте сценарий bash для чтения чисел

#! /bin/bash 

for i in {0,1,2,3,4,5,6,7,8,9} 
do 
    read "i" 
    echo "0,1,2,3,4,5,6,7,8,9" >> XYZ 
done 

Я студент просто бенгин, чтобы узнать это, я чувствую, что это сложно, не могли бы вы дать мне несколько предложений? Я думаю, у этого должно быть много проблем. Большое спасибо.

+0

Возможно, вы можете попробовать прочитать целую строку с целыми числами с помощью опции -a (см. [Здесь] (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_08_02.html)) , Конечно, пользователь должен сразу вводить все целые числа. – petajamaja

+0

Большое вам спасибо, это полезно. –

ответ

5

Давайте посмотрим, что у вас уже есть. Ваш цикл for выполняет 10 итераций команды read, а read появляется только один раз в скрипте. Вы также добавляете (>>) свой вывод в файл XYZ.

Вы не должны использовать одну и ту же переменную для счетчика циклов и чтения ввода. И последовательность может быть сокращена до {0..9}.

Что вам еще не хватает - это условие, чтобы проверить, что пользовательский ввод фактически является целым числом. И вы, вероятно, должны вывести значение, которое вы читаете, а не строку "0,1,2,3,4,5,6,7,8,9".


На более общем плане, вы можете найти в следующих руководствах полезные с обучением bash:

+0

Я знаю, что эти два гида хорошо известны и часто цитируются, но это очень * лучшее введение в Bash: http://mywiki.wooledge.org/BashGuide. – Telemachus

+0

большое спасибо. –

2
#!/bin/bash 
echo 'Input 10 integers separated by commas:' 
read line 
nums=`echo -n "$line" | sed "s/,/ /g"` 
for i in $nums; do 
    echo "$i" >> XYZ 
done 

Если Вы ввели 9,8,7,6,5,4,3,2,1,0, те числа будут добавлены к t он XYZ файл, каждый в новой строке.

+1

Благодарю вас за помощь. –

1

чтения 10 (или менее, или более) целых чисел в массив, выход не больше, чем первые 10:

read -p '10 integers please: ' -a number 
IFS=, 
echo "${number[*]:0:10}" >> XYZ 

Входной сигнал:

1 2 3 4 5 6 7 8 9 0 

выход, разделенные запятой:

1,2,3,4,5,6,7,8,9,0 
+0

Благодарим за помощь. –

Смежные вопросы