[LØST] Add +1 til en string

peque
Antal: 899
Tilmeldt:
20-04-2005
User is offline
[LØST] Add +1 til en string

Heysa.
Jeg har noget replikering der kører omkring MySQL.
Dog ville jeg rigtig gerne have dette til at starte automatisk.
Jeg har fået lavet således jeg har grabbet det rigtige binlog navn --> F.eks. mysql-bin.000004

Hvordan kan jeg lave dette således et bashscript ændrer mysql-bin.000004 - til mysql-bin.000005
Mit bud er hvis jeg lavet alt efter punktum til INT - vil den fjerne de 5 nuller foran - hvilkwet i denne sammenhæng er meget vigtige

Så jeg fået en variable ind - som jeg skal plusse en. så skulle gerne have det samme filnavn --> således jeg kan genstarte min replikering automatisk


julemand101
julemand101's picture
Antal: 1651
Tilmeldt:
17-01-2004
User is offline
Kan du ikke gøre noget som

Kan du ikke gøre noget som dette? Jeg tænker du nok selv kan finde ud af hvordan du får tallet ind i sin egen variabel. :)

#!/bin/bash
var="000004"
var2=$(printf "%06d" $((var + 1)))
echo $var2

peque
Antal: 899
Tilmeldt:
20-04-2005
User is offline
Hey Julemand.Takker for dit

Hey Julemand.
Takker for dit input
Jeg har leget lidt med dette - men får lidt fejl jeg ikke lige forstår

#!/bin/bash
#
BIN1=`echo mysql-bin.0002345 | rev | cut -d'.' -f 1 | rev `
BIN2=$(printf "%06d" $((BIN1 + 1)))
BINLOG='mysql-bin.'+$BIN2
echo $BIN1
echo $BIN2
echo $BINLOG

giver mig kun output
0002345
001254
mysql-bin.001254


julemand101
julemand101's picture
Antal: 1651
Tilmeldt:
17-01-2004
User is offline
Jeg kan godt se det jeg fik

Jeg kan godt se det jeg fik lavet ikke virker optimalt. Her er en bedre kode :P

#!/bin/bash
BIN1=`echo -n mysql-bin.001023`
BIN2=${BIN1: -6}
BIN3=$((10#$BIN2))
BIN4=$(printf "%06d" $((1 + BIN3)))
BINLOG="mysql-bin.$BIN4"
echo $BINLOG

Forskellen er her at jeg ved BIN2 tager de sidste 6 bytes fra BIN1. Ved BIN3 bruger jeg en indbygget Bash funktion til at skære 001023 om til 1023 og først herefter ligger jeg 1 til denne værdi. Noget tyder på at hvis et nummer starter med 00 så tolker bash det som noget andet (måske hex?) når den skal ligge tal sammen.


ejvindh
Antal: 14
Tilmeldt:
17-05-2010
User is offline
hvis et nummer starter med

hvis et nummer starter med 00 så tolker bash det som noget andet (måske hex?)
Det er oktaler: http://www.gnu.org/software/bash/manual/bashref.ht...


julemand101
julemand101's picture
Antal: 1651
Tilmeldt:
17-01-2004
User is offline
#4 Super, så giver det fint

#4
Super, så giver det fint mening at skære frontløbende nuller væk for at undgå denne 'feature'. :)


frogmaster
frogmaster's picture
Antal: 3641
Tilmeldt:
20-05-2010
User is offline
Super, så giver det

#5: Super, så giver det fint mening at skære frontløbende nuller væk for at undgå denne 'feature'. :)

Ja, men de skal tilføjes igen til navngivningen af dokumentet, for at overholde betingelsen if. oplysningen i #0, der som jeg opfatter problemet, er nødvendig for videre.

#0: Mit bud er hvis jeg lavet alt efter punktum til INT - vil den fjerne de 5 nuller foran - hvilkwet i denne sammenhæng er meget vigtige.

Beklager hvis denne kommentar er irrelevant.


julemand101
julemand101's picture
Antal: 1651
Tilmeldt:
17-01-2004
User is offline
#6 Tilføjer skam nullerne

#6
Tilføjer skam nullerne igen hvis du ser mit script ;)


frogmaster
frogmaster's picture
Antal: 3641
Tilmeldt:
20-05-2010
User is offline
Tilføjer skam nullerne

#7: Tilføjer skam nullerne igen hvis du ser mit script ;)

OK ;)


peque
Antal: 899
Tilmeldt:
20-04-2005
User is offline
Hey Gutter.Fantastisk forum

Hey Gutter.
Fantastisk forum - fantastiske medlemmer - Jeg bukker og takker mange gange!

@ Julemand - er der så også taget højde for hvis den skifter f.eks fra 99 til 100 - så er der jo et mindre 0 der skal foran ?
Jeg spørger kun for at være sikker EDIT --> Du har du fuldstændig styr på!!!!

Takker for hjælpen!!!


julemand101
julemand101's picture
Antal: 1651
Tilmeldt:
17-01-2004
User is offline
#9 er der så også taget

#9
er der så også taget højde for hvis den skifter f.eks fra 99 til 100

Tsk hvor er jeg er skuffet over du ikke forventer jeg har taget hånd om det. Men som du vil kunne se med:
BIN4=$(printf "%06d" $((1 + BIN3)))

Så angiver jeg at jeg ønsker tallet skal udskrives som et decimal og længden skal være på 6 tegn hvor der vil blive tilføjet frontløbende 0'er. :)


peque
Antal: 899
Tilmeldt:
20-04-2005
User is offline
@julemand. Syntes jeg

@julemand.
Syntes jeg skyndte mig at verificere du havde taget højde for det --> WELL DONE --> Mange tak