解決linux shell用crontab定時器執行的腳本結果和手動執行腳本的結果不一致(比較字符串相等‘=’ ‘==’)


原腳本代碼

#!/bin/bash

cd ~/home/work/hours

RESP=`git pull`

if [ "$RESP" == "Already up-to-date." ];then

echo "already up-to-date" >> ~/home/logs/deploy.log

else

echo "no already, start redeploy server" >> ~/home/logs/deploy.log

sh ~/home/bin/deploy.sh >> ~/home/logs/detail.log 2>&1

fi

手動執行腳本結果和預想的一致


結果

但是加入crontab定時任務后,執行的結果卻是錯誤的。


原因

這是因為if里的比較字符串用了==,這個比較符合在bash里是可以用的,但是在大部分的shell中都不能用,比如/bin/sh,
如果將此腳本的頭部聲明成#!/bin/sh,那么這段代碼手動執行也是無法執行的


修正后的代碼

#!/bin/sh

cd ~/home/work/hours

RESP=`git pull`

if [ "$RESP" = "Already up-to-date." ];then

echo "already up-to-date" >> ~/home/logs/deploy.log

else

echo "no already, start redeploy server" >> ~/home/logs/deploy.log

sh ~/home/bin/deploy.sh >> ~/home/logs/detail.log 2>&1

fi

總結

1.腳本頭部聲明用#!/bin/sh,因為這個shell符合posix標准。
2.比較字符串相等使用=而不是使用==


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM