• 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 2 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 2 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 2 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 2 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 2 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

FOSS i Færdselsstyrelsen 0
KDE overgår indsamlingsmålet for 2025 med rekordstor støtte fra lokalsamfundet 0
Zypper Package Manager brugervejledning til openSUSE brugere og deres derivater 0
KDE Spectacle tilføjer OCR understøttelse for at kopiere tekst direkte fra skærmbilleder 0
Deaktiverer alle AI-funktioner i Firefox Web Browser 0

Seneste aktivitet

Flere genveje på Firefox skrivebordet 4
Har brugt GLF OS, en NixOS-baseret distribution lavet i Frankrig. 1
Linuxin er nu migreret til Drupal 11 15
Dansk distro til software udviklere 3
Driver til min scanner? 3
Affinity V3 2
copy hvordan 1
Sortering af filer - sort of... 4
Det der ikke må galt gik galt 5
VPN — 8 tests, 1 klar vinder i 2025 3
Lidt nostalgi 1
Forum. 1
BigLinux 1
Mount btrfs-device fra ext4 8
Skal vi være nervøse? 22
How to upgrade to LMDE 7 6
Kontakt til dansk-gruppen 3
Internettet er ved at dø. Vi kan stadig stoppe det 1
Nørder søger nørder: Første Linux-brugergruppe på Mors 3
Østrigsk ministerium smider Microsoft ud til fordel for Nextcloud 1

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !