2016-01-10 17 views
0

Я создал сценарий оболочки, который имеет 1 обязательный аргумент. Я хочу, чтобы сценарий запускался только в том случае, если присутствует один аргумент, иначе он будет завершен.Проверка наличия аргумента командной строки

Вот мой код:

#!/bin/bash 

branch=stable 

# Custom options/arguments 
usage() { # usage code } 

while getopts ":bs:" opt; do 
    case $opt in 
     b) 
      branch=development 
      ;; 
     s) 
      site=${OPTARG} 
      ;; 
     *) 
      usage 
      ;; 
    esac 
done 

shift $((OPTIND-1)) 

if [ -z "${s}" ]; then 
    echo " 
     $(tput setaf 1)ERROR: 
     =========================$(tput sgr0) 
     $(tput setaf 6)No website name provided: 
      Format: <example.com>$(tput sgr0) 
    " 
    exit 1; 
fi 

# Rest of the code to run when there are no errors - not putting here as it's irrelevant 

Так что я бы ожидать, что, когда я бегу sudo ./nginx-install.sh было бы увидеть там нет аргументов и показать сообщение об ошибке - что делает. Но когда я делаю sudo ./nginx-install.sh -s example.com, я просто получаю сообщение об ошибке снова, когда действительно ожидаю, что остальная часть кода будет запущена.

Может кто-нибудь указать, где я ошибаюсь в коде? Я новичок в создании сценариев bash, поэтому в основном отвечал на запросы Google о помощи.

Спасибо.

ответ

0

Вы присвоить значение $site, не $s. Переменная $s остается пустой за все время.

+0

Спасибо @choroba - Я был не за горами! –

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