2013-10-01 4 views
1

Вот мой код: Я хочу создать временную переменную во временном каталоге. Я создаю функцию под названием read-series, которая читает целые числа до ctrl-d, а затем добавляет их в .tmp. Затем он переходит в четно-нечетный, который суммирует произведение эвенов и сумму коэффициентов. Затем вызывается сокращение для вывода значения. Более или менее. Я новичок в Bash, поэтому, пожалуйста, проясните ответы.Базовый сценарий Bash для newb

#!/bin/bash 

TMPDIR=${HOME}/tmpdir 

function readSeries() { 
    while read -p "Enter an Integer: " number ; do 
     echo $number 
    done 
    return 0; 
} >> $$.tmp 

function even-odd() { 
    # unsure of how to reference TMPDIR 
    while read $TMPDIR ; do 
     evenp=$(($1 % 2)) 
     if [ $evenp -eq 0 ] ; then # if 0 number is even 
      return 0 
     else       # if 1 number is odd 
      return 1 
     fi 
    done 
} 

function reduce() { 
    # function to take sum of odds and product of evens 
    # from lab 5 prompt 
    even-odd $input 
    cat $TMPDIR/$$.tmp | reduce 
} 

read-series 

cat $TMPDIR/$$.tmp | reduce 
+0

вам нужно будет четко указать свой код, если вы хотите получить четкие ответы. Например, где '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Изучение результата добавления 'set -x' в верхней части вашего кода будет большой помощью для отладки вашего собственного кода. Удачи. – shellter

ответ

2

Я думаю, что будет делать для вас

#!/bin/bash 

TMPDIR=${HOME}/tmpdir 

function readSeries() { 
    while read -p "Enter an Integer: " number ; do 
     # 
     # Using Regular Expression to ensure that value is Integer 
     # If value is not integer then we return out from function 
     # and won't promt again to enter 
     # 
     if ! [[ "$number" =~ ^[0-9]+$ ]] ; 
      then return 0; 
     fi 
     echo $number 
    done 
    return 0; 
} >> $$.tmp 

#function evenOdd() { 
    # don't need that 
#} 

function reduce() { 
    # function to take sum of odds and product of evens 
    sumOfOdds=0; 
    productOfEvens=0; 

    # 
    # When a shell function is on the receiving end of a pipe, 
    # standard input is read by the first command executed inside the function. 
    # USE `read` to pull that data into function 
    # Syntax : read variable_you_want_to_name 
    # 
    while read data; do 
     echo " line by line data from tmp file "$data; 
     rem=$(($data % 2)) 
     if [ $rem -eq 0 ] ; then # if 0; number is even 
      productOfEvens=$(($productOfEvens * $data)); 
     else       # if 1; number is odd 
      sumOfOdds=$(($sumOfOdds + $data)); 
     fi 
    done 

    echo " Sum of Odds : "$sumOfOdds; 
    echo " ProductOfEvens : "$productOfEvens; 
} 

readSeries 

#cat $TMPDIR/$$.tmp 
cat $TMPDIR/$$.tmp | reduce 

ИЛИ если хотите более конкретный ответ здесь на SO, вы должны быть ясно, в вашем коде, как @shellter указывают.

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