2013-08-12 14 views
14

/else条件の場合は、次のように1行にしたいと考えています。Linuxシェルスクリプトの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部分を含めることができますか?事前にあなたの助けをありがとう。

+2

を使用することができ、ちょうどあなたのコードが読めなくなります... – erlc

+0

ログのconfファイルを変更するコマンドを誰かに与えるが、ファイルを作成してchmoddingすることなく、端末で実行できるc&pのものにしようとする。 –

答えて

17

正しい軌道にいるかのように見えます。 ";"の後ろに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を宣言するとき、あなたの代わりに問題を引き起こす可能性がある単一引用符「'」のバックティック「`」を使用。

+0

そのコマンドは美しく機能しました!セミコロンの代わりに&&のように見えるのは、問題を引き起こしていたものでした。 –

+0

素晴らしい!私たちはそれがうまくいくことをうれしく思った。 – Bryan

3

それは私がしようとしているの質問に直接答えではないのですが、あなたはそのようなことをしたいと思うなぜあなただ​​けの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." 
関連する問題