Добавить функцию в bash скрипт

Искусство написания bash скриптов. Делимся своими наработками
Ответить
karpov79
Сообщения: 3
Зарегистрирован: 23 май 2015, 11:02
Темы: 1
Статус: Не в сети

Добавить функцию в bash скрипт

Сообщение karpov79 » 23 май 2015, 11:06

Есть скрипт рабочий,нужно добавить функцию чтоб каждый раз при запуске запрашивал имя домена.
Подскажите как реализовать что-то типа такого:

read -p "=> Введите имя домена:" $

Сам скрипт

Код: Выделить всё

#!/bin/bash
# /opt/generatedkim.sh
die () {
echo >&2 "$@"
exit 1
}

[ "$#" -eq 1 ] || die "1 argument required, $# provided, domain required, ex: ./script example.com"

cwd=`pwd`
opendkim="/etc/opendkim"
location="$opendkim/keys/$1"
[ -d "$location" ] && die "There is already a directory in the folder, delete the folder if you want to create a new one"

mkdir -p "$location"
cd "$location"
opendkim-genkey -d $1 -s mail
chown opendkim:opendkim *
chown opendkim:opendkim "$location"
chmod u=rw,go-rwx *
echo "$1 $1:mail:$location/mail.private" >> "$opendkim/KeyTable"
echo "*@$1 $1" >> "$opendkim/SigningTable"
echo "$1" >> "$opendkim/TrustedHosts"
echo "mail.$1" >> "$opendkim/TrustedHosts"
echo
echo "Put this in the DNS ZONE for domain: $1"
echo
cat "$location/mail.txt"
echo
cd "$cwd"
P.s Хочу добавить это в меню другого скрипта

Аватара пользователя
ZEN
Администратор
Сообщения: 1349
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Re: Добавить функцию в bash скрипт

Сообщение ZEN » 23 май 2015, 13:49

Такой вариант подойдет?

Код: Выделить всё

zen@intel:/tmp$ cat 1.sh 
#!/usr/bin/env bash

function input_domain() {
    local DOMAIN="";
    read -p "=> Введите имя домена: " DOMAIN;
    test -n "$DOMAIN" || return 1;
    echo $DOMAIN;
}


DOMAIN=$(input_domain) || {
    echo "[ОШИБКА!] Не указан домен" 1>&2;
    exit 1;
}

echo "Был введен $DOMAIN домен";

exit 0;

zen@intel:/tmp$ ./1.sh 
=> Введите имя домена: 
[ОШИБКА!] Не указан домен
zen@intel:/tmp$ ./1.sh 
=> Введите имя домена: example.com
Был введен example.com домен
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

karpov79
Сообщения: 3
Зарегистрирован: 23 май 2015, 11:02
Темы: 1
Статус: Не в сети

Re: Добавить функцию в bash скрипт

Сообщение karpov79 » 23 май 2015, 14:49

Спасибо конечно,как бы твой вариант прикрутить.Пробую ошибку выдает.

Аватара пользователя
ZEN
Администратор
Сообщения: 1349
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Re: Добавить функцию в bash скрипт

Сообщение ZEN » 23 май 2015, 14:54

Попробуй вот так:

Код: Выделить всё

#!/usr/bin/env bash

function input_domain() {
    local DOMAIN="";
    read -p "=> Enter domain name: " DOMAIN;
    test -n "$DOMAIN" || return 1;
    echo $DOMAIN;
}

function die() {
    echo >&2 "$@"
    exit 1
}

DOMAIN=$(input_domain) || die "Incorrect domain name!";

cwd=`pwd`
opendkim="/etc/opendkim"
location="$opendkim/keys/$DOMAIN"
[ -d "$location" ] && die "There is already a directory in the folder, delete the folder if you want to create a new one"

mkdir -p "$location"
cd "$location"
opendkim-genkey -d $DOMAIN -s mail
chown opendkim:opendkim *
chown opendkim:opendkim "$location"
chmod u=rw,go-rwx *
echo "$DOMAIN $DOMAIN:mail:$location/mail.private" >> "$opendkim/KeyTable"
echo "*@$DOMAIN $DOMAIN" >> "$opendkim/SigningTable"
echo "$DOMAIN" >> "$opendkim/TrustedHosts"
echo "mail.$DOMAIN" >> "$opendkim/TrustedHosts"
echo
echo "Put this in the DNS ZONE for domain: $DOMAIN"
echo
cat "$location/mail.txt"
echo
cd "$cwd"

exit 0;

бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

karpov79
Сообщения: 3
Зарегистрирован: 23 май 2015, 11:02
Темы: 1
Статус: Не в сети

Re: Добавить функцию в bash скрипт

Сообщение karpov79 » 23 май 2015, 16:01

Работает, +++

Еще так тоже.. .

Код: Выделить всё

#!/bin/bash
# /opt/generatedkim.sh
while [ "$#" -ne 1 ] 
do
    read -p "=> Введите имя домена: "
    set -- $REPLY
done    
 
opendkim="/etc/opendkim"
location="$opendkim/keys/$1"
 
if [ -s "$location" ] 
then 
    echo -n "Директория для домена $1 существует, перезаписать? (yes/[N]o): "
    read -n 1 renew
    if [[ ${renew:-n} != [YyДд] ]]
    then
        exit 1
    else
        rm -rf "$location"/*
        have_before=true
    fi
fi
mkdir -p "$location"
cd "$location"
 
opendkim-genkey -d $1 -s mail
chown -R opendkim:opendkim .
chmod u=rw,go-rwx *
 
if ! ${have_before:-false}
then
    echo "$1 $1:mail:$location/mail.private" >> "$opendkim/KeyTable"
    echo "*@$1 $1" >> "$opendkim/SigningTable"
    echo "$1" >> "$opendkim/TrustedHosts"
    echo "mail.$1" >> "$opendkim/TrustedHosts"
fi
 
echo
echo "Put this in the DNS ZONE for domain: $1"
echo
cat "$location/mail.txt"
echo

Помог,добавил на будущее в закладки.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость