The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
bash - forsinke utvidelsen av variable scandora Shell programmering og Skripting 3 02-18-2009 05:59
globbing, $ # er for høy etter jokertegn ekspansjon i bash script zoo591 Shell programmering og Skripting 3 07-25-2008 03:50
Mønster utvidelse problem njoshi Shell programmering og Skripting 5 04-24-2007 01:28
AIX Utvidelse CD almuwatta AIX 0 06-23-2005 06:07
ksh på HP-UX - variable utvidelse dangral UNIX for Dummies Spørsmål og svar 4 02-08-2005 12:35

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 Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 07-02-2009
mglenney mglenney is offline
Registrert bruker
  
 

Bli Dato: juni 2009
Innlegg: 85
Brace utvidelse problem Bash

Jeg har et script som tar et valg for server pools å kjøre skriptet mot. Alternativet er gitt som en kommadelt liste (dvs.-p 201.204.301).

Jeg bruker eval og spenne utvidelse for å få dem pool tallene inn i en matrise. Det fungerer fint med mindre bare 1 pool er gitt. Her er koden:


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

Hvis flere bassenger gitt:


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
+ '[' '' '!=' '' ']'

Hvis én pool gitt:


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
+ '[' '' '!=' '' ']'

Så hvis ett basseng er gitt det forlater klammeparenteser rundt det som er dårlig. Jeg kunne gjøre en test av $ 1 for å se om det er noen komma og behandle den annerledes hvis det ikke, men jeg lurte på om det er en bedre løsning enn det. Også lurer på om hvordan jeg behandlet får pool tall i en matrise var den beste måten å gjøre det (eval & spenne utvidelse).

Takk,

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

Bli Date: Feb 2005
Sted: Boston, MA
Innlegg: 5131

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

Bli Dato: juni 2009
Innlegg: 85
Sitat:
Originally Posted by 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;
Jeg bruker Bash som har ikke-Et alternativ for settet, og fra hva jeg kan fortelle, ikke har en tilsvarende. Jeg skulle ønske det gjorde det fordi du i utgangspunktet gjøre det jeg trenger i en enkelt linje med f.eks.

For nå har jeg løst problemet mitt på denne måten:


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
  
 

Bli Date: Feb 2005
Sted: Boston, MA
Innlegg: 5131

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

Bli Dato: juni 2009
Innlegg: 85
Perfekt. Jeg ble så hengt opp på å løse det ved hjelp spenne utvidelse.

Takk!
  #6 (permalink)  
Old 07-03-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmerer, forfatter
  
 

Bli Date: Mar 2007
Bosted: Toronto, Canada
Innlegg: 2372
Sitat:
Originally Posted by 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 disse tilsvarer:


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

Reply

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 02:52.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0