2013-08-12 39 views
14

Tôi muốn có sự tương đương của các điều kiện sau trong một dòng nếu điều kiện khác.Một dòng nếu điều kiện khác trong tập lệnh shell linux

$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 

Tôi đang cố gắng đưa điều này vào một dòng lệnh. Cho đến nay tôi đã nhận được tất cả, nhưng phần khác của lệnh. Dưới đây là những gì tôi có cho đến thời điểm này ...

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 

Vậy làm cách nào để đưa phần mã trên vào lệnh của tôi? Trước tiên xin cảm ơn sự giúp đỡ của bạn.

+2

Tại sao bạn muốn làm một điều như vậy, chỉ làm cho mã của bạn không thể đọc được ... – erlc

+0

Tôi đang cố gắng để cung cấp cho ai đó một lệnh để thay đổi tệp nhật ký conf của họ nhưng cố gắng biến nó thành một thứ c & p họ chỉ có thể chạy trong thiết bị đầu cuối của họ mà không cần phải tạo ra các tệp và chmodding chúng. –

Trả lời

17

Dường như bạn đang đi đúng hướng. Bạn chỉ cần thêm câu lệnh khác sau ";" theo sau câu lệnh "then". Ngoài ra tôi sẽ chia dòng đầu tiên từ dòng thứ hai bằng dấu chấm phẩy thay vì kết hợp nó với "& &".

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 

Cũng trong tập lệnh gốc, khi khai báo số lớn nhất bạn đã sử dụng dấu chéo "` "thay vì dấu nháy đơn" '"có thể gây ra sự cố.

+0

Lệnh đó hoạt động tốt! Hình như && thay vì dấu chấm phẩy là những gì đã gây ra rắc rối. –

+0

Tuyệt vời! vui vì chúng tôi có thể làm cho nó hoạt động. – Bryan

3

Nó không phải là một câu trả lời trực tiếp cho câu hỏi nhưng bạn chỉ có thể sử dụng toán tử OR-hành

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