The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Парсинг аргументов"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Парсинг аргументов"  
Сообщение от sickboy email(ok) on 20-Мрт-07, 01:03 
Привет,

Есть задача, интерпретировать аргументы с котороми запущен скрипт, в некие сущности.
Вот например:

$ cat ls.sh

#!/bin/bash

ls $ARG1 $ARG2 $ARG3

Запуск сценария ls.sh (точнее его работа) допустима только с параметром:
$ ./ls.sh --list
тогда в скрипте можно сделать простою проверку:
[ "$1" = "--list"] ARG1="-l"
Но также возможен и запуск с:
$ ./ls.sh --list --all --kilo или
$ ./ls.sh --list --kilo
$ ./ls.sh --list --all
$ ./ls.sh --list --kilo --all

и соответетственно, если --kilo == -h, --all == -a

Читаю Advanced Bash-Scripting Guide, но задачу пока не поборол.
Спасибо.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Парсинг аргументов"  
Сообщение от allez (ok) on 20-Мрт-07, 09:56 
>Читаю Advanced Bash-Scripting Guide, но задачу пока не поборол.
>Спасибо.

Почитайте еще man getopt и man bash на предмет getopts. Это именно то, что вам нужно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Парсинг аргументов"  
Сообщение от phpcoder (??) on 20-Мрт-07, 12:47 
>Есть задача, интерпретировать аргументы с котороми запущен скрипт, в некие сущности.

Вот мой вариант:

#!/bin/sh

ARG1=
ARG2=
ARG3=

if [ $# -eq 0 ]; then
    echo "Usage: $0 --list [--all] [--kilo]" >&2
    exit 1
fi

if [ $# -gt 0 ]; then
    while [ $# -gt 0 ]; do
        if [ "$1" = "--list" ]; then
            ARG1="-l"
        elif [ "$1" = "--kilo" ]; then
            ARG2="-h"
        elif [ "$1" = "--all" ]; then
            ARG3="-a"
        fi
        shift
    done
fi

printf 'ARG1 = %s\n' $ARG1
printf 'ARG2 = %s\n' $ARG2
printf 'ARG3 = %s\n' $ARG3

>Запуск сценария ls.sh (точнее его работа) допустима только с параметром:
>$ ./ls.sh --list

У меня не проверяется, чтобы --list был всегда и обязательно, но это нетрудно сделать.

>Но также возможен и запуск с:
>$ ./ls.sh --list --all --kilo или
>$ ./ls.sh --list --kilo
>$ ./ls.sh --list --all
>$ ./ls.sh --list --kilo --all

coder@alt0 ~ $ ./test.sh                    
Usage: ./test.sh --list [--all] [--kilo]
coder@alt0 ~ $ ./test.sh --list
ARG1 = -l
ARG2 =
ARG3 =
coder@alt0 ~ $ ./test.sh --list --all --kilo
ARG1 = -l
ARG2 = -h
ARG3 = -a
coder@alt0 ~ $ ./test.sh --list --kilo      
ARG1 = -l
ARG2 = -h
ARG3 =
coder@alt0 ~ $ ./test.sh --list --all
ARG1 = -l
ARG2 =
ARG3 = -a
coder@alt0 ~ $ ./test.sh --list --kilo --all
ARG1 = -l
ARG2 = -h
ARG3 = -a
coder@alt0 ~ $

getopt/getopts это хорошо, но в таких простых случаях можно и без него обойтись :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Парсинг аргументов"  
Сообщение от phpcoder (??) on 20-Мрт-07, 12:50 
>if [ $# -gt 0 ]; then
>    while [ $# -gt 0 ]; do
[...]

>    done
>fi

If ненужен. Потому что аргументов всегда больше нуля (иначе бы программа закончится раньше) и потому что даже если бы аргументов и было ноль, то цикл while просто бы не выполнился и всё.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Парсинг аргументов"  
Сообщение от sickboy email(ok) on 20-Мрт-07, 13:13 
Спасибо всем, буду разбираться.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру