![Shell:简单的 if 语句似乎不起作用](https://linux22.com/image/136358/Shell%EF%BC%9A%E7%AE%80%E5%8D%95%E7%9A%84%20if%20%E8%AF%AD%E5%8F%A5%E4%BC%BC%E4%B9%8E%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我写了这个 shell 脚本片段:
while inotifywait -e modify $ENV_LOCATION/*.env
do
md5sum $ENV_LOCATION/*.env > ./checksums_optwo.md5
if [ -n "$(cmp ./checksums_opone.md5 ./checksums_optwo.md5)" ]
then
gdialog --msgbox "The files are different"
md5sum $ENV_LOCATION/*.env > ./checksums_opone.md5
else
gdialog --msgbox "The files match"
fi
done
但是,我不太明白为什么gdialog
没有提示。有任何想法吗?
答案1
您gdialog
的语句的两个分支都有if
,因此只要inotifywait
以零退出状态退出,其中之一就会运行。如果正在监视的任何文件被删除(并且您没有监视删除事件),该inotifywait
命令将以非零退出状态退出。
要监视任何文件的删除和修改,请使用
inotifywait -e modify -e delete_self "$ENV_LOCATION"/*.env
比较两个文件并对cmp
结果做出反应:
if cmp -s file1 file2; then
echo 'files are the same'
else
echo 'files are different'
fi