Linux

如果在 crontab 作業中聲明意外行為,則 bash

  • April 3, 2021

這是腳本

bash --version | head -n1
if [ "$1" == "now"  ]
then
   echo if now
   execut job
else
   echo else "_"$1"_"  # make sure we are not picking any spaces
   if [ condition  ]
   then
   execut something else
   fi
fi

./script now
if now

如果從互動式外殼執行,則按預期工作。但是,如果從 cron as 呼叫,則 if 轉到 else 塊

* * * * *   root    /home/user/./script now >> /tmp/log
cat /tmp/log
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
else _now_

與“-eq”相同。

我是不是因為還沒有吃早餐而錯過了一些非常簡單的事情?

執行 Ubuntu 14.04LTS。

因為語法只有一個相等:[ $a = $b ]

if [ ! $a = $b ]; then     #with space in condition and need instruction between then and fi, else doesn't works
...Script to execute...
elif [ ! $a = $c ]; then
...Script to execute...
else
...Script to execute...
fi     

有條件的 sh 列表

[ $a = $b ] && return 1 || return 0        conditionnal alternative format
if [ $a = $b -o $b = $c ]          -o mean OR
if [ $a = $b -a $b = $c ]          -a mean AND
if [ $a = $b -o $b = $c ] || [ $a = $b -a $a = $c ] multiple conditionnal or
if [ $a = $b -o $b = $c ] && [ $a = $b -a $a = $c ] multiple conditionnal and
if [ -z $a ]                       is empty or null
if [ ! -z $a ]                     not equal to ""
if [ -n $a ]                       is not empty or null
if [ $a -eq $b ]                   equal (numeric)
if [ $a -ne $b ]                   not equal (numeric)
if [ $a -gt $b ]                   greater than (numeric)
if [ $a -ge $b ]                   greater or equal than (numeric)
if [ $a -lt $b ]                   lower than (numeric)
if [ $a -le $b ]                   lower or equal than (numeric)
if [ -d $a ]                       is a directory  
if [ -e $a ]                       file exist  
if [ -f $a ]                       is a file
if [ -g $a ]                       is group allowed for the file
if [ -r $a ]                       is readable 
if [ -s $a ]                       file is not 0kb
if [ -u $a ]                       is user allowed for file
if [ -w $a ]                       is writable
if [ -x $a ]                       is executable

更多關於 bash

if [[ "$a" =~ "$b" ]]              match (reg exp)
if [[ $a == *$b* ]]                match (glob)
if [ "${a/$b}" = $a ]              match (string)
if [ -z "${a##*$b*}" ]             match (string, work with dropbox !)
if [ ${a/$b} = $a ]                match (string)

引用自:https://serverfault.com/questions/734202