Obecnie próbuje napisać skrypt Case zapętla, który pasuje do różnych przypadków do wykonania skryptów. Jednak nie jestem pewien, jak wyłączyć argumenty w sprawach po dopasowaniu przypadków! To właśnie mam, ale nie działa. Jestem nowy, żeby bash, dzięki czemu z góry!

Edytować: Zmieniłem się na ${@:2}, ale kiedy wejdę delete text.txt lub open x, otrzymuję Error. Myślę, że program nie jest w stanie odczytać reszty wejścia.

Prowadzę skrypt zapętlony w wierszu poleceń -

./loop.sh

Wtedy wpisuję

open John 

Skrypt open.sh działa, aby utworzyć nowy katalog z nazwą następującego argumentu. Działa ręcznie - typ {x1}} i utworzone jest katalog o nazwie John. Tutaj chcę wpisać open John, który wchodzi do pętli, pasuje do obudowy open, a następnie umieszcza John po polecenia, aby uruchomić skrypt i utworzyć katalog.

Jeśli wpiszę ./loop.sh

Następnie open pasuje do tego. Ale nie można uruchomić skryptu, ponieważ skrypt wymaga argumentu

#!/bin/bash

while true; do
        read request
        case $request in
         open)
                 ./open.sh "${@:2}"
                ;;
        delete)
                 ./delete.sh "${@:2}"
                ;;
        *)
           echo "Error"
                exit 1
       esac
done
0
Michelle 22 listopad 2020, 16:48

1 odpowiedź

Najlepsza odpowiedź

Musisz podzielić wiersz poleceń wprowadzony jako request w oddzielne argumenty. Jednym ze sposobów na to jest wbudowanie set Shell, patrz np. Koniec https://www.gnu.org /software/bash/manual/html_node/the-set-builtin.html.

Przykładowy skrypt:

#!/bin/bash

while true; do
        read request
        # split into positional parameters $1, $1, ...
        set -- $request
        # the first word is now $1
        case "$1" in
        open)
                ./open.sh "${@:2}"
                ;;
        delete)
                ./delete.sh "${@:2}"
                ;;
        *)
           echo "Error" >&2
                exit 1
       esac
done
1
Bodo 22 listopad 2020, 16:23