2013-12-16 5 views
0

У меня была задание в моем университетеУстановленное значение var с ловушкой

Помогло ли мне?

мне нужно изменить метод использования ловушки и добавить или перемножить, используя хвост -n 0 -f

мой код генератора:

rm info.txt 
touch info.txt && chmod u+x info.txt 

while true; 
do 
    read line 
    case $line in 
    "quit") 
     echo $line >> info.txt 
     exit 
    ;; 
    "+") 
     kill -USR1 $(cat .pid) 
    ;; 
    "*") 
     kill -USR2 $(cat .pid) 
    ;; 
    *) 
     echo $line >> info.txt 
    ;; 
    esac 
done 

мой код hundler:

echo $$ > .pid 

ME="+"; 
value=1; 

multipl(){ 
    ME="*" 
} 
plus(){ 
    ME="+" 
} 

trap 'multipl' USR1 
trap 'plus' USR2 

(tail -n 0 -f info.txt) | while true 
do 
    read line 
    case $line in 
    "quit") 
     echo "quit" 
     killall tail 
     exit 
    ;; 
    *) 
     if (echo "$line" | grep -Eq "^-?[0-9]+$") 
     then 
      if [[ "$ME" == "+" ]] 
      then 
       let value=$value+$line 
      fi 
      if [[ "$ME" == "*" ]] 
      then 
       let value=$value*$line 
      fi 
      echo $value 
     else 
      echo "error" 
      killall tail 
      exit 
     fi 
    esac 

    sleep 1 
done 

, но мой множитель() {ME = "*"} не работает

у вас есть ave любые решения для этого?

+0

Возможно, что символ char ('*') будет расширен. Проверьте свою простую/двойную кавычку. И используйте 'set -x', чтобы узнать, что произошло при запуске скрипта. – jml

ответ

1

Эта линия проблема:

let value=$value*$line 

Потому что это неупомянуто, то * будет расширен в список файлов в текущем каталоге - http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

Вы хотите этого

let "value=$value*$line" 

или использовать арифметический синтаксис типа bash

((value *= line)) 

«Не работает» совершенно бесполезно, как отчет о проблеме.

Вы цитируете «$ ME»? Рассмотрим следующее:

$ ls 
file1 file2 file3 
$ multipl(){ 
    ME="*" 
} 
$ multipl 
$ echo "$ME" 
* 
$ echo $ME 
file1 file2 file3 
+0

Мои функции: multipl() { ME = "*" } plus() { ME = "+" } не работает, другие работы ... – rash2x

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