32 Stimmen

Iterieren durch einen Bereich von Ints in ksh?

Wie kann ich durch einen einfachen Bereich von ints mit einer for-Schleife in ksh iterieren?

Mein Skript zum Beispiel macht derzeit Folgendes...

for i in 1 2 3 4 5 6 7
do
   #stuff
done

...aber ich würde den Bereich gerne auf über 7 erweitern. Gibt es eine bessere Syntax?

5voto

scott-- Punkte 63

Das Folgende funktioniert unter AIX / Linux / Solaris ksh.

#!/bin/ksh

d=100

while (( $d < 200 ))
do
   echo "hdisk$d"
  (( d=$d+1 ))
done

Wenn Sie auf 5 Stellen auffüllen möchten, d. h. 00100 00199, können Sie optional mit beginnen:

#!/bin/ksh
typeset -Z5 d

-Scott

2voto

Demosthenex Punkte 4219

Nur ein paar Beispiele, die ich unter AIX verwende, weil es dort keinen Bereichsoperator oder seq gibt, und stattdessen Perl missbrauche.

Hier ist eine for-Schleife, die Perl wie seq verwendet:

for X in `perl -e 'print join(" ", 1..10)'` ; do something $X ; done

Das ist ähnlich, aber ich ziehe es vor, Schleifen zu lesen, während für. Keine Backticks oder Probleme mit Leerzeichen.

perl -le 'print "$_ " for 1..10;' | while read X ; do xargs -tn1 ls $X ; done

Mein Favorit, tun bash-ähnliche Shell Globbing, in diesem Fall Permutationen mit Perl.

perl -le 'print for glob "e{n,nt,t}{0,1,2,3,4,5}"' | xargs -n1 rmdev -dl

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X