проверьте с помощью ping-запросов список IP, переданного Терминалом

Добрый день! У меня есть этот сценарий:

#!/bin/sh
# Оболонка для ping

# ІНІЦІАЛІЗАЦІЯ ЗМІННИХ 
CONFIG_FILE=$HOME/pingall-hosts # Ім'я конфігураційного файлу
TARGET=                         # Ціль
VERBOSE=off                     # Перемикач говірливості
COUNTER=0                       # Лічильник прозондованих вузлів

# ВИЗНАЧЕННЯ ФУНКЦІЙ
# pingone - Зондує один віддалений вузол
pingone()
{
        ping -n -c3 -l3 -w2 $TARGET; echo
        # Інкремент лічильника прозондованих вузлів
        COUNTER=`expr $COUNTER + 1`
}

# usage - Виводить інформацію про синтаксис 
usage()
{
        echo "usage: `basename $0` [-h] | [<-t target | -c config_file> [-v]]" >&2
}

# before_exit - Виводить прощавальне повідомлення
before_exit()
{
        if [ $VERBOSE = on ]; then
                if [ $COUNTER -eq 1 ]; then
                        ENDING=""
                        COPULA="is"
                else
                        ENDING="s"
                        COPULA="are"
                fi
                echo "$COUNTER host$ENDING $COPULA probed"
                echo "Bye..."
        fi  
}

# read_target - Читає чергову ціль
read_target()
{
        while read TARGET
        do
                if [ ! -z "$TARGET" -a `expr match "$TARGET" "#"` -eq 0 ]; then
                        return 0 # Читання вважається успішним, якщо прочитаний рядок
                                 # не порожній і не містить #
                fi
        done
        return 1
}


# ТІЛО СЦЕНАРІЯ
# Аналіз параметрів
while getopts ht:c:v OPTION
do
        case $OPTION in
        h)
                usage
                exit 0
                ;;
        t)
                TARGET=$OPTARG
                ;;
        c)
                CONFIG_FILE=$OPTARG
                ;;
        v)
                VERBOSE=on
                ;;
        \?) # Невідома опція
                usage
                exit 1  
        esac
done

# Виведення привітання
if [ $VERBOSE = on ]; then
        echo "It's `date +%k:%M:%S` now. Pingall v1.0 is starting..."
fi

# Обробка цілі, явно заданої в командному рядку
if [ ! -z $TARGET ]; then
        pingone
        before_exit
        exit 0
fi

# Обробка конфігураційного файлу
if [ -z $CONFIG_FILE ]; then
        # Конфігураційний файл не заданий
        echo "Configuration file is not defined" >&2
        exit 1
fi
if [ ! -f $CONFIG_FILE ]; then
        # Конфігураційний файл не існує
        echo "Configuration file $CONFIG_FILE is not exist" >&2
        exit 1
fi

# Підключення стандартного потоку введення до конфігураційного файлу
exec 3<&0 0<$CONFIG_FILE

# Зондування цілей, заданих у конфігураційному файлі
while read_target  
do
        pingone
done 

# Відновлення стану стандартного потоку введення
exec 0<&3

# Виведення прощального повідомлення
before_exit

Как может я улучшаться, это, чтобы рассчитать, распечатать сумму успешных тестов и взять аргументы, определило этот путь в Терминале:

sh thisScript.sh 127.0.0.1 127.0.0.1

Спасибо!

-1
задан 13 November 2017 в 12:54

1 ответ

Выполненный

sed -i.bak '/^TARGET=/s/=/="$1"/' /path/to/your/script.sh

изменить строку 6 из него к TARGET="$1", этот путь $TARGET будет присвоен первому аргументу, который Вы даете сценарию. Теперь на Вас может уже назвать его как

/path/to/your/script.sh 127.0.0.1

и это будет действовать, как будто была строка TARGET="127.0.0.1" внутри.

Для запущения скрипта в списке целей, можно использовать, например, a for цикл следующим образом:

for i in 127.0.0.[123] 192.168.10.1; do sh /path/to/your/script.sh $i; done

Это назвало бы сценарий с аргументами 127.0.0.1, 127.0.0.2, 127.0.0.3 и 192.168.10.1 один за другим.

0
ответ дан 1 November 2019 в 05:35

Другие вопросы по тегам:

Похожие вопросы: