首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux脚本中的一行if/ One条件

linux脚本中的一行if/ One条件
EN

Stack Overflow用户
提问于 2013-08-12 05:13:31
回答 5查看 161.2K关注 0票数 64

我想在一行if/else条件下得到以下内容的等价物。

代码语言:javascript
复制
$maxline=`cat journald.conf | grep "#SystemMaxUse="`
if [ $maxline == "#SystemMaxUse=" ]
then
    sed 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf > journald.conf2
    mv journald.conf2 journald.conf;
else
    echo "This file has been edited. You'll need to do it manually."
fi  

我试着把这个放到一行命令中。到目前为止,除了命令的其他部分之外,我已经得到了所有这些信息。到目前为止..。

代码语言:javascript
复制
maxline=`cat journald.conf | grep "#SystemMaxUse="` && if [ $maxline == "#SystemMaxUse=" ]; then sed 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf > journald.conf2 && mv journald.conf2 journald.conf; fi

那么,如何将上述代码的其他部分包含到命令中呢?谢谢你提前提供帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-12 05:26:46

看来你走在正确的轨道上。您只需要在";“之后添加after语句。另外,我会用分号将第一行和第二行分开,而不是用"&&“连接它。

代码语言:javascript
复制
maxline='cat journald.conf | grep "#SystemMaxUse="'; if [ $maxline == "#SystemMaxUse=" ]; then sed 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf > journald.conf2 && mv journald.conf2 journald.conf; else echo "This file has been edited. You'll need to do it manually."; fi

在您的原始脚本中,在声明maxline时,您使用了回勾"`“而不是单引号"'”,这可能会导致问题。

票数 59
EN

Stack Overflow用户

发布于 2018-12-23 01:08:41

概括其他答案,供一般使用:

多行if...then语句

代码语言:javascript
复制
if [ foo ]; then
    a; b
elif [ bar ]; then
    c; d
else
    e; f
fi

单行版本

if [ foo ]; then a && b; elif [ bar ]; c && d; else e && f; fi

使用OR运算符

( foo && a && b ) || ( bar && c && d ) || e && f;

备注

请记住,AND和OR运算符计算上一次操作的结果代码是否等于true/success (0)。因此,如果自定义函数返回其他内容(或完全不返回),则在使用AND/OR速记时可能会遇到问题。在这种情况下,您可能希望用( [ a == 'EXPECTEDRESULT' ] && b )等替换类似于( [ a == 'EXPECTEDRESULT' ] && b )的东西。

还请注意,([在技术上是命令,因此它们周围需要空白。

与一组&&语句(如then a && b; else )不同,您也可以在像then $( a; b ); else这样的子subshell中运行语句,尽管这样做的效率较低。做类似于result1=$( foo; a; b ); result2=$( bar; c; d ); [ "$result1" -o "$result2" ]而不是( foo && a && b ) || ( bar && c && d )的事情也是如此。不过,在那个时候,你会更多地进入不那么紧凑,多行的东西无论如何。

票数 54
EN

Stack Overflow用户

发布于 2013-08-12 05:38:59

这不是问题的直接答案,但你可以直接使用OR-操作符。

代码语言:javascript
复制
( grep "#SystemMaxUse=" journald.conf > /dev/null && sed -i 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf ) || echo "This file has been edited. You'll need to do it manually."
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18179915

复制
相关文章

相似问题

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