all*_*hie 0 linux bash shell awk sed
我的bash脚本中有以下命令:
printf '\n"runtime": %s' "$(bc -l <<<"($a - $b)")"
Run Code Online (Sandbox Code Playgroud)
我需要在大约100台服务器上运行此脚本,但发现其中有几台bc未安装。我不是管理员,无法安装bc在丢失的服务器上。
在那种情况下,我可以使用什么替代方法执行相同的计算?请让我知道新命令的外观
如果只处理整数,则可以使用bash的算术扩展:
printf '\n"runtime": %s' $((a - b))
Run Code Online (Sandbox Code Playgroud)
请注意,这确实假设您有可用的bash(如您所指示的那样)。如果只有精简版的Bourne shell(/ bin / sh),则无法进行算术扩展。
如果您需要一个适用于浮点运算的解决方案,您可以随时使用 Awk。
awk -v a="$a" -v b="$b" 'BEGIN { printf "\n\"runtime\": %s", a-b }' </dev/null
Run Code Online (Sandbox Code Playgroud)
当您想使用 Awk 但没有要循环的行文件时,将代码放在一个BEGIN块中并重定向输入/dev/null是一种常见的解决方法,这正是它的真正设计目的。