LINUX.ORG.RU

Скрипт с ключами. Помогите разобраться

 , , ,


0

1

Доброго дня! Знаю нубов здесь не любят. Но не у кого спросить а в литературе окончательно запутался. Задача - освоить «ключевание» в скриптах. Поясните пожалуйста на простом примере: запускаем скрипт с параметром пути - он делает ls заданной директории. Запускаем этот же скрипт с параметром пути и ключом -l - он делает ls -l заданной директории. Вот такое напилил:

#!/bin/bash

function ls_1() # функция выполнения первого варианта скрипта
{               # однозначно здесь основная ошибка
n="$1"
ls ${n}
}

function ls_2() {  # функция выполнения второго варианта
ls -l $m
}

if [ $# = 0 ]; then  # по нарытому в инете - если ключ отсутствует,
   ls_1              # то выполняем первую функцию  
fi

while getopts "l:" opt ; 
do
         case $opt in
         l)m=${OPTARG};
           ls_2
         ;;
         *) echo "neverno";
            exit 1
         ;;
         esac
done
скрипт прекрасно работает с ключом. А вот без ключа никак не пойму как его заставить работать. Выдает ls текущей папки, путь не воспринимает. Как правильно всунуть переменную «пути к директории» в первом варианте. Сори за мой нубоязык.

Заранее спасибо!



Последнее исправление: cetjs2 (всего исправлений: 2)

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

Спасибо! А если первая функция например ls ${/какой_то_путь} > /home/какойто.txt то необходимо в первой функции написать Ls > /home/какойто.txt ? Я думаю(сейчас нет возможности проверить) что так работать не будет. Как все таки прицепить входную переменную к первой функции, что бы она работала с этой функцией в случае отсутствия ключа?

dimdiden
() автор топика

скрипт прекрасно работает с ключом. А вот без ключа никак не пойму как его заставить работать. Выдает ls текущей папки, путь не воспринимает.

в этом варианте функции ls_1 передать параметр

# по нарытому в инете - если ключ отсутствует,

не только ключ, но и вообще без параметров. Надо как-то так писать:

if [  "${1::1}" != "-" ]; then
#  если  первый параметр  не начинается  на "-"
emulek
()
Ответ на: комментарий от emulek

Спасибо и тебе, но увы наверное не понял что надо сделать. Пол дня сижу над этим убогим скриптом. И только лишь потому что должен быть простой и распространенный способ реализации опций с ключами и без них, принимая входные аргументы помимо самих ключей при помощи getopts.

Если обнаглеть и попросить кого нибудь тупо написать такой скрипт? Будьте добры, а?

Я решил задачу только колхозным методом, но это блин не вариант же:

#!/bin/bash
n="$1"
m="$2"

if [ $# == 1 ]  #если кол-во аргументов один,...

then

ls ${n}         #...то он собственно и будет путем

fi

if [ $# == 2 ]&&[ ${n} == "-l" ]  # если два, а так же первый "-l"....

then

ls -l ${m}                        #....то второй является путем

else

echo "neverniy vvod"

fi

dimdiden
() автор топика

n=«$1»

Нет. local n="$1" — переменные нужно делать локальными для функции; тогда переменные из вложенных функций не будут затирать их значения.

ls ${n}

Нет. ls -- "${n}" — не раскрывает $n на пробелах и гарантирует, что ls не воспримет $n как флаг, если $n начинается с "-".

[всё остальное]

Нет. http://ideone.com/kRItdo

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