Gå til innhold

tall i bashscript


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Kadmium
Lenke til kommentar

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

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 av hockey500
Lenke til kommentar

hehe, gjør det uansett jeg :p 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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...