我想在一行if/else条件下得到以下内容的等价物。
$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=`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那么,如何将上述代码的其他部分包含到命令中呢?谢谢你提前提供帮助。
发布于 2013-08-12 05:26:46
看来你走在正确的轨道上。您只需要在";“之后添加after语句。另外,我会用分号将第一行和第二行分开,而不是用"&&“连接它。
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时,您使用了回勾"`“而不是单引号"'”,这可能会导致问题。
发布于 2018-12-23 01:08:41
概括其他答案,供一般使用:
多行if...then语句
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 )的事情也是如此。不过,在那个时候,你会更多地进入不那么紧凑,多行的东西无论如何。
发布于 2013-08-12 05:38:59
这不是问题的直接答案,但你可以直接使用OR-操作符。
( 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."https://stackoverflow.com/questions/18179915
复制相似问题