将 here-string BC 计算的输出存储到变量中以进行错误检查
Storing output of here-string BC calculation into a variable for error-checking
我的学校作业是创建一个脚本,该脚本可以使用运算顺序计算任意长度的数学方程式。我在这方面遇到了一些麻烦,最终发现了 here-strings。脚本的最大问题似乎是错误检查。
我尝试使用 $? 检查 bc 的输出,但无论是成功还是失败,它都是 0。作为回应,我现在尝试将 here-string 的输出存储到一个变量中,然后我将使用正则表达式检查输出是否以数字开头。这是我希望存储在变量中的一段代码,后面是我的脚本的其余部分。
#!/bin/bash
set -f
#the here-string bc command I wish to store output into variable
cat << EOF | bc
scale=2
$*
EOF
read -p "Make another calculation?" response
while [ $response = "y" ];do
read -p "Enter NUMBER OPERATOR NUMBER" calc1
cat << EOF | bc
scale=2
$calc1
EOF
read -p "Make another calculation?" response
done
~
这应该可以解决问题:
#!/bin/sh
while read -p "Make another calculation? " response; [ "$response" = y ]; do
read -p "Enter NUMBER OPERATOR NUMBER: " calc1
result=$(bc << EOF 2>&1
scale=2
$calc1
EOF
)
case $result in
([0-9]*)
printf '%s\n' "$calc1 = $result";;
(*)
printf '%s\n' "Error, exiting"; break;;
esac
done
样本运行:
$ ./x.sh
Make another calculation? y
Enter NUMBER OPERATOR NUMBER: 5+5
5+5 = 10
Make another calculation? y
Enter NUMBER OPERATOR NUMBER: 1/0
Error, exiting
请注意,您可以在没有像这样的此处文档的情况下执行此操作:
result=$(echo "scale=2; $calc1" | bc 2>&1)
我的学校作业是创建一个脚本,该脚本可以使用运算顺序计算任意长度的数学方程式。我在这方面遇到了一些麻烦,最终发现了 here-strings。脚本的最大问题似乎是错误检查。 我尝试使用 $? 检查 bc 的输出,但无论是成功还是失败,它都是 0。作为回应,我现在尝试将 here-string 的输出存储到一个变量中,然后我将使用正则表达式检查输出是否以数字开头。这是我希望存储在变量中的一段代码,后面是我的脚本的其余部分。
#!/bin/bash
set -f
#the here-string bc command I wish to store output into variable
cat << EOF | bc
scale=2
$*
EOF
read -p "Make another calculation?" response
while [ $response = "y" ];do
read -p "Enter NUMBER OPERATOR NUMBER" calc1
cat << EOF | bc
scale=2
$calc1
EOF
read -p "Make another calculation?" response
done
~
这应该可以解决问题:
#!/bin/sh
while read -p "Make another calculation? " response; [ "$response" = y ]; do
read -p "Enter NUMBER OPERATOR NUMBER: " calc1
result=$(bc << EOF 2>&1
scale=2
$calc1
EOF
)
case $result in
([0-9]*)
printf '%s\n' "$calc1 = $result";;
(*)
printf '%s\n' "Error, exiting"; break;;
esac
done
样本运行:
$ ./x.sh
Make another calculation? y
Enter NUMBER OPERATOR NUMBER: 5+5
5+5 = 10
Make another calculation? y
Enter NUMBER OPERATOR NUMBER: 1/0
Error, exiting
请注意,您可以在没有像这样的此处文档的情况下执行此操作:
result=$(echo "scale=2; $calc1" | bc 2>&1)