
我正在編寫一個簡單的 bash 腳本來執行以下操作:
1)檢查兩個檔案(foo1和foo2)。
2) 如果 foo1 與 foo2 不同且 foo1 不為空,請發送電子郵件。
3) 如果 foo1 與 foo2 相同...或 foo1 為空...則不執行任何操作。
空白條件讓我感到困惑。我要從以下開始:
diff --brief <(sort ./foo1) <(sort ./foo2) >/dev/null
comp_value=$?
if [ $comp_value -ne 0 ]
then
mail -s "Alert" [email protected] <./alertfoo
fi
顯然這不會檢查空白內容。關於如何做到這一點有什麼想法嗎?
答案1
您可以使用測試的-s
運算子來檢查檔案是否為空,這cmp
通常是檢查檔案是否相等的最簡單方法(請注意,您可以直接在語句中使用命令,if
作為將其退出狀態與0 進行比較的更簡單的替代方案)。我保留了在比較兩個文件之前對它們進行排序的位元;如果不需要,只需直接使用這兩個文件作為cmp
.
if [ -s ./foo1 ] && ! cmp -q <(sort ./foo1) <(sort ./foo2); then
...
您可以將上面的內容讀作:「如果 ./foo1 不為空 ( [ -s ... ]
) AND ( &&
) ./foo1 和 ./foo2 的排序形式不 ( !
) 相同 ( cmp
)」。
答案2
您可以使用 -s 檢查文件是否為空:
if [[ -s $FILE ]] ; then
echo "$FILE has data."
else
echo "$FILE is empty."
fi
如果你想知道字串是否為空,請使用選項 -z 來檢查是否為空:
STRING="test"
if [[ -n "$STRING" ]]; then
echo "String is not empty"
fi
或 -n 檢查是否不為空:
STRING=""
if [[ -z "$STRING" ]]; then
echo "String is empty"
fi