首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何简化BASH条件语句中10 >= x >= 1所需的语法?

如何简化BASH条件语句中10 >= x >= 1所需的语法?
EN

Stack Overflow用户
提问于 2014-09-26 07:15:44
回答 2查看 44关注 0票数 0

我使用这个BASH脚本检查file.txt是否有1到10行:

代码语言:javascript
运行
复制
if [[ `wc -l file.txt | awk '{ print $1 }'` -le "10" && `wc -l file.txt | awk '{ print $1}'` -ge "2" ]]
    echo "It has between 1 and 10 lines."
fi

这段代码太冗长了。如果我对一个部分进行了更改,很容易忘记对重复的部分进行更改。

有没有办法简化语法?

EN

回答 2

Stack Overflow用户

发布于 2014-09-26 07:18:37

一种选择是使用awk完成整个操作:

代码语言:javascript
运行
复制
awk 'END{if(1<=NR&&NR<=10) print "It has between 1 and 10 lines."}' file.txt

正如in the comments (感谢rici)所指出的,您可能希望阻止awk在读取10行代码后处理文件的其余部分:

代码语言:javascript
运行
复制
awk 'NR>10{exit}END{if(1<=NR&&NR<=10) print "It has between 1 and 10 lines."}' file.txt

如果调用exitEND块仍然会被处理,因此仍然需要在if中进行这两个检查。

或者,您可以将wc -l的结果存储到bash中的一个变量中:

代码语言:javascript
运行
复制
lines=$(wc -l < file.txt)
(( 1 <= lines && lines <= 10)) && echo "It has between 1 and 10 lines."

请注意,将文件重定向到wc意味着您只获得了数字,而没有文件名。

票数 4
EN

Stack Overflow用户

发布于 2014-09-26 07:33:14

获取行数,然后根据范围界限进行检查:

代码语言:javascript
运行
复制
lc=$(wc -l < file.txt)
if (( 1 <= lc && lc <= 10 )); then
    echo "It has between 1 and 10 lines"
fi
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26049639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档