The UNIX and Linux Forums  
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.

Go Back   В UNIX и Linux Форумы > Топ форумы > Shell программирование и сценарии
.
Google unix.com



Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Bash - задержка расширения переменной scandora Shell программирование и сценарии 3 02-18-2009 05:59 AM
globbing, $ # слишком высока после подстановочный расширение Bash скрипта zoo591 Shell программирование и сценарии 3 07-25-2008 03:50 AM
План расширения проблема njoshi Shell программирование и сценарии 5 04-24-2007 01:28 PM
Экс Расширение КР almuwatta AIX 0 06-23-2005 06:07 PM
KSH на HP-UX - переменная расширения dangral UNIX для чайников Вопросы И Ответы 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 Оценить Thread Режимы дисплея
Old 07-02-2009
mglenney mglenney is offline
Зарегистрированный пользователь
  
 

Регистрация: июнь 2009
Сообщений: 85
Скобок Проблема в Bash

У меня есть скрипт, который принимает параметр для сервера бассейны запустить сценарий "против". Эта функция доступна в виде списка разделенных запятыми (например, П-201204301).

Я использую EVAL и скобок, чтобы те пул номеров в один массив. Он отлично работает, если только 1 бассейн номер приводится. Вот код:

Код:
while [ "$1" != "" ]; do
  case $1 in
    -p  )               shift
                        pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
                        ;;
Если несколько бассейнов с учетом:

Код:
[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
+ '[' '' '!=' '' ']'
Если единый пул с учетом:

Код:
[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
+ '[' '' '!=' '' ']'
Так, если в пуле дается она оставляет скобки вокруг него, которая плохо. Я мог бы сделать тест на $ 1, чтобы, если Существуют какие-либо запятых и процесс, если он отличается Есть, но я не была интересно, если существует лучшее решение, чем это. Также интересно, если я каким образом получить пул номеров в массив был лучший способ сделать это (EVAL И скобок).

Спасибо,

Майк G.
Old 07-02-2009
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Модератор
  
 

Регистрация: Февраль 2005
Место: Boston, MA
Сообщения: 5122
Код:
#!/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;
Old 07-02-2009
mglenney mglenney is offline
Зарегистрированный пользователь
  
 

Регистрация: июнь 2009
Сообщений: 85
Цитата:
Первоначально Послано vgersh99 View Post
Код:
#!/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;
Я использую Баш, которая не имеет опцию-A для набора, а от того, что я могу сказать, не имеет эквивалента. Я хотел бы это было в основном потому, что вам делать все, что мне нужно в одной линии с вашим примером.

Сейчас я моя проблема решена следующим образом:

Код:
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
                        ;;
Old 07-02-2009
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Модератор
  
 

Регистрация: Февраль 2005
Место: Boston, MA
Сообщения: 5122
Код:
#!/bin/bash

list='201,204,301'

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

typeset -i i=0
while (( $i < ${#array[*]} ))
do
  echo "${array[$i]}"
  ((i=i+1))
done;
Old 07-02-2009
mglenney mglenney is offline
Зарегистрированный пользователь
  
 

Регистрация: июнь 2009
Сообщений: 85
Perfect. Я был настолько висела на ее решение с помощью скобок.

Спасибо!!
Old 07-03-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell программист, автор
  
 

Регистрация: Mar 2007
Место проведения: Торонто, Канада
Сообщения: 2361
Цитата:
Первоначально Послано vgersh99 View Post
Код:
#!/bin/bash

list='201,204,301'

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

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

Все приведенные выше, эквивалентно:

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

Закладки

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 12:14 AM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0