a=0.1
b=0.01
if (( $(echo "$a > $b" |bc -l) )); then
ehco "true"
else
echo "false"
fi
a=0.1
b=0.01
if [ $(echo "$a > $b"|bc) -eq 1 ];then
echo "true"
else
echo "false"
fi
1
startisan 2023-03-13 09:43:01 +08:00
OP 方式 1 输出 true 的 echo 拼写错了。
我来补充个方式 3 ,个人更喜欢用这个,有时候数据本来就要用 awk 获取,正好 awk 就能比较: echo "$a" "$b" | awk '{if ($1 < $2) pring "false"; else print "true"}' |
2
Donahue 2023-03-13 09:43:51 +08:00
用了 linux 4 年多了,还不会 shell, 需要的时候才查...
实在记不住这些,不常用,语法规则又那么奇怪 |
3
OldCarMan OP @startisan 是的,刚刚手打错字了,好的,谢谢大佬。
@是啊,语法太难用了。 刚刚在服务器重新跑了下,发现是我用 tee 命令时,有些代码片段“被吃掉了”的缘故: 不好意思,个人粗心,让大家费心了。 |
4
OldCarMan OP 不过,shell 实在一言难尽,最基本的浮点比较,也必须安装一个 bc 库才能用。
|
5
Rache1 2023-03-13 09:56:17 +08:00
😂 我都是用 php 写,有时候需要调用 shell ,就用内置的函数执行 shell 命令。
|
7
OldCarMan OP 我上面#4 说错了,@startisan 这种更好使,而且不需要安装 bc 库
|
8
OldCarMan OP @Rache1 嗯嗯,脚本写的很少,之前就用 python 写过一点数据同步的,你后端如果也是 php 开发的,用 php 就够了。不过我还是不大想安装太多额外的库+业务不复杂,所以直接使用 shell 。
|
9
churchmice 2023-03-13 10:07:37 +08:00
你具体展开说说 shell 碰到空格问题是啥问题
你只要理解了 [ 其实也是一个命令,就不会有这么多疑惑了 which [ 看一下就知道了 做事要理解原理 |
11
yingqiuQAQ 2023-03-13 10:31:03 +08:00
属于同是天涯沦落人了。。。 上次写了个内存查询 top -n 1 | grep xxx | awk '{mem_percent += $10} END {print mem_percent}' ,结果值是小数。 用 -gt 判断报错了,裂开来。
|
12
sadfQED2 2023-03-13 11:13:27 +08:00 via Android
@Donahue +1 ,shell 语法永远记不住,我一般都是通过 shell 套一个 python
|
13
crysislinux 2023-03-13 11:35:12 +08:00 via Android
这辈子是搞不清 shell 了。之前写了个要长期运行的 bash script ,老是有内存泄露,百思不得其解,最后换了 nodejs 用同样的逻辑写就好了。。
|
14
idontnowhat2say 2023-03-13 12:20:14 +08:00
最佳实践是把 shell 当胶水语言用,用来粘合命令,你这种情况应该用 Python 的。
|
15
idontnowhat2say 2023-03-13 12:29:36 +08:00
```
#!/bin/bash a=0.1 b=0.01 python -c "print($a > $b)" ``` Python 在 Linux 发行版上都自带的,你这需求就三行搞定。 |
16
fzinfz 2023-03-13 19:47:38 +08:00
来 2 个 perl 版:
perl -e "print $a > $b ? qq(True\n) : qq(False\n);" perl -e "exit($a > $b ? 0 : 1);" && echo "True" || echo "False" |
17
OldCarMan OP @churchmice 谢谢大佬指教,确实如你所说,shell 这方面我确实没去深入了解它的语法,主要平时很少用它,用到时才去写,空格主要是在 vim 上写时,不小心敲多了一个或少一个空格都会报错(习惯了其他语言对这方面没有那么高的要求,另外还有 idea 工作环境),你说得对,凡事从原理出发去学习。
@yingqiuQAQ 是啊,自带基本只能做整数判断,v 友说的,或者我上面说的都要依赖其他库,不过大部分 linux 都带有了。除了那个 bc 库 @crysislinux 主要是有时不好调试,复杂业务真不适合用它来做,如 v 友所说用来做胶水层比较好 @idontnowhat2say 确实。 @fzinfz 谢谢指教,新方式 get ✔ |
18
aloxaf 2023-03-24 23:12:24 +08:00
说真的,如果不需要考虑可移植性,写 zsh 脚本更好,很多地方比 bash 顺手多了……
> (( 0.1 > 0.01)) && echo true || echo false false > echo $(( 0.1 + 0.01 )) 0.11 |