вызов различных функций с помощью getopts с помощью bash - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь понять, как я могу иметь несколько функций в одном скрипте и выбрать функцию с аргументом. Кажется, проблема в том, что если я выбираю функцию, то optarg не запускается со сценарием. в этом примере я бы запустить скрипт как таковой ~ # ./script.sh -a -c wordlist.txt чтобы запустить только первую функцию со списком слов по выбору такой же как ~ # ./script.sh -b -c wordlist.txt

#!/bin/bash

one()
{
for i in $(cat $wordlist); do
  wget http://10.10.10.10/$i
}

two()
{
for i in (cat $wordlist); do
  curl http://10.10.10.10/$i
}

while getopts "abc:" option; do
 case "${option}" in
    c) wordlist=${OPTARG} ;;
    a) one;;
    b) two;;
  esac
done

1 Ответ

4 голосов
/ 06 марта 2019

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

Обратите внимание, что one и two можно заменить одной функцией, параметризованной параметромпрограмма (wget или curl) для запуска;пока вы это делаете, передайте список слов в качестве аргумента.

get_it () {
    # $1 - program to run to fetch a URL
    # $2 - list of words to build URLs
    while IFS= read -r line; do
        "$1" http://10.10.10.10/"$line"
    done < "$2"
}

while getopts "abc:" option; do
 case "${option}" in
    c) wordlist=${OPTARG} ;;
    a) getter=wget;;
    b) getter=curl;;
  esac
done

get_it "$getter" "$wordlist"
...