Загрузка данных


cat > ~/bin/calc.sh << 'EOF'
#!/bin/bash
res=$1
shift

# Если аргумент один и содержит выражение — вычислить его целиком
if [ $# -eq 0 ]; then
  echo $((res))
  exit 0
fi

while [ $# -ge 2 ] ; do
  res=$(($res$1$2))
  shift 2
done
echo $res
EOF

chmod +x ~/bin/calc.sh




~/bin/calc.sh 1+2      # должно вывести 3
~/bin/calc.sh 1 + 2 \* 3   # 9






cat > ~/bin/sum.sh << 'EOF'
#!/bin/bash
if [ $# -lt 2 ]; then
  echo "Usage: sum.sh +|* arguments ..."
  exit 1
fi

op=$1
shift

case $op in
  +)
    sum=0
    for arg in "$@"; do
      sum=$((sum + arg))
    done
    echo $sum
    ;;
  \*)
    prod=1
    for arg in "$@"; do
      prod=$((prod * arg))
    done
    echo $prod
    ;;
  *)
    echo "Usage: sum.sh +|* arguments ..."
    exit 1
    ;;
esac
EOF

chmod +x ~/bin/sum.sh



~/bin/sum.sh + 4 8 3       # 15
~/bin/sum.sh \* 4 2 3      # 24
~/bin/sum.sh                # Usage: sum.sh +|* arguments ...
~/bin/sum.sh - 1 2          # Usage: sum.sh +|* arguments ...