[Bash]Skrypt, w którym wybiera się dane opcje - wzór

Witam :slight_smile:

Pracuję obecnie nad Apache oraz Webminem - chciałabym stworzyć skrypt włączający/wyłączający .service, który wyglądałby mniej więcej tak:

Chcesz włączyć (1) czy wyłączyć (2) Apache oraz Webmin?
Odpowiedź: (1 lub 2)

W przypadku 1 byłaby taka komenda:

sudo systemctl start httpd.service && sudo systemctl start webmin.service && exit

W przypadku 2:

sudo systemctl stop httpd.service && sudo systemctl stop webmin.service && exit

Może też być inaczej, sądzę, iż to jest troszeczkę trudniejsze:

Chcesz włączyć (1) czy wyłączyć (2) Apache lub/i Webmin?
Odpowiedź: (1 lub 2)
Które z nich chcesz włączyć (w przypadku odpowiedzi pierwszej)/wyłączyć (w przypadku odpowiedzi drugiej): Apache (1) lub/i Webmin (2)?
Odpowiedź: (1/2 lub enter, by wszystko włączyć/wyłączyć)

Mam nadzieję, że to, co napisałam, jest zrozumiałe… :). Oczywiście wszystko do pliku z rozszerzeniem .sh.

Dziękuję i pozdrawiam, Amaterasu :).

Wykorzystaj wbudowane polecenie read. Poczytaj też o echo i składni Basha - możesz to zrealizować zwykłym if-then-else-fi.

Ja tam się nie znam, ale takie coś powinno załatwić sprawę:

#!/bin/bash
echo "Chcesz włączyć (1) czy wyłączyć (2) Apache oraz Webmin?"
echo "Odpowiedź: (1 lub 2)"
read d
case "$d" in
"1") sudo systemctl start httpd.service && sudo systemctl start webmin.service && exit ;;
"2") sudo systemctl stop httpd.service && sudo systemctl stop webmin.service && exit ;;
esac

 

Dzięki ślicznie, już zrobiłam skrypt wczoraj na podstawie innego skryptu i wyszedł superowo :).

To można zrobić czytelniej, wg mnie z menu wyboru.

 

1. Włącz Apache
2. Wyłącz Apache
3. Włącz Webmin
4. Wyłącz Webmin
5. Włącz Apache i Webmin
6. Wyłącz Apache i Webmin
7. Zakończ skrypt

 

#!/bin/sh
menu ()
{
echo -e "1. Włącz Apache\n2. Wyłącz Apache\n3. Włącz Webmin\n4. Wyłącz Webmin\5. Włącz Apache i Webmin\n6. Wyłącz Apache i Webmin\n7. Zakończ skrypt"
echo -n "Wybierz opcję: "
read x
case "$x" in
"1") sudo systemctl start httpd ;;
"2") sudo systemctl stop httpd ;;
itd.
"5") sudo systemctl start httpd && sudo systemctl start webmin ;;
"6") sudo systemctl stop httpd && sudo systemctl stop webmin ;;
*)echo "Nic nie wybrałeś" ;;
esac
menu
}
menu

Przenoszę do odpowiedniego działu.

Ja zrobiłam to tak:

#!/bin/bash

#Colors
RED='\033[0;31m'
NC='\033[0m'

	function starthttpdwebmin() {
		command sudo systemctl start httpd.service && sudo systemctl start webmin.service && { printf "Usługi zostały włączone. Adres URL wirtualnego serwera Apache: localhost, zdalna konfiguracja urządzenia znajduje się na stronie https://localhost.localdomain:10000/. Podstawowe informacje dotyczące logowania: root (login) oraz hasło administratora systemu. \n"; }
}

	function stophttpdwebmin() {
		command sudo systemctl stop httpd.service && sudo systemctl stop webmin.service && { printf "Serwer Apache został wyłączony, zdalna konfiguracja urządzenia nie jest już możliwa.\n"; }
}
            
	function starthttpd() {
		command sudo systemctl start httpd.service && { printf "Serwer Apache został włączony. Strona URL: localhost. \n"; }
}

	function stophttpd() {
        command sudo systemctl stop httpd.service && { printf "Serwer Apache został wyłączony. \n"; }
}

    function startwebmin() {
        command sudo systemctl start webmin.service && { printf "Webmin został włączony. Zdalna konfiguracja urządzenia jest możliwa na stronie: https://localhost.localdomain:10000/. Login: root, hasło administratora systemu.\n"; }
}

function stopwebmin() {
        command sudo systemctl stop webmin.service && { printf "Webmin został wyłączony. Zdalna konfiguracja urządzenia nie jest już możliwa. \n"; }
}


PS3='Proszę wpisać liczbę: '
options=("Włącz serwer Apache i zdalną konfigurację Webmin" "Wyłącz serwer Apache i zdalną konfigurację Webmin" "Włącz serwer Apache" "Wyłącz serwer Apache" "Włącz zdalną konfigurację Webmin" "Wyłącz zdalną konfigurację Webmin" "Wyjdź")
select opt in "${options[@]}"
do
    case $opt in
        "Włącz serwer Apache i zdalną konfigurację Webmin")
            printf "${RED}Proszę wpisać hasło użytkownika. Usługi zostaną dopiero wtedy włączone.${NC}\n"
	    starthttpdwebmin
            ;;
        "Wyłącz serwer Apache i zdalną konfigurację Webmin")
            printf "${RED}Proszę wpisać hasło użytkownika. Usługi zostaną dopiero wtedy wyłączone.${NC}\n"
	    stophttpdwebmin
            ;;
        "Włącz serwer Apache")
            printf "${RED}Proszę wpisać hasło użytkownika. Serwer Apache zostanie dopiero wtedy włączony.${NC}\n"
        starthttpd
            ;;
        "Wyłącz serwer Apache")
            printf "${RED}Proszę wpisać hasło użytkownika. Serwer Apache zostanie dopiero wtedy wyłączony.${NC}\n"
        stophttpd
            ;;
        "Włącz zdalną konfigurację Webmin")
            printf "${RED}Proszę wpisać hasło użytkownika. Usługa Webmin zostanie dopiero wtedy włączona.${NC}\n"
        startwebmin
            ;;
        "Wyłącz zdalną konfigurację Webmin")
            printf "${RED}Proszę wpisać hasło użytkownika. Usługa Webmin zostanie dopiero wtedy wyłączona.${NC}\n"
        stopwebmin
            ;;
        "Wyjdź")
            exit 0
            ;;
        *) echo Niewłaściwa opcja.;;
    esac
done

Trochę bardziej dopieszczone i z tego, co widzę, trochę inne. Chyba całkiem inne :D.

Dziękuję za pomoc i pozdrawiam, Amaterasu :).