LINUX.ORG.RU

Нужна помощь с составлением враппера (bash, sh) с ключами

 ,


1

2

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

scriptname.sh --start (-S)# запуск 1-й команды
scriptname.sh --stop (-s)# запуск 2-й команды
scriptname.sh --restart (-r) # запуск 3-й команды
А может, мне и не ключи нужны, а что-то другое. В общем, прошу совета как мне лучше поступить, потому что вводить все время три разных команды не удобно. Всем спасибо!



Последнее исправление: Max0n (всего исправлений: 1)

И что, будешь смело просить за тебя каждый скипт из 3 строчек написать? Прочти man sh, там всё есть. Тебе нужен case.

slovazap ★★★★★
()

что-то вроде


case $1 in
  --start|-S)
    # инструкции
    ;;
  --stop|-s)
    # и т.д.
esac

Deleted
()
#!/bin/sh

while getopts ":sSr" opt; do
	case $opt in
	s)	echo "start"
		;;
	S)	echo "stop"
		;;
	r)	echo "restart"
		;;
	*)	echo "Whut?"
		;;
	esac
done
beastie ★★★★★
()
#!/usr/bin/env python2

from __future__ import print_function, division, unicode_literals

from sys import argv, stderr, exit
from sh import vikluchit_servak, vkluchit_servak, start_raketi

START_COMMANDS = ['--start', '-S']
STOP_COMMANDS = ['--stop', '-s']
RAKETI_COMMANDS = ['--launch', '-l']

if __name__ == '__main__':
    all_commands = START_COMMANDS + STOP_COMMANDS + RAKETI_COMMANDS
    
    # exit with error if there is not exactly 1 argument
    # or if the argument is not one of the allowed commands
    if len(argv) != 2 or argv[1] not in all_commands:
        print("Error: bad arguments", file=stderr)
        print("argv = {0}".format(argv))
        exit(1)
    
    command = argv[1]
    if command in START_COMMANDS:
        print(vkluchit_servak("--start", "--login=topkek"))
    elif command in STOP_COMMANDS:
        print(vikluchit_servak("-h", "0"))
    elif command in RAKETI_COMMANDS:
        print(start_raketi("--target", "white_house"))
    else:
        print("This should never happen", file=stderr)
        exit(100)

Не забудь установить pip и сделать sudo -H pip install sh

hlebushek ★★
()
Последнее исправление: hlebushek (всего исправлений: 1)

Как вариант:

case `basename "$0"` in
    'myservice_start') ...;;
    'myservice_stop') ...;;
    'myservice_restart') ...;;
    ...
esac

и

$ ln -s myservice_start myservice_stop
$ ln -s myservice_start myservice_restart
vsemnazlo
()
Ответ на: комментарий от hlebushek

У меня стоит питон 2, бинарника python2 нету. Тебе правильно посоветовали.

slovazap ★★★★★
()
Ответ на: комментарий от hlebushek

взрыв мозга просто. Такой достаточно большой и запутанный скрипт, да еще и на питоне.... Спасибо за отклик, конечно, но я пожалуй воспользуюсь вариантами выше.

Max0n
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.