2013-08-12 11 views
14

Chciałbym mieć equivelant następujących w jednym wierszu, jeśli/else warunek.Jedna linia, jeśli/else warunek w skrypcie powłoki linuksowej

$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 

Próbuję umieścić to w jednym wierszu poleceń. Do tej pory dostałem to wszystko poza częścią polecenia. Oto, co mam do tej pory ...

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 

Jak mogę dołączyć do mojego polecenia kolejną część powyższego kodu? Z góry dziękuję za pomoc.

+2

Dlaczego chcesz zrobić coś takiego, po prostu sprawia, że ​​Twój kod nieczytelny ... – erlc

+0

Próbuję dać komuś polecenie zmiany pliku logu, ale próbując uczynić z niego coś typu c & p, którą mogą uruchomić w swoim terminalu, bez konieczności brania udziału w tworzeniu plików i zastępowaniu ich. –

Odpowiedz

17

Wygląda na to, że jesteś na dobrej drodze. Po prostu musisz dodać instrukcję else po ";" po stwierdzeniu "wtedy". Również podzieliłbym pierwszą linię z drugiej linii średnikiem, zamiast połączyć go z "& &".

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 

Również w oryginalnym scenariuszem, podczas deklarowania MaXLine użyłeś powrotem-kleszcze „`”zamiast pojedyncze cudzysłowy„'”, które mogą powodować problemy.

+0

To polecenie działało pięknie! Wygląda na to, że && zamiast średnika było przyczyną problemów. –

+0

Świetnie! cieszę się, że możemy to załatwić. – Bryan

3

Nie jest to bezpośrednia odpowiedź na pytanie, ale może po prostu użyć OR-Operator

(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."