惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
Scott Helme
Scott Helme
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
C
Cybersecurity and Infrastructure Security Agency CISA
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
J
Java Code Geeks
U
Unit 42
The GitHub Blog
The GitHub Blog
H
Help Net Security
T
Tenable Blog
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
Spread Privacy
Spread Privacy
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
L
Lohrmann on Cybersecurity
T
Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
I
InfoQ
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
L
LINUX DO - 最新话题
K
Kaspersky official blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threat Research - Cisco Blogs
C
Check Point Blog
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
Y
Y Combinator Blog
N
News | PayPal Newsroom
M
MIT News - Artificial intelligence
Latest news
Latest news
H
Hacker News: Front Page
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
I
Intezer
爱范儿
爱范儿
F
Fortinet All Blogs
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes

Bash

Linux bash 脚本监控和重启一个守护进程 - V2EX 有个脚本代码的问题 Bash Script 代码比较,你认为哪个更加容易理解? 有使用 kitty 当日常终端的老哥吗? - V2EX 在输入命令时,自动调用 fzf 进行模糊匹配 使用 shell 的 bash -c "functions"时,是不是所有相关的函数都得声明出来? bash-completor:声明式编写 Bash 补全脚本 - V2EX sudo 改用 pkexec 的问题 - V2EX sed 如何查找替换反斜杠 - V2EX lobash 发布 v0.5.0 版本 - V2EX 为什么这样写无法连接(join)数组各项? - V2EX 如何使用 awk 打印 nginx 404 日志的目录 - V2EX 请教一下,怎么把向终端输入的内容重定向一份到文件? - V2EX 请教一下 shell 里使用 jq 处理 json 应该怎么写 - V2EX 求一个 wsl2 ubuntu20.04 的默认 /etc/bash.bashrc - V2EX 如何让 bash 的补全 popup 显示 - V2EX 如何去除 Bash variable expansion 后加的单引号? - V2EX 初学者写了个 bash 脚本,求大佬点评 - V2EX tar 使用管道的困惑 - V2EX 如何获取命令标准输出到变量里并保留颜色?或者能不能一边输出一边赋值或判断。 - V2EX 请问如何在 alias 命令里传递参数? - V2EX Bash 下如何优雅地临时在后台运行程序并易于管理? - V2EX shell tr -cd 匹配字符串问题 - V2EX shell 中的 import 能不能支持 as 或 alias 类似功能 - V2EX Shell 多个文本间隔追加的方法 - V2EX 生产服务器集群被黑了,帮看看这个脚本 - V2EX 如何实现一个符合规范的 shell? - V2EX 请教下如何检测文件是否存在 - V2EX bash 里面有 io 多路复用吗? - V2EX 闲的蛋疼,用 shell 写了个拓扑排序。。。 - V2EX echo '1 2'|awk "{print $2}"的输出为什么是 1 2 - V2EX Shell 中冒号变成了斜线 - V2EX 大家觉得 shell 如何呢? - V2EX 如何让 ls 默认带--group-directories-first 选项 - V2EX shell 脚本用 expect 输入密码,密码带有{}导致 expect 报错 - V2EX 询问一个正则表达式,请大家帮忙 - V2EX 请教一个 bash 的问题 - V2EX 请教 Shell 空字符串数组的问题 - V2EX 统计一下,如果你在用 bash,用什么版本号的 bash? - V2EX sh 可以运行后执行一段脚本吗? bash 是可以的。 - V2EX bash shell history search - V2EX Shell 给变量的赋值里带 $ 要怎么写? - V2EX [求助] shell 处理 yaml - V2EX 今天想合并文件写出个递归。。。 - V2EX 啊,我中毒了 - V2EX 寻一段 shell 来实现自动填写 ssh 登录密码 - V2EX 秀一下原生的 “终端.app”(bash) - V2EX # [求助] 用 curl 抓取一个网站,网站有很多分页,但不论怎么指 page=[2-100],抓取的都只是 page=1 的内容... - V2EX 请问这段 shell 代码有设么问题吗 - V2EX
shell 比较浮点数大小的问题,顺便吐槽以下 shell - V2EX
OldCarMan · 2023-03-13 · via Bash

这是一个创建于 1189 天前的主题,其中的信息可能已经有所发展或是发生改变。

平时比较少写 shell ,最近因为需要,写 shell 时,发现 shell 的语法真的让人头大,比如简单的比较两个浮点数大小:

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
都有问题(都输出 false),常用的>,<,gt,lt 又没办法直接比较浮点数大小,简直了😂。

PS:另外用 vim 写 shell 时经常性遇到空格之类的问题,大佬们平时是不是用 shell 比较少,是用 python 或 lua 较多吗?

第 1 条附言  ·  2023 年 3 月 14 日

总结一下,平时写shell时(linux运行环境),浮点数比较的几种方式:
  • 使用 #1 楼说的 awk方式,自带。
  • 使用 #15 楼说的 用python,不过我看我的centos(8.5)默认没自带,需要额外安装。
  • 使用 #16 楼说的 perl方式,自带。
  • bc库,也就是我描述里说的那种,我系统也没有自带,需要额外安装bc库。
startisan

1

startisan      2023 年 3 月 13 日

OP 方式 1 输出 true 的 echo 拼写错了。

我来补充个方式 3 ,个人更喜欢用这个,有时候数据本来就要用 awk 获取,正好 awk 就能比较:
echo "$a" "$b" | awk '{if ($1 < $2) pring "false"; else print "true"}'

Donahue

2

Donahue      2023 年 3 月 13 日

用了 linux 4 年多了,还不会 shell, 需要的时候才查...
实在记不住这些,不常用,语法规则又那么奇怪

OldCarMan

3

OldCarMan      2023 年 3 月 13 日

@startisan 是的,刚刚手打错字了,好的,谢谢大佬。
@是啊,语法太难用了。
刚刚在服务器重新跑了下,发现是我用 tee 命令时,有些代码片段“被吃掉了”的缘故:

不好意思,个人粗心,让大家费心了。

OldCarMan

4

OldCarMan      2023 年 3 月 13 日

不过,shell 实在一言难尽,最基本的浮点比较,也必须安装一个 bc 库才能用。

Rache1

5

Rache1      2023 年 3 月 13 日

😂 我都是用 php 写,有时候需要调用 shell ,就用内置的函数执行 shell 命令。

OldCarMan

7

OldCarMan      2023 年 3 月 13 日

我上面#4 说错了,@startisan 这种更好使,而且不需要安装 bc 库

OldCarMan

8

OldCarMan      2023 年 3 月 13 日

@Rache1 嗯嗯,脚本写的很少,之前就用 python 写过一点数据同步的,你后端如果也是 php 开发的,用 php 就够了。不过我还是不大想安装太多额外的库+业务不复杂,所以直接使用 shell 。

churchmice

9

churchmice      2023 年 3 月 13 日

你具体展开说说 shell 碰到空格问题是啥问题
你只要理解了 [ 其实也是一个命令,就不会有这么多疑惑了
which [
看一下就知道了
做事要理解原理

yingqiuQAQ

11

yingqiuQAQ      2023 年 3 月 13 日

属于同是天涯沦落人了。。。 上次写了个内存查询 top -n 1 | grep xxx | awk '{mem_percent += $10} END {print mem_percent}' ,结果值是小数。 用 -gt 判断报错了,裂开来。

sadfQED2

12

sadfQED2      2023 年 3 月 13 日 via Android

@Donahue +1 ,shell 语法永远记不住,我一般都是通过 shell 套一个 python

crysislinux

13

crysislinux      2023 年 3 月 13 日 via Android

这辈子是搞不清 shell 了。之前写了个要长期运行的 bash script ,老是有内存泄露,百思不得其解,最后换了 nodejs 用同样的逻辑写就好了。。

idontnowhat2say

14

idontnowhat2say      2023 年 3 月 13 日

最佳实践是把 shell 当胶水语言用,用来粘合命令,你这种情况应该用 Python 的。

idontnowhat2say

15

idontnowhat2say      2023 年 3 月 13 日

```
#!/bin/bash
a=0.1
b=0.01
python -c "print($a > $b)"
```

Python 在 Linux 发行版上都自带的,你这需求就三行搞定。

fzinfz

16

fzinfz      2023 年 3 月 13 日

来 2 个 perl 版:
perl -e "print $a > $b ? qq(True\n) : qq(False\n);"
perl -e "exit($a > $b ? 0 : 1);" && echo "True" || echo "False"

OldCarMan

17

OldCarMan      2023 年 3 月 14 日

@churchmice 谢谢大佬指教,确实如你所说,shell 这方面我确实没去深入了解它的语法,主要平时很少用它,用到时才去写,空格主要是在 vim 上写时,不小心敲多了一个或少一个空格都会报错(习惯了其他语言对这方面没有那么高的要求,另外还有 idea 工作环境),你说得对,凡事从原理出发去学习。
@yingqiuQAQ 是啊,自带基本只能做整数判断,v 友说的,或者我上面说的都要依赖其他库,不过大部分 linux 都带有了。除了那个 bc 库
@crysislinux 主要是有时不好调试,复杂业务真不适合用它来做,如 v 友所说用来做胶水层比较好
@idontnowhat2say 确实。
@fzinfz 谢谢指教,新方式 get ✔

aloxaf

18

aloxaf      2023 年 3 月 24 日

说真的,如果不需要考虑可移植性,写 zsh 脚本更好,很多地方比 bash 顺手多了……

> (( 0.1 > 0.01)) && echo true || echo false
false
> echo $(( 0.1 + 0.01 ))
0.11

OldCarMan

19

OldCarMan      2023 年 3 月 25 日

@aloxaf 是的,只可惜,兼容性往往是一个重要的需求,当然对于那种有一定规模的脚本来说,如果引用到第三方库之类的,一般也会在脚本里声明和检测的,所以个人觉得看需求和业务量。