Polecenie powłoki oraz wszelkie argumenty do tego polecenia pojawiają się jako ponumerowanych zmienne powłoki: $0
ma wartość ciągu samego polecenia, coś podobnego script
, ./script
, /home/user/bin/script
czy cokolwiek innego. Wszelkie argumenty pojawiają się "$1"
, "$2"
, "$3"
i tak dalej. Liczba argumentów znajduje się w zmiennej powłoki "$#"
.
Typowe sposoby radzenia sobie z tym obejmują polecenia powłoki getopts
i shift
. getopts
jest bardzo podobny do getopt()
funkcji biblioteki C. shift
przenosi wartość $2
na $1
, $3
do $2
i tak dalej; $#
ulega zmniejszeniu. Kod kończy się na sprawdzeniu wartości "$1"
, robieniu rzeczy przy użyciu case
… w esac
celu podjęcia decyzji o działaniu, a następnie robieniu shift
przejścia $1
do następnego argumentu. Musi to tylko zbadać $1
i być może $#
.
getopt()
jest niezwykle ugruntowanym standardem, alegetopt
plik wykonywalny nie jest taki sam dla dystrybucji / platformy. Jestem teraz w pełni przekonwertowanymgetopts
użytkownikiem, ponieważ jest to standard POSIX. Działa świetniedash
również z , która jest moją ulubioną powłoką skryptowąMożesz uzyskać dostęp do przekazanych argumentów,
$n
gdzie gdzien
jest numer argumentu -1, 2, 3, ...
. Przekazujesz argumenty tak jak w przypadku każdego innego polecenia.źródło
Możesz także przekazać dane wyjściowe jednego skryptu powłoki jako argument do innego skryptu powłoki.
W skrypcie powłoki można uzyskać dostęp do argumentów o liczbach takich jak
$1
pierwszy argument i$2
drugi argument i tak dalej.Więcej na temat argumentów powłoki
źródło
Formularz
jest najwygodniejszy dla
argv
. Separator arg jest spacją, ale można go zmienić. Nie pamiętam, jak z ręki. Następnie użyjkontrolować przepływ. Zwykle nie przyjmuję getoptów, jeśli
case ... esac
wystarczy testament.źródło
W skrypcie bash osobiście lubię używać następującego skryptu do ustawiania parametrów:
W tej strukturze nie polegamy na kolejności parametrów, ponieważ definiujemy kluczową literę do każdego z nich. Ponadto funkcja pomocy będzie drukowana za każdym razem, gdy parametry zostaną źle zdefiniowane. Jest to bardzo przydatne, gdy mamy do czynienia z wieloma skryptami o różnych parametrach. Działa w następujący sposób:
źródło
myargument
zostaje w$1
środkumyscript
.źródło
W skrypcie powłoki; staje się nazwą zmiennej $ 1. Drugie słowo staje się nazwą zmiennej $ 2 i tak dalej.
Więcej można znaleźć w podręczniku powłoki (sh) na stronie http://heirloom.sourceforge.net/sh/sh.1.html
źródło
Jeśli jesteś zaznajomiony z Python Argparse i nie masz nic przeciwko wywoływaniu Pythona w celu analizy argumentów bash, użyj bash argparse ( https://github.com/mattbryson/bash-arg-parse ),
Zobacz tę samą odpowiedź tutaj: https://stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287
źródło
źródło
2> /dev/null
, 2) nie dodaje niczego do istniejących odpowiedzi.