59

次の等価物を1行の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  

これを1行のコマンドに入れようとしています。これまでのところ、コマンドの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; fi

では、上記のコードの else 部分をコマンドに含めるにはどうすればよいでしょうか? よろしくお願いいたします。

4

4 に答える 4

54

まるで正しい軌道に乗っているかのようです。「;」の後にelseステートメントを追加するだけです。「then」ステートメントに続きます。また、最初の行と 2 行目を「&&」で結合するのではなく、セミコロンで分割します。

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 を宣言するときに、問題を引き起こす可能性のある単一引用符 "'" の代わりにバックティック "`" を使用しました。

于 2013-08-12T05:26:46.650 に答える
5

質問に対する直接の回答ではありませんが、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."
于 2013-08-12T05:38:59.797 に答える