gpt4 book ai didi

Bash 脚本和 bc

转载 作者:行者123 更新时间:2023-11-29 08:50:34 27 4
gpt4 key购买 nike

我正在尝试编写一个 bash 脚本,我需要做一些 float 学运算。基本上我想做这样的事情:

NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
fi

我遇到的问题是 $?倾向于保留 echo 程序的输出而不是 bc 调用。有没有办法将 bc 程序的输出保存到变量中?

编辑:

感谢您的快速回复。这是看待问题的另一种方式。假设我稍微修改了脚本,使其看起来像这样:

#!/bin/bash
NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
exit
fi
echo "$NUM"

当用户输入一个普通的浮点值时,它工作正常:

bash script.sh 1.0

输出:

.1000000000000000000000000

但是,当用户输入错误的值时,脚本无法恢复:

bash script.sh 1.0a

输出:

(standard_in) 1: parse error

我要做的是让它优雅地退出。

最佳答案

我看不出有什么不妥。 $NUM 应该保存你的 bc 命令结果

见:

NUM=$(echo "scale=25;$1/10" | bc)
echo "\$? is $?"
echo "NUM is $NUM"

输出

$ ./shell.sh 10
$? is 0
NUM is 1.0000000000000000000000000

另一种方法是使用 awk

NUM=$(awk -vinput="$1" 'BEGIN{printf "%.25f", input/10 }')
echo "\$? is $?"
echo "NUM is $NUM"

另一种方法是在传递给 bc 之前检查“$1”。例如

shopt -s extglob
input="$1"
case "$input" in
+([0-9.]))
IFS="."; set -- $input
if [ $# -ne 2 ];then
echo "bad decimal"
else
NUM=$(echo "scale=25;$1/10" | bc )
echo "$NUM"
fi
esac

您不必再从 bc 检查 $?

关于Bash 脚本和 bc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2331936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com