Jos*_*rot 19 linux shell if-statement
如果/ else条件,我想在一行中包含以下的equivelant.
$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
Run Code Online (Sandbox Code Playgroud)
我试图把它变成一行命令.到目前为止,除了命令的其他部分,我已经完成了所有操作.这是我到目前为止所拥有的......
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
Run Code Online (Sandbox Code Playgroud)
那么如何将上述代码的else部分包含在我的命令中呢?提前谢谢你的帮助.
Bry*_*yan 25
看起来你走在正确的轨道上.你只需要在";"之后添加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
Run Code Online (Sandbox Code Playgroud)
同样在您的原始脚本中,当声明maxline时,您使用了反向标记""而不是单引号"'",这可能会导致问题.
这不是问题的直接答案,但您可以使用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."
Run Code Online (Sandbox Code Playgroud)
总结其他答案,供一般使用:
if [ foo ]; then
a; b
elif [ bar ]; then
c; d
else
e; f
fi
Run Code Online (Sandbox Code Playgroud)
if [ foo ]; then a && b; elif [ bar ]; c && d; else e && f; fi
( foo && a && b ) || ( bar && c && d ) || e && f;
请记住,AND和OR运算符会评估前一个运算的结果代码是否等于true / success(0)。因此,如果自定义函数返回其他内容(或根本不返回任何内容),则AND / OR速记可能会出现问题。在这种情况下,您可能希望将替换( a && b )为( [ a == 'EXPECTEDRESULT' ] && b ),等等。
还要注意,(和[从技术上来说是命令,因此在它们周围需要空格。
除了&&这样的语句组then a && b; else,您也可以在子外壳程序中运行语句,如then $( a; b ); else,尽管这样效率较低。做类似result1=$( foo; a; b ); result2=$( bar; c; d ); [ "$result1" -o "$result2" ]而不是的事情也是如此( foo && a && b ) || ( bar && c && d )。尽管到那时,无论如何,您将更多地进入不太紧凑的多行内容。