2013-05-16 30 views
0

我想作以下if語句if語句負狀態

if (!(zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q $day)) 

所以當第一個命令不返回任何東西和第二返回true,應該執行。

如果我嘗試

if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q $day; then 
    echo ok 
fi 

話,我不能沒有出錯。它總是打印ok

問題

有人能看到我在做什麼錯?

回答

1

我能夠如何使其輸出ok的唯一途徑是zfs報告secure$days包含$day。任何其他組合(即zfs不報告secure或$ days not containing $ day`)都沒有產生任何輸出。

由於我沒有zfs做,我定義的函數:

function zfs() { echo secure ; } ; days=1; day=1; if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi 
function zfs() { echo securX ; } ; days=1; day=1; if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi 
function zfs() { echo securX ; } ; days=0; day=1; if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi 
function zfs() { echo secure ; } ; days=0; day=1;if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi 

function zfs() { echo secure ; } ; days=0; day=1; if (! (zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day")); then echo ok; fi 
function zfs() { echo securX ; } ; days=0; day=1; if (! (zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day")); then echo ok; fi 
function zfs() { echo securX ; } ; days=1; day=1; if (! (zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day")); then echo ok; fi 
function zfs() { echo secure ; } ; days=1; day=1; if (! (zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day")); then echo ok; fi 
1

這是一種解決方法,而不是一個答案,但你可以扭轉測試的意義grep本身使用-v有:

if zfs list -t snapshot -o name -H | grep -qv secure && echo $days | grep -q $day; then 
    echo ok 
fi 

雖然這不是在的情況不盡相同,其中zfs list -t snapshot -o name -H回報一無所有所有。