/ 4.sh
4.sh
 1  #!/usr/bin/bash
 2  # a*x + b
 3  
 4  function show_error(){
 5      dialog --erase-on-exit --msgbox "$1" 5 $[ ${#1} + 4 ]
 6      exit
 7  }
 8  
 9  subject=`dialog --stdout --nocancel --erase-on-exit \
10  --menu "Co policzyć?" 0 0 0 \
11      1 "Miejsce zerowe wielomianu" \
12      2 "Liczbę pi" \
13      3 "Złotą liczbę"` || exit
14  
15  case $subject in
16      1)
17          data=(`dialog --stdout --nocancel --erase-on-exit \
18          --form "[a]*x + [b] = 0" 0 0 0 \
19              "a:" 1 1 "" 1 10 10 0 \
20              "b:" 2 1 "" 2 10 10 0`) || exit
21  
22          # https://stackoverflow.com/questions/806906/how-do-i-test-if-a-variable-is-a-number-in-bash
23          for i in 0 1; do
24              n=${data[i]}
25              re='^-?[0-9]+(\.[0-9]+)?$'
26              [[ "$n" =~ $re ]] || show_error "Błędna liczba '$n'"
27          done
28  
29          a=${data[0]}
30          b=${data[1]}
31          # ax + b = 0
32          # ax = -b
33          # x = -b / a
34          echo "${a}x + $b = 0"
35          x=`bc -l <<< "$b * -1 / $a"`
36          # ciekawostka: bc nie zwraca kodu błędu nawet gdy dzieli przez zero
37          echo "x = $x"
38          ;;
39  esac