Nie wspominasz o tym, jakiej powłoki zamierzasz użyć, więc przyjmuję bash, choć są to dość standardowe rzeczy w różnych powłokach.
Plik argumentów
Dostęp do argumentów można uzyskać za pomocą zmiennych $1
- $n
( $0
zwraca polecenie użyte do uruchomienia programu). Powiedzmy, że mam skrypt, który cat
wyrzuca n liczby plików z separatorem między nimi:
#!/usr/bin/env bash
#
# Parameters:
# 1: string delimiter between arguments 2-n
# 2-n: file(s) to cat out
for arg in ${@:2} # $@ is the array of arguments, ${@:2} slices it starting at 2.
do
cat $arg
echo $1
done
W tym przypadku przekazujemy nazwę pliku do cat. Jeśli jednak chcesz przekształcić dane w pliku (bez wyraźnego zapisywania i przepisywania), możesz również zapisać zawartość pliku w zmiennej:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Czytaj ze standardowego
Jeśli chodzi o czytanie ze standardowego wejścia, większość powłok ma dość standardowe read
wbudowanie, chociaż istnieją różnice w sposobie określania podpowiedzi (przynajmniej).
Strona podręcznika wbudowanego Bash ma dość zwięzłe wyjaśnienie read
, ale ja wolę stronę hakerów Bash .
Po prostu:
read var_name
Wiele zmiennych
Aby ustawić wiele zmiennych, wystarczy podać wiele nazw parametrów, aby read
:
read var1 var2 var3
read
umieści następnie jedno słowo ze stdin w każdej zmiennej, zrzucając wszystkie pozostałe słowa do ostatniej zmiennej.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Jeśli wprowadzonych zostanie mniej słów niż zmiennych, pozostałe zmienne pozostaną puste (nawet jeśli zostały wcześniej ustawione):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Monity
-p
Często używam flagi do pytania:
read -p "Enter filename: " filename
Uwaga: ZSH i KSH (i być może inne) używają innej składni monitów:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Wartości domyślne
To naprawdę nie jest read
sztuczka, ale używam jej często w połączeniu z read
. Na przykład:
read -p "Y/[N]: " reply
reply=${reply:-N}
Zasadniczo, jeśli zmienna (odpowiedź) istnieje, zwróć się, ale jeśli jest pusta, zwróć następujący parametr („N”).