2014-09-17 4 views
1

Вот мой Баш скрипт, очень просто, без мяса в нем в данный момент:Ограничение аргументов Bash?

#!/bin/bash 

NO_ARGUMENTS=0 
ARG_ERROR=10 

if [ $# -eq "$NO_ARGUMENTS" ] 
then 
    echo "Usage: `basename $0` options (-h -C -m)" 
    exit $ARG_ERROR 
fi 

helpscreen() 
{ 
echo 
echo "========================" 
echo "Help Screen:" 
echo "Available Arguments:" 
echo "-h - Displays this screen" 
echo "-C - Complete Install" 
echo "-m - Minimal Install" 
echo "=========================" 
echo 
} 

completeinstall() 
{ 
echo "Complete Install Initiating" 
} 

minimalinstall() 
{ 
echo "Minimal Install Initiating" 
} 

while getopts ":hCm" Option 
do 
    case $Option in 
    h) helpscreen;; 
    C) completeinstall;; 
    m) minimalinstall;; 
    *) echo "Option Not Available.";; 
    esac 
done 

exit 

Как вы можете видеть, что это просто работает варианты, когда ./test.sh -h, -C или -m выбран. Моя проблема в том, что пользователь может выбрать -Cm и запустить его как с полной, так и с минимальной установкой. Как я могу отредактировать это, чтобы прекратить такое событие или ограничить его.

+0

добавить перерыв? 'C) completeinstall; break ;; '? удачи. – shellter

+0

= S Выполнено, что на многих других сценариях просто не так. Решила это = P! Вы можете пойти и отправить это как ответ, если хотите. – Chirality

+0

FYI, один обычный способ сделать это - не передавать эксклюзивные настройки типа «режим» в качестве флагов, а скорее рассматривать исключительные аргументы в качестве подкоманд; то есть. './install complete' или' ./install minimum'; таким образом, нет необходимости в принудительном исполнении, поскольку есть дополнительные флаги. –

ответ

1

Не зацикливайте, так как вас интересует только один вариант.

getopts ":hCm" Option 
case $Option in 
    h) helpscreen;; 
    C) completeinstall;; 
    m) minimalinstall;; 
    *) echo "Option Not Available.";; 
esac 

Или добавьте break в каждый случай.

while getopts ":hCm" Option 
do 
    case $Option in 
    h) helpscreen;  break;; 
    C) completeinstall; break;; 
    m) minimalinstall; break;; 
    *) echo "Option Not Available.";; 
    esac 
done 

exit 
+0

Дожидался, когда стюарс отправится за кредитом, но там вы идете. Он отлично работает! – Chirality

+0

Это более полный ответ. Всем удачи. – shellter