Надеюсь, что кто-то здесь может помочь мне с bash-скриптом, который запускается только при определенных условиях.

#!/bin/bash
TODAY=`date +%Y-%m-%d`
MODE=$1
if  [ $(date '+%A') == "Sunday" ] || [ $(date '+%d') == "01" ] || [ $MODE == 'Complete']
then
    echo "Running backup as it is the either a Sunday the 1st of the Month or the script was called with the paramater 'Complete'."
    /usr/bin/7z a -t7z -m0=lzma -mx=9 /external-storage/snapshots/snapshot-complete-"$TODAY"-public_html.7z /local-storage/www/public_html > /dev/null
fi

Когда я пытаюсь запустить выше, я получаю ошибку.

line 4: [: missing `]'

Любые советы будут оценены, спасибо заранее.

2 ответа2

1

] Особенный и должен быть сам по себе. Вам не хватает места перед последним.

Итак, строка 4 должна быть:

if  [ $(date '+%A') == "Sunday" ] || [ $(date '+%d') == "01" ] || [ $MODE == 'Complete' ]
1

Я бы попробовал вот так:

#!/bin/bash
TODAY=`date +%Y-%m-%d`
MODE=$1
DAY=$(date '+%A')
DATE=$(date '+%d')
if  [[  ($DAY == "Sunday")   ||  ($DATE == "01")  ||  ($MODE == "Complete") ]] ; then
    echo "Running backup as it is the either a Sunday the 1st of the Month or the script
    was called with the parameter 'Complete'."
 ...................
fi

Некоторые скобки приведены только для ясности.

Но вы должны быть осторожны, ваш тест не отражает то, что подтверждается вашим утверждением эха. Тест оценивается как положительный для ЛЮБОГО воскресенья, а не только первого числа месяца.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .