2013-12-16 164 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 

但我multipl(){ME =「*」}不工作

你h是否爲此提供任何解決方案?

+0

星號('*')字符可能會被展開。檢查你的簡單/雙引號。並使用'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