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 ...