The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
bash - Verzögerung Ausweitung der variablen scandora Shell Programmierung und Scripting 3 02-18-2009 05:59 AM
globbing, $ # ist zu hoch, nachdem der Wildcards in Bash-Skript zoo591 Shell Programmierung und Scripting 3 07-25-2008 03:50 AM
Pattern Erweiterung Problem njoshi Shell Programmierung und Scripting 5 04-24-2007 01:28 PM
AIX Expansion CD almuwatta AIX 0 06-23-2005 06:07 PM
ksh auf HP-UX - Variable Expansion dangral UNIX for Dummies Questions & Answers 4 02-08-2005 12:35 PM

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 07-02-2009
mglenney mglenney is offline
Registrierte Nutzer
  
 

Join Date: Jun 2009
Beiträge: 85
Brace Expansion Problem in der Bash

Ich habe ein Skript, das eine Option für Server-Pools, um das Skript vor. Die Option wird als Komma getrennte Liste (dh,-p 201.204.301).

Ich bin mit eval und Klammer, um die Expansion Pool Zahlen in einem Array. Es funktioniert gut, wenn nur 1 Pool-Nummer wird. Hier ist der Code:

Code:
while [ "$1" != "" ]; do
  case $1 in
    -p  )               shift
                        pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
                        ;;
Wenn mehrere Pools gegeben:

Code:
[me@server bin]$ ./project_nunenhoffen.sh -p 201,202
+ '[' -p '!=' '' ']'
+ case $1 in
+ shift
+ pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
++ sort
+++ eval echo '{201,202}'
++++ echo 201 202
++ for i in '$(eval echo {$1})'
++ echo 201
++ for i in '$(eval echo {$1})'
++ echo 202
+ shift
+ '[' '' '!=' '' ']'
Sollten einzelne Pool gegeben:

Code:
[me@server bin]$ ./project_nunenhoffen.sh -p 201
+ '[' -p '!=' '' ']'
+ case $1 in
+ shift
+ pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
++ sort
+++ eval echo '{201}'
++++ echo '{201}'
++ for i in '$(eval echo {$1})'
++ echo '{201}'
+ shift
+ '[' '' '!=' '' ']'
Wenn also eine einzige Schwimmbad wird es in die Klammern, die um ihn herum ist schlecht. Kann ich einen Test von $ 1, um zu sehen, wenn es welche gibt Kommas und verarbeitet sie anders, wenn es nicht, aber ich frage mich, ob es eine bessere Lösung als die. Auch fragen, ob, wie ich behandelt immer den Pool Zahlen in einer Reihe war der beste Weg, dies zu tun (eval & Klammer Expansion).

Danke,

Mike G.
  #2 (permalink)  
Old 07-02-2009
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2005
Ort: Boston, MA
Posts: 5122
Code:
#!/bin/ksh

list='201,204,301'

IFS=,; set -A array ${list}

typeset -i i=0
while (( $i < ${#array[*]} ))
do
  echo "${array[$i]}"
  ((i=i+1))
done;
  #3 (permalink)  
Old 07-02-2009
mglenney mglenney is offline
Registrierte Nutzer
  
 

Join Date: Jun 2009
Beiträge: 85
Zitat:
Zitat von vgersh99 View Post
Code:
#!/bin/ksh

list='201,204,301'

IFS=,; set -A array ${list}

typeset -i i=0
while (( $i < ${#array[*]} ))
do
  echo "${array[$i]}"
  ((i=i+1))
done;
Ich bin mit Bash, das nicht über-A-Option für die Reihe, und von dem, was ich kann sagen, nicht über eine entsprechende. Ich wünschte, sie habe, weil Sie im Grunde tun, was ich brauche in einer einzigen Zeile mit einem Beispiel.

Für heute habe ich mein Problem gelöst werden:

Code:
while [ "$1" != "" ]; do
  case $1 in
    -p  )               shift
                        case $1 in
                          *,* ) pools=( $(for i in $(eval echo {$1}); do echo $i; done | sort) ) ;;
                          *   ) pools=$1 ;;
                        esac
                        ;;
  #4 (permalink)  
Old 07-02-2009
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2005
Ort: Boston, MA
Posts: 5122
Code:
#!/bin/bash

list='201,204,301'

IFS=,; array=(${list})

typeset -i i=0
while (( $i < ${#array[*]} ))
do
  echo "${array[$i]}"
  ((i=i+1))
done;
  #5 (permalink)  
Old 07-02-2009
mglenney mglenney is offline
Registrierte Nutzer
  
 

Join Date: Jun 2009
Beiträge: 85
Perfekt. Ich war so hingen bis auf die Lösung es mit Klammer Expansion.

Vielen Dank!
  #6 (permalink)  
Old 07-03-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell-Programmierer, Autor
  
 

Join Date: März 2007
Ort: Toronto, Kanada
Beiträge: 2361
Zitat:
Zitat von vgersh99 View Post
Code:
#!/bin/bash

list='201,204,301'

IFS=,; array=(${list})

typeset -i i=0
while (( $i < ${#array[*]} ))
do
  echo "${array[$i]}"
  ((i=i+1))
done;

Alle der oben genannten entspricht:

Code:
list='201,204,301'
array=( ${list//,/ } )
printf "%s\n" "${array[@]}"
Reply

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 05:52 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0