• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af peque | 19.10.2010 10:02

Bashscript problem!

Hjælp generelt
Hey Gutter.

jeg sidder her og roder med et script som jeg gerne vil have til at gøre følgende:

1. tage backup af mine diverse maskiner hver nat af konkrete conf- filer, MySQL dumps mm. og dette fungerer kanon.
2. Men for sportens skyld ville jeg gerne have scriptet til i slutningen og vurdere hvilken dag i måneden det er - og er det den første - så skal der pakkes et tar-arkiv med disse filer.

Selve månedsdagen hiver jeg med følgende kommando:
DAY="`date +%e`"
og denne kommando fungerer .
I slutningen af mit backupscript ville jeg så enormt gerne have den til at vurdere day of month - og derefter køre følgende del:

if [ $DAY != "01" ];
then
echo " We are NOT performing a monthly backup today...." >> $LOGFILE
else
echo "Creating the Archive from all standard conf files" >> $LOGFILE
tar -cvvf Backup_$MONTH.tar /storage/* --exclude=/storage/atlantis/storage --exclude=/storage/core/music >> $LOGFILE
mv Backup_$MONTH.tar /root/
echo "Finished the Monthly backup - and stored the file in /root" >> $LOGFILE
fi

Men der sker ikke noget. Heller ikke den skriver linien ud med mine kommentarer - der sker faktisk intet - bortset fra resten af scriptet kører.
Jeg har også prøvet den modsatte vej med flere muligheder:

if [ $DAY -eq "01" ];
then
echo "Creating the Archive from all standard conf files" >> $LOGFILE
tar -cvvf Backup_$MONTH.tar /storage/* --exclude=/storage/atlantis/storage --exclude=/storage/core/music >> $LOGFILE
mv Backup_$MONTH.tar /root/
echo "Finished the Monthly backup - and stored the file in /root" >> $LOGFILE
else
echo " We are NOT performing a monthly backup today...." >> $LOGFILE
fi

Og i selve if-linien har jeg faktisk prøvet alle muligheder:
if [ $DAY == "01" ]
if [ $DAY == '01' ]
if [ $DAY == $BACKUP ] (hvor $BACKUP er sat til 01

Men uanset hvad - så køres den del af mit script ikke hvilket undrer mig gevaldigt!
sætter jeg Variablerne til at blive udskrevet efter FI - så er de allesammen korrekte med de korrekte værdier.
Såååååå ved iikke lige hvad jeg har gloet mig blind på -men ville da gerne lige have et los i den rigtige retning!

  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer5

# 1

15 år 4 måneder siden

Permalink

Indsendt af lbm den 19. oktober 2010 kl. 10:24

Permalink

Måske du mangler at slutte

Måske du mangler at slutte en if sætning eller andet i scriptet et sted.
Har du prøvet at udskrive $DAY med echo inde fra scriptet for se om den udskriver det rigtigt.
  • Log ind eller opret dig for at tilføje kommentarer

# 2

15 år 4 måneder siden

Permalink

Indsendt af mrbrown79 den 19. oktober 2010 kl. 10:46

Permalink

Jeg kan ikke se nogen fejl i den første

Men du skal ikke bruge "-eq", når du sammenligner strenge.

Det her virker:


#!/bin/bash

DAY="`date +%e`"
if [ $DAY == "19" ];
then
echo "Idag er det d. 19"
else
echo "Idag er det IKKE d. 19"
fi

  • Log ind eller opret dig for at tilføje kommentarer

# 3

15 år 4 måneder siden

Permalink

Indsendt af mrbrown79 den 19. oktober 2010 kl. 10:55

Permalink

man date

Tror du ikke du skal bruge:

DAY="`date +%d`"

istedet for


DAY="`date +%e`"

  • Log ind eller opret dig for at tilføje kommentarer

# 4

15 år 4 måneder siden

Permalink

Indsendt af minimee den 20. oktober 2010 kl. 10:08

Permalink

Brug crontab istedet.
lav to

Brug crontab istedet.

lav to script, det første sætte du til at køre hverdag, det næste til at kører en gang om måneden.
  • Log ind eller opret dig for at tilføje kommentarer

# 5

15 år 4 måneder siden

Permalink

Indsendt af Anonym7 den 20. oktober 2010 kl. 12:38

Permalink

Du kan sagtens bruge -eq til

Du kan sagtens bruge -eq til at sammenligne strenge, virker i hvert fald fint med bash 4.1 (Arch)

Et par sh programmerings-tips:

1) Kør dine scripts som "sh -x SCRIPT" - det slår debugging output til . Det virker lidt som make hvor hver linje bliver udskrevet lige før den bliver kørt.

2) VID HVILKEN SHELL DU KOMMER TIL AT KØRE SCRIPTET I !!! --Fx vil du i Debian/Ubuntu komme ud for at mange system scripts rent faktisk startes med "dash" frem for "bash".

Hvorfor er det vigtigt ? Fordi shellscript syntaksen varierer mellem de forskellige implementationer af sh (og en hel del mere for de andre shells!) -- specielt bash har en hulens masse workarounds og kompatabilitetsfixes som ellers ikke vil virke i andre sh shells så som dash.
Speciel syntaks og features kun eksisterende i bash kaldes bashisms

ERGO: specificér explicit it dit script hvilken shell du ønsker og test med denne.

3) Gør som hvis du programmerede Python eller F# => benyt en shell til at teste tingene interaktivt! -- jeg gjorde fx dette for at kigge på dit eksempel med if-statements og fandt ud af at bash accepterer sammenligninger mellem strenge med -eq/=/== (jeg *mener* at '==' er tilføjet for kompatabilitetens skyld og at -eq oprindeligt er tiltænkt numre - så '=' burde være mest korrekt)


Afsluttende: Overvej en egentlig debugger:
http://bashdb.sourceforge.net/

  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

KDE Plasma 6.6 skrivebordsmiljø udgivet 0
youtube-tui: Nyd YouTube fra terminalen som en professionel 0
GRUB 2.14 introducerer understøttelse af EROFS, forbedringer til Btrfs og LVM 0
KDE Plasma 6.6 tilføjer en funktion, som brugerne har spurgt efter i evigheder 0
Linux i København 12.01.2026: Open source i det offentlige 0

Seneste aktivitet

BigLinux 5
Det engang så elskede PCLinuxOS er tilbage - og det er stadig en fantastisk Windows erstatning 1
rsync og filsystem 6
Mousam er en detaljeret desktop vejrapp til Linux 1
Hjælp til Handbrake - ingen dk-undertekster 1
luckyBackup 2
GIMP 30
Pinegrow på Debian 13 ? 4
Openmediavault 1
E-mail blues 9
Driver til min scanner? 5
Printer Epson ET-2865 problem 16
Sudo 7
Thunderbird filvedligeholdelse 2
Debian 13.3.0 8
Linux Mint 22.3 - hvornår opdatere? 10
Canon-printer: Jeg savner "Ink-Toner Level"-meddelelse 10
billede af nuværende installation 2
mapper 4
LinuxIn live 9

© 2026 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !