LINUX.ORG.RU

bash сценарий, опция с 2-мя аргументами


0

0

нигде не могу найти инфы на предмет башевых функций, в которых опция может иметь два аргумента, т.е например хочу вызвать сценарий myscript -add "mystring" myfile.txt чтобы он выполнил например "echo mystring >> myfile.txt" Ткните в ман плз

anonymous

Ответ на: комментарий от UrbanSerj

я наверное недостаточно точно выразился. _одна из опций_ должна иметь два аргумента. т.е myscrip может вызываться как совсем без -add так и вроде этого:
myscript -add "mytext" myfile.txt -l 4 -q 195 -rem 4 file2.txt

anonymous
()
Ответ на: комментарий от asgard

>man getopt

дык уже там, но не нашёл ничего

anonymous
()
Ответ на: комментарий от anonymous

Дык.. вручную всё проверять. Просто добавить пару условий при разборе аргументов и усё

Laz ★★★★★
()

Читайте ABS Guide, там все есть.  Время от времени листайте `man bash`

# anonymous,
# pd

# Initial variables
if_add=0
add_string=
file=

# Usage statement
Usage() {
    echo "$(basename $0): cat a given file, optionally concatenating it with a given string"
    echo
    echo "Usage: $(basename $0) [-a \"string\"] file"
    echo "Usage: $(basename $0) [-h]"
    echo
    echo "Arguments:"
    echo "    -a, --add      add the following string to a file"
    echo "    -h, --help    show this help"
}

# Arguments check
[ $# -eq 0 ] && Usage && exit 0

# $@ processing
while [ "$1" ]; do
    case "$1" in
        -a|--add)
            if_add=1
            if [ ! "$2" ]; then
                echo "err: $1 requires an argument"
                Usage
                exit 1
            fi
            add_string="$2"
            shift 2
            ;;
        -h|--help)
            Usage
            exit 0
            ;;
        *)
            file="$1"
            shift 1
            ;;
    esac
done

# Check if a file exists
if [ ! -f "$file" ]; then
    echo "err: regular file \"$file\" doesn't exist"
    Usage
    exit 2
fi

# Add a given string to the file
if [ $if_add -eq 1 ]; then
    echo "$add_string" >> "$file"
fi

# Show the file contents
cat "$file"

anonymous
()
Ответ на: комментарий от anonymous

можно кстати решить в лоб:

#!/bin/bash

STR=
ind=$BASH_ARGC

[ $ind -eq 0 ] && echo "no arguments"

for arg in ${BASH_ARGV[*]}; do
[ "$arg" = "-add" ] && ind=$(($ind-1)) && STR=${BASH_ARGV[$ind]}
ind=$(($ind-1))
done

[ ! $STR ] && echo "without -add" || echo "with -add; str = $STR"

exit 0

asgard
()
Ответ на: комментарий от dilmah

>любители башизмов да сгорят в агине

Не балаболь

anonymous
()
Ответ на: комментарий от dilmah

> любители башизмов да сгорят в агине

что суть башизмы и почему их любители должны сгореть? :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.