Você não menciona qual shell planeja usar, portanto, assumirei o bash, embora essas sejam coisas bastante comuns entre os shells.
Argumentos de arquivo
Os 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 cat
exiba n 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
Nesse caso, estamos passando um nome de arquivo para cat. No entanto, se você quiser transformar os dados no arquivo (sem gravá-los e gravá-los explicitamente), também poderá armazenar o conteúdo do arquivo em uma variável:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Leia de stdin
Quanto à leitura do stdin, a maioria dos shells possui um padrão bastante read
embutido, embora existam diferenças na forma como os prompts são especificados (no mínimo).
A página de manual do Bash builtins tem uma explicação bastante concisa read
, mas eu prefiro a página do Bash Hackers .
Simplesmente:
read var_name
Várias 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, despejando 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 demais variáveis ficarão vazias (mesmo se definidas anteriormente):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Comandos
Eu uso -p
frequentemente o sinalizador para um prompt:
read -p "Enter filename: " filename
Nota: ZSH e KSH (e talvez outros) usam uma sintaxe diferente para avisos:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Valores padrão
Isso não é realmente um read
truque, mas eu o 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 estiver vazia, retorne o seguinte parâmetro ("N").