Перейти до

Помогите со скриптом


Рекомендованные сообщения

Всем привет! Есть строка кода

 

 

 

BACKUP_NAME=`expr match "${TARGET_DIR%%/}" '.*/\(.*\)'`
 

 

вероятнее всего написанная для Debian. Не работает у меня во FreeBSD, пишет expr: syntax error 

Помогите правильно параметры прописать. 

Ссылка на сообщение
Поделиться на других сайтах

эта строка вообще ни о чем.

 

<режим телепата>

вам надо поставить из портов shells/bash

и вставить в первую строчку скрипта 

#!/usr/local/bin/bash

 

</режим телепата>

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

 

эта строка вообще ни о чем.

 

<режим телепата>

вам надо поставить из портов shells/bash

и вставить в первую строчку скрипта 

#!/usr/local/bin/bash

 

</режим телепата>

Вот скрипт полностью:

 

 

 

 

 

 
#!/usr/local/bin/bash
#
# Script for do automatic backups files and dbs (mysql)
# to Selectel Cloud Storage (http://selectel.ru/services/cloud-storage/)
#
# version: 1.0
#
# Authors:
# - Konstantin Kapustin <sirkonst@gmail.com>
#


# ------- Settings -------
# Selectel Storage settings
SS_USER="23569"  # Storage user
SS_PWD="fqgh568"  # Storage password
SS_CONTAINER="billing_backups"  # Storage container where we put backup files


# Backup settings
TARGET_DIR="/var/backups"  # What to backup
#BACKUP_NAME="mysite"  # Name for backup, default the last folder name in target
BACKUP_NAME=`expr match "${TARGET_DIR%%/}" '.*/\(.*\)'`
BACKUP_DIR="/var/backups/$BACKUP_NAME"  # Where our backup will be placed
EXCLUDE_LIST="\
*~
*.bak
*.old
*.log
.git/
.svn/
"
# Mysql backup settings
DB_NAME="lib"  # Database name, set __ALL__ for backup all dbs or empty for disable backup
DB_USER="adminen"
DB_PWD="digireot"
DB_HOST="localhost"
DB_PORT="3306"


EMAIL="digireot@gmail.com"  # Email for send log, set empty if don't want seng log
EMAIL_ONLY_ON_ERROR="no"  # Send a email only if there was something strange (yes:no)


DELETE_LOG="yes"  # remove log after complite? (yes:no)
DELETE_BACKUPS_AFTER_UPLOAD="no"  # remove backups files after successful upload to Storage (yes:no)
# How long store backup in the Storage (in days)? If you set 30, uploaded file will be auto removed after 30 days.
STORAGE_EXPIRE=""


# ------- Utils -------
SUPLOAD=`which supload`
MYSQLDUMP=`which mysqldump`
BZIP=`which bzip2`
TAR=`which tar`
SENDMAIL=`which sendmail`


# ------- Checking -------
if [ -z "$SS_USER" ] || [ -z "$SS_PWD" ] || [ -z "$SS_CONTAINER" ]; then
        echo "[!] Please set Selectel Storage settings first!"
        exit 1
fi


if [ ! -d "$TARGET_DIR" ]; then
        echo "[!] Backup's target doesn't exist $TARGET_DIR!"
        exit 1
fi


if [ ! -d "$BACKUP_DIR" ]; then
        mkdir "$BACKUP_DIR"
        if [ $? -ne 0 ]; then
                echo "[!] Can not create backup dir $BACKUP_DIR!"
                exit 1
        fi
fi


if [ -n "$EMAIL" ] && [ -z "$SENDMAIL" ]; then
        echo "[!] sendmail is not installed!"
        exit 1
fi


if [ -n "$STORAGE_EXPIRE" ]; then
        if [ "$STORAGE_EXPIRE" -eq "$STORAGE_EXPIRE" ] 2>/dev/null; then
                :
        else
                echo "[!] STORAGE_EXPIRE must be a positive integer!"
                exit 1
        fi
fi


# ------- Preparation -------
TIMESTAMP=$(date +%Y-%m-%d_%Hh%Mm)
BACKUP_FILENAME="${BACKUP_NAME}_$TIMESTAMP.tar.bz2"
LOG_FILE="$BACKUP_DIR/log_$BACKUP_NAME-$TIMESTAMP.log"
declare -a _for_upload


if [ x"$DB_NAME" = "x__ALL__" ]; then
        DB_BACKUP_FILENAME="mysql_${BACKUP_NAME}_ALL_$TIMESTAMP.sql"
        DB_NAME=""
else
        if [ -z "$DB_NAME" ]; then
                DB_BACKUP_FILENAME=""
        else
                DB_BACKUP_FILENAME="mysql_${BACKUP_NAME}_${DB_NAME}_$TIMESTAMP.sql"
        fi
fi


if [ -n "$DB_BACKUP_FILENAME" ] && [ -z "$MYSQLDUMP" ]; then
        echo "[!] mysqldump is not installed!"
        exit 1
fi


# detect interective mode
if [[ -t 1 ]]; then
        IM="1"
else
        IM="0"
fi


set -o pipefail
_log() {
        while read line; do
                if [ x"$IM" == x"1" ]; then
                        echo "$line" | tee -a "$LOG_FILE"
                else
                        echo "$line" >> "$LOG_FILE"
                fi
        done
}


_error="0"


echo "$(date +%H:%M:%S) Begin backup $BACKUP_NAME" | _log


# ------- Backup files -------
echo "$(date +%H:%M:%S) Archiving files $TARGET_DIR" | _log
tar_exc=""
for line in ${EXCLUDE_LIST}; do
        tar_exc="$tar_exc --exclude '$line'"
done
cd "$TARGET_DIR/.."
_target=`expr match "${TARGET_DIR%%/}" '.*/\(.*\)'`
$TAR cjpf "$BACKUP_DIR/$BACKUP_FILENAME" ${tar_exc} "$_target" > /dev/null 2>&1 | _log


files_size=$(du -h "$BACKUP_DIR/$BACKUP_FILENAME" | cut -f1)
echo "$(date +%H:%M:%S) Files backup put to $BACKUP_DIR/$BACKUP_FILENAME ($files_size)" | _log


_for_upload=( "${_for_upload[@]}" "$BACKUP_DIR/$BACKUP_FILENAME")


# ------- Backup Mysql -------
if [ -n "$DB_BACKUP_FILENAME" ]; then
        # Create MySQL database dump
        echo "$(date +%H:%M:%S) Creating DB dump for ${DB_NAME:-ALL dbs}" | _log


        $MYSQLDUMP --opt -u "$DB_USER" -p"$DB_PWD" -h "$DB_HOST" -P "$DB_PORT" "${DB_NAME:---all-databases}" > "$BACKUP_DIR/$DB_BACKUP_FILENAME"
        $BZIP -9 --force "$BACKUP_DIR/$DB_BACKUP_FILENAME"
        DB_BACKUP_FILENAME="$DB_BACKUP_FILENAME.bz2"


        db_size=$(du -h "$BACKUP_DIR/$DB_BACKUP_FILENAME" | cut -f1)
        echo "$(date +%H:%M:%S) Database backup put to $BACKUP_DIR/$DB_BACKUP_FILENAME ($db_size)" | _log


        _for_upload=( "${_for_upload[@]}" "$BACKUP_DIR/$DB_BACKUP_FILENAME")
fi


# ------- Upload backups -------
echo "$(date +%H:%M:%S) Uploading backup files to Selectel Storage..." | _log
for _file in "${_for_upload[@]}"; do
        _u_opts=""
        if [ -n "$STORAGE_EXPIRE" ]; then
                _u_opts="-d ${STORAGE_EXPIRE}d"
        fi
        $SUPLOAD -u "$SS_USER" -k "$SS_PWD" $_u_opts "$SS_CONTAINER" "$_file" | _log
        if [ $? -ne 0 ]; then
                _error="1"
        else
                if [ x"$DELETE_BACKUPS_AFTER_UPLOAD" = x"yes" ]; then
                        rm -f "$_file"
                        echo "$(date +%H:%M:%S) File $_file was removed" | _log
                fi
        fi
done


# ------- Clearing and notification -------
if [ x"$_error" = x"0" ]; then
        echo "$(date +%H:%M:%S) Backup complete, have a nice day!" | _log
        _title="[Backup log] $BACKUP_NAME ($TIMESTAMP)"
else
        echo "$(date +%H:%M:%S) Backup complete with errors, see log $LOG_FILE." | _log
        _title="[Backup log - !ERRORS!] $BACKUP_NAME ($TIMESTAMP)"
fi


if [ -n "$SENDMAIL" ] && [ -n "$EMAIL" ]; then
        if [ x"$_error" = x"0" ] && [ x"$EMAIL_ONLY_ON_ERROR" = x"yes" ]; then
                :
        else
                cat - "$LOG_FILE" << EOF | $SENDMAIL -t
To:$EMAIL
Subject:$_title


EOF
        fi
fi


if [ x"$DELETE_LOG" = x"yes" ] && [ x"$_error" = x"0" ]; then
        rm -f "$LOG_FILE"  # Delete log file
fi

 

 

Відредаговано NETOS
Ссылка на сообщение
Поделиться на других сайтах

твоя строчка делает следущее:

берет    TARGET_DIR=/var/backups

отрезает левую часть пути в переменной BACKUP_NAME  получаешь backups

а далее BACKUP_DIR=/var/backups/backups

 

Собственно в чем вопрос? Если ты хочешь узнать где проблема советую вверху строчку поменять и сделать:

#!/usr/local/bin/bash -x

Ссылка на сообщение
Поделиться на других сайтах

твоя строчка делает следущее:

берет    TARGET_DIR=/var/backups

отрезает левую часть пути в переменной BACKUP_NAME  получаешь backups

...

Как все сложно... basename должен то-же самое делать везде.
Ссылка на сообщение
Поделиться на других сайтах

Я просто перевел то что написано в скрипте :) У меня есть один знакомый shell-программер, который любит использовать всякие замысловатые конструкции, просто потому что "он их знает". плюсом такого подхода является то что в компании где он работает - его нельзя уволить, его скрипты читать может только он..  

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від omvk
      Доброго времени суток уважаемые форумчане! Не являюсь знатаком языка скриптов Mikrotik потому прошу помощи у ГУРУ. Дело в том что ниже приведенный скрипт был написан в пору  прошивки routeros-mipsbe-6.42.7. На современных прошивках сыплет еррорами. Прошу, кому не в лом поправить....с меня ПИВО! 
       
      :global ppp1 {"konamy";"dev1";"XXXXXXXXXX";"192.64.7.22/24";"172.65.130.96/27";"10.65.7.60/30"}
      :global ppp2 {"konamy";"dev2";"XXXXXXXXXX";"192.64.7.23/24";"172.65.130.128/27";"10.65.7.64/30"}
      :global ppp3 {"konamy";"dev3";"XXXXXXXXXX";"192.64.7.24/24";"172.65.130.160/27";"10.65.7.68/30"}
      :global ppp4 {"konamy";"dev4";"XXXXXXXXXX";"192.64.7.25/24";"172.65.130.192/27";"10.65.7.72/30"}
      :global ppp5 {"konamy";"dev5";"XXXXXXXXXX";"192.64.7.26/24";"172.65.130.224/27";"10.65.7.76/30"}
      :global config $ppp5
      :global proposalNAME "proposal-sha1-aes256-grp5"
      :global ipsecSECRET "XXXXXXXXXXXXXXXXX"
      :global areaNAME "area1000"
      :global COUNTRY "Ukraine"
      :global areaID "11.7.0.0"
      :global costGRE "25"
      :global sysver [/system package get system version]
      /system ntp client set enabled=yes primary-ntp="172.64.0.1"
      /system clock set time-zone-name=Europe/Kiev
      /ip firewall {
      :local o [nat find comment="defconf"]
      :if ([:len $o] != 0) do={ nat disable $o }
      :local o [filter find comment="defconf"]
      :if ([:len $o] != 0) do={ filter remove $o }
      }
      /ip dhcp-server network {
      :local o [find comment="defconf"]
      :if ([:len $o] != 0) do={ remove $o }
      }
      /ip dhcp-server {
      :local o [find name="defconf" ]
      :if ([:len $o] != 0) do={ disable $o }
      }
      /ip pool {
      :local o [find name="default-dhcp"]
      :if ([:len $o] != 0) do={ remove $o }
      }
      /ip address {
      :local o [find comment="defconf"]
      :if ([:len $o] != 0) do={ disable $o }
      }
      ######################################################################################
      :for i from=1 to=[/ip firewall filter print count] do={/ip firewall filter disable $i}
      :for i from=0 to=[/ip firewall nat print count] do={/ip firewall nat disable $i}
      :global iptmp
      :global ipCONF do={
      :global mask "255.255.255.255"
      :local startIP "0"
      :local endIP "2"
      :global ip [:pick $iptmp 0 [:find $iptmp "/"]]
      :global prefix [:pick $iptmp [:find $iptmp "/"] [ :len $iptmp]]
      :if ($prefix="/24") do={ :set mask "255.255.255.0"; :set startIP 12; :set endIP 254 }
      :if ($prefix="/25") do={ :set mask "255.255.255.128"; :set startIP 10; :set endIP 126 }
      :if ($prefix="/26") do={ :set mask "255.255.255.192"; :set startIP 8; :set endIP 62 }
      :if ($prefix="/27") do={ :set mask "255.255.255.224"; :set startIP 6; :set endIP 30 }
      :if ($prefix="/28") do={ :set mask "255.255.255.240"; :set startIP 4; :set endIP 14 }
      :if ($prefix="/29") do={ :set mask "255.255.255.248"; :set startIP 1; :set endIP 6 }
      :if ($prefix="/30") do={ :set mask "255.255.255.252"; :set startIP 0; :set endIP 2 }
      :global network ($ip&$mask)
      :global poolSTART ($network+$startIP)
      :global poolEND ($network+$endIP)
      }
      :global ORG ($config->0)
      :global UNIT ($config->1)
      :global GrePSWD ($config->2)
      :global intCOUNT ([/interface ethernet print count-only])
      $ipCONF iptmp=($config->3)
      :global ether1NAME [/interface ethernet get [ find default-name="ether1" ] name ]
      :global ether1 {ip="$ip";netmask="$prefix";gateway=($network+3)}
      $ipCONF iptmp=($config->4)
      :global lanNAME [/ip dhcp-server get [find] interface]
      :global lan {ip=($network+1);netmask="$prefix";network="$network";pool="$poolSTART-$poolEND"}
      $ipCONF iptmp=($config->5)
      :global greNAME "gre-$ORG"
      :global gre {ip=($network+2);netmask="$prefix";network="$network"}
      :global ether1IP ($ether1->"ip")
      :global ether1MASK ($ether1->"netmask")
      :global ether1GATEWAY ($ether1->"gateway")
      :global lanIP ($lan->"ip")
      :global lanMASK ($lan->"netmask")
      :global lanNET ($lan->"network")
      :global lanPOOL ($lan->"pool")
      :global greIP ($gre->"ip")
      :global greMASK ($gre->"netmask")
      :global greNET ($gre->"network")
      :global greSRCIP ($ether1->"ip")
      :global greDSTIP ($ether1->"gateway")
      #:set greDSTIP $greSERVERIP
      /system identity set name="$UNIT"
      /interface gre {
      remove [find name="$greNAME"]
      add !keepalive mtu=1400 name="$greNAME" local-address="$greSRCIP" remote-address="$greDSTIP"
      }
      /ip address {
      remove [find address="$lanIP$lanMASK"]
      remove [find address="$ether1IP$ether1MASK"]
      remove [find address="$greIP$greMASK"]
      add address="$lanIP$lanMASK" interface="$lanNAME"
      add address="$ether1IP$ether1MASK" interface="$ether1NAME"
      add address="$greIP$greMASK" interface="$greNAME"
      }
      /ip route {
      add distance=1 gateway="$ether1GATEWAY"
      }
      /ip dhcp-client {
      set [find interface="$ether1NAME"] disable=yes
      }
      /ip pool {
      remove [find name=default-dhcp]
      add name=default-dhcp ranges="$lanPOOL" }
      /ip dhcp-server {
      remove [find name=default]
      add address-pool=default-dhcp disabled=no interface="$lanNAME" lease-time=7d name=default }
      /ip dhcp-server network {
      remove [find address="$lanNET$lanMASK"]
      add address="$lanNET$lanMASK" dns-server="172.64.0.4,10.0.2.2" gateway="$lanIP" }
      /ip ipsec policy group {
      remove [find name="gre"]
      add name=gre }
      /ip ipsec policy {
      remove [find comment="Template GRE"]
      add comment="Template GRE" group=gre protocol=gre template=yes
      remove [find comment="$greNAME"]
      add comment="$greNAME" sa-src-address="$greSRCIP" src-address="$greSRCIP" sa-dst-address="$greDSTIP" dst-address="$greDSTIP" protocol=gre disabled=no
      }
      /ip ipsec proposal {
      remove [find name="$proposalNAME"]
      add name="$proposalNAME" enc-algorithms=aes-256-cbc lifetime=1h pfs-group=modp1536 }
      /ip ipsec peer {
      remove [find comment="$greNAME"]
      add comment="$greNAME" address="$greDSTIP" local-address="$greSRCIP" secret="$GrePSWD" generate-policy=port-strict policy-template-group="gre"
      }
      /routing ospf network {
      remove [find comment=lan]
      remove [find comment=gre] }
      /routing ospf area {
      remove [find name="$areaNAME"]
      add area-id="$areaID" default-cost=1 inject-summary-lsas=no name="$areaNAME" type=stub }
      /routing ospf network {
      add area="$areaNAME" comment=lan network="$lanNET$lanMASK"
      add area="$areaNAME" comment=gre network="$greNET$greMASK"
      }
      /routing ospf interface {
      remove [find interface="all"]
      add network-type=broadcast passive=yes
      remove [find interface="$greNAME"]
      add cost="$costGRE" interface="$greNAME" network-type=point-to-point
      }
      /system scheduler {
      remove [find name=script1]
      add interval=6h name=script1 on-event="/system script run [find name=script1]" start-date=jan/01/2016 start-time=12:00:00 }
      :for i from=1 to=[/interface wireless print count] do={
      /interface wireless set disabled=yes numbers=($i-1)
      /interface bridge port remove [find interface=[/interface wireless get ($i-1) name]]
      }
      :for i from=1 to=[/interface bridge print count] do={/interface bridge set protocol-mode=none numbers=($i-1)}
      /user set admin password="XXXXXXXXXX"
      /file remove config.rsc
       
    • Від needhelp
      Власне є такий скрипт, крутиться на dreambox dm500
      #!/bin/sh STARTDELAY=25 PINGHOST="192.168.0.35" PINGDELAY=15 START_BTN_SET="401:0:0:300 4:0:0:300 108:0:0:300 352:2:600:0" STOP_BTN_SET="1:3:300:0" START_TIME=1200 END_TIME=1300 time_is_range() { local CURTIME=`date +%k%M` if [ $CURTIME -lt $START_TIME ] || [ $CURTIME -ge $END_TIME ]; then return 1 fi return 0 } check_connect() { if ! time_is_range; then return 1; fi if [ "$1" = "TRUE" ]; then while ping -c 1 "$PINGHOST" 2>/dev/null 1>&2; do sleep $PINGDELAY if ! time_is_range; then return 1; fi done elif [ "$1" = "FALSE" ]; then while ! ping -c 1 "$PINGHOST" 2>/dev/null 1>&2; do sleep $PINGDELAY if ! time_is_range; then return 1; fi done fi return 0 } # поспим немного до полного запуска энигмы sleep $STARTDELAY # запускаем бесконечный цикл while : ; do # если нет конекта, то ждем пока не появиться if check_connect FALSE; then # запускаем dreamnetcast... /var/bin/rc.sh $START_BTN_SET # и переодично проверяем соединение... check_connect TRUE # если разорвалось останавливаем dreamnetcast... /var/bin/rc.sh $STOP_BTN_SET else sleep 10 fi # и повторяем бесконечный цикл сначала done потрібно, щоб він працював не в доин проміжок часу як зараз, а в декількох...
      Хто допоможе?
×
×
  • Створити нове...