Você não menciona qual shell você planeja usar, então eu vou assumir o bash, embora estas sejam coisas bem padronizadas em shells.
Argumentos de arquivo
Argumentos podem ser acessados através das variáveis $1
- $n
( $0
retorna o comando usado para executar o programa). Digamos que eu tenha um script que apenas cat
s encontre um número de arquivos com um delimitador entre eles:
#!/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
Neste caso, estamos passando um nome de arquivo para cat. No entanto, se você quisesse transformar os dados no arquivo (sem explicitamente escrever e reescrevê-los), você também poderia armazenar o conteúdo do arquivo em uma variável:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Ler de stdin
No que diz respeito à leitura de stdin, a maioria dos shells tem um padrão bastante natural de read
, embora existam diferenças em como os prompts são especificados (no mínimo).
A página do manual do Bash builtins tem uma explicação bastante concisa de read
, mas eu prefiro a página Bash Hackers .
Simplesmente:
read var_name
Múltiplas Variáveis
Para definir várias variáveis, basta fornecer vários nomes de parâmetros para read
:
read var1 var2 var3
read
colocará uma palavra de stdin em cada variável, colocando todas as palavras restantes na última variável.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Se menos palavras forem inseridas do que variáveis, as variáveis restantes permanecerão vazias (mesmo se previamente definidas):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Prompts
Eu uso -p
flag frequentemente para um prompt:
read -p "Enter filename: " filename
Nota: ZSH e KSH (e talvez outros) usam uma sintaxe diferente para prompts:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Valores padrão
Este não é realmente um truque de read
, mas eu uso muito em conjunto com read
. Por exemplo:
read -p "Y/[N]: " reply
reply=${reply:-N}
Basicamente, se a variável (resposta) existir, retorne a si mesma, mas se ela estiver vazia, retorne o seguinte parâmetro ("N").