Kaplan Skrevet 15. februar 2007 Rapporter Del Skrevet 15. februar 2007 hvordan kan jeg definere en variabel i et bashscript til å være et fast antall siffer? dvs definere en variabel i til å være 001, og så inkrementere denne til 002 osv? det jeg vil er at denne snutten set i i=001 while ((i<005)) do echo ${i} ((++i)) done skal gi meg 001 002 003 004 noen som vet? Lenke til kommentar
Kadmium Skrevet 15. februar 2007 Rapporter Del Skrevet 15. februar 2007 (endret) set i i=1 while ((i<5)) do echo "00"${i} ((++i)) done Vet ikke om dette er hva du trenger, men du kan jo sjekke. Denne koden vil så klart konfliktere med tosifrede/tresifrede tall, men om du kun har tenkt til å gå opp til tallet ni, så funker denne koden greit. Endret 15. februar 2007 av Kadmium Lenke til kommentar
Kaplan Skrevet 15. februar 2007 Forfatter Rapporter Del Skrevet 15. februar 2007 det der funker jo, men er litt på siden. det som er saken her, er jo selvsagt at jeg vil ha den til å kunne inkrementere opp til 3-sifrede tall. jeg vil gjerne kunne sette set i i=001 while ((i<150)) do echo ${i} ((++i)) done gjør jeg det nå, inkrementerer den fra 001 til 2. og da blir det feil hvis jeg skal bruke variabelen i f.eks et filnavn. Lenke til kommentar
hockey500 Skrevet 15. februar 2007 Rapporter Del Skrevet 15. februar 2007 (endret) du kan ikke lagre 001 som en int, den vil automatisk omgjøres til bare 1. C# / Java: int i = 001; Console.Write(i); // ville gitt "1" som resultat PHP: $int = 001; echo $int; // gir "1" skal du ha 00 foran må du lagre som en string. EDIT: antar jeg, siden dette sikkert er likt i de fleste språk Endret 15. februar 2007 av hockey500 Lenke til kommentar
Kaplan Skrevet 15. februar 2007 Forfatter Rapporter Del Skrevet 15. februar 2007 hvordan gjør jeg dette i et bashscript? er ikke akkurat noen racer på programmering, og absolutt ikke på scripting i bash.... og: kan jeg inkrementere en string? Lenke til kommentar
hockey500 Skrevet 15. februar 2007 Rapporter Del Skrevet 15. februar 2007 nei, du kan ikke inkrementere en string, da må du veien via å caste til int og eventuelt tilbake igjen. kan skrive et kort program som gjør det du spør om i C# hvis det kan være til nytte? Lenke til kommentar
Kaplan Skrevet 15. februar 2007 Forfatter Rapporter Del Skrevet 15. februar 2007 nja, ikke særlig. det er jo bare et lite script jeg bruker i terminal for å sortere, flytte, slette eller gi nytt navn til bilder o.l. men takk for tilbudet Lenke til kommentar
hockey500 Skrevet 15. februar 2007 Rapporter Del Skrevet 15. februar 2007 hehe, gjør det uansett jeg tok bare 2 min uansett: class MainClass { static void Main() { int max = 150; for(int i = 0; i < max; i++) { string prefix = new string('0', max.ToString().Length - i.ToString().Length); string tmp = prefix + i.ToString(); Console.WriteLine(tmp); } Console.Read(); } } Du får se om du skjønner noe som helst av det. Lykke til videre! Lenke til kommentar
Kaplan Skrevet 15. februar 2007 Forfatter Rapporter Del Skrevet 15. februar 2007 men kan vi da konkludere med at dette er umulig i bashscript? Lenke til kommentar
JohndoeMAKT Skrevet 15. februar 2007 Rapporter Del Skrevet 15. februar 2007 Hvorfor ikke bare ha if-elseif-else på de tre mulige antall siffer? Her er hvordan jeg tenkte det, men det er over et år siden jeg rørte bash, så syntaxen min er sikkert helt feil. set i i=001 while ((i<100)) do if [ "$i" < "10" ]; then echo "00" elif [ "$i" < "100" ]; then echo "0" fi echo ${i} ((++i)) done Lenke til kommentar
Kaplan Skrevet 15. februar 2007 Forfatter Rapporter Del Skrevet 15. februar 2007 Hvorfor ikke bare ha if-elseif-else på de tre mulige antall siffer? Her er hvordan jeg tenkte det, men det er over et år siden jeg rørte bash, så syntaxen min er sikkert helt feil. set i i=001 while ((i<100)) do if [ "$i" < "10" ]; then echo "00" elif [ "$i" < "100" ]; then echo "0" fi echo ${i} ((++i)) done 7953037[/snapback] joda, det funker nok det. men jeg hadde håpet det gikk an å definere variabelen slik at den inkrementerte med tre siffer. grunnen er at jeg skriver om dette skriptet for å tilpasse det til bruksområdet til stadighet. og da blir det litt tungvint. men takk for forslaget! Lenke til kommentar
pgdx Skrevet 15. februar 2007 Rapporter Del Skrevet 15. februar 2007 men kan vi da konkludere med at dette er umulig i bashscript?7952929[/snapback] Nei nei nei...Man kan vel ikke konkludere med noe som helst før man har man printf Lenke til kommentar
comicz Skrevet 16. februar 2007 Rapporter Del Skrevet 16. februar 2007 seq -w 1 100 for i in `seq -w 1 100`; do echo $i; done -w parameteret gir "equal width", så du får ikke 2 nuller foran 1 om du gjør "seq -w 1 10". Vi kan derfor bruke printf! for i in `seq 1 100`; do printf "%04d\n" $i; done Jeg sier her at jeg skal ha totalt 4 siffer, så 100 blir 0100. Funker dette? Lenke til kommentar
iDude Skrevet 16. februar 2007 Rapporter Del Skrevet 16. februar 2007 Her er hva jeg pleier gjøre, enkelt og greit i bash-script test=14 test2=$(echo 00$test | tail -c4) echo $test2 Og du skal få 014. Og ja, det skal være -c4, ikke -c3. Om du vil ha flere nuller legger du flere nuller inn foran $test i echo-kommandoen, og øker tallet etter "-c" Som comicz sier er printf også en mulighet. PS: Flere som har problemer med å sende inn poster med "code" tager? Lenke til kommentar
RusleBiff Skrevet 16. februar 2007 Rapporter Del Skrevet 16. februar 2007 Hei, printf er som nevnt riktig måte. For å reformulere spørsmålet ditt er det du vil gjøre er å padde tallet med 0 til en fast lengde 3. printf '%.3d\n' $i man 3 printf viser deg hvordan format-stringen skal se ut, tror ikke det er beskrevet i mansiden til printf-kommandoen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå