2013-09-15 3 views
1

Я только что начал использовать UNIX и возникли проблемы с попыткой реализовать getopts.UNIX basic getopts problem

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

Может кто-нибудь дать мне какие-либо полезные советы, она была бы оценена

function moveToBin(){ 

while getopts i opt 
do 
    case $opt in 
    i) echo "file removed!" ;; 
esac 
done 

if [[ -e $1 ]]; then 
    inode=$(ls -i $i | cut -d " " -f1) 
    name=$1_$inode 
    pathOfFile=$(pwd $1) 
    restoreEntry=$1_$inode:$pathOfFile/$1 

     mv $1 ~/deleted 
     mv ~/deleted/$1 ~/deleted/$name 
      echo "Before extension code" 
       extension=$(find ~ -inum $inode) 
fi 
+1

Я бы очень не хотел использовать 'getopts' в функции. После цикла 'getopts' вам понадобится' shift $ (($ OPTIND - 1)) 'для удаления опций, обработанных' getopts'. Затем вам нужно проверить, что осталось «$ 1» (и что должна делать ваша функция, если есть также «$ 2»), если у вас есть 'для файла в« $ @ »цикл вокруг' if' или вы должны проверить и отклонить дополнительные аргументы? Было бы более обнадеживающим, если бы вы опубликовали полную функцию, в вашем коде отсутствует хотя бы '}', и кто знает, что еще. Рекомендуется использовать двойные кавычки вокруг аргументов имени файла защищать от пробелов. –

ответ

1
while getopts ...; do 
    ... 
done 

getopts будет разбирать варианты и их возможные аргументы. Он перестанет анализировать первый аргумент без аргумента (строка, которая не начинается с дефиса (-), который не является аргументом для любой опции перед ним). Он также прекратит синтаксический анализ, когда видит -- (двойной дефис), что означает конец опций.

Смежные вопросы