Esses são chamados de operadores de shell e, sim, existem mais deles. Vou dar uma breve visão geral dos mais comuns entre as duas principais classes, operadores de controle e operadores de redirecionamento , e como eles funcionam com relação ao shell bash.
&&
: Usado para criar listas AND, ele permite que você execute um comando apenas se outro sair com êxito.
command1 && command2
Aqui, command2
será executado após a command1
conclusão e somente se command1
for bem-sucedido (se o código de saída for 0). Ambos os comandos são executados em primeiro plano.
Este comando também pode ser escrito
if command1
then command2
else false
fi
ou simplesmente if command1; then command2; fi
se o status de retorno for ignorado.
||
: Usado para criar listas OR, ele permite executar um comando apenas se outro sair sem êxito.
command1 || command2
Aqui, command2
só será executado se houver command1
falha (se ele retornar um status de saída diferente de 0). Ambos os comandos são executados em primeiro plano.
Este comando também pode ser escrito
if command1
then true
else command2
fi
ou de forma mais curta if ! command1; then command2; fi
.
Observe que &&
e ||
são associativos à esquerda; consulte Precedência dos operadores lógicos do shell &&, || Para maiores informações.
!
: É uma palavra reservada que atua como operador "not" (mas deve ter um delimitador), usada para negar o status de retorno de um comando - retorne 0 se o comando retornar um status diferente de zero, retorne 1 se retornar o status 0 Também um NÃO lógico para o test
utilitário.
! command1
[ ! a = a ]
E um verdadeiro operador NOT dentro de Expressões Aritméticas:
$ echo $((!0)) $((!23))
1 0
Isso permite que você controle a entrada e a saída de seus comandos. Eles podem aparecer em qualquer lugar dentro de um comando simples ou podem seguir um comando. Os redirecionamentos são processados na ordem em que aparecem, da esquerda para a direita.
<
: Fornece entrada para um comando.
command < file.txt
O acima será executado command
no conteúdo de file.txt
.
<>
: igual ao acima, mas o arquivo está aberto no modo de leitura + gravação em vez de somente leitura :
command <> file.txt
Se o arquivo não existir, ele será criado.
Esse operador raramente é usado porque os comandos geralmente são lidos apenas pelo stdin, embora possam ser úteis em várias situações específicas .
>
: Direciona a saída de um comando para um arquivo.
command > out.txt
O acima irá salvar a saída de command
como out.txt
. Se o arquivo existir, seu conteúdo será sobrescrito e, se não existir, será criado.
Esse operador também é frequentemente usado para escolher se algo deve ser impresso com erro padrão ou saída padrão :
command >out.txt 2>error.txt
No exemplo acima, >
redirecionará a saída padrão e 2>
redirecionará o erro padrão. A saída também pode ser redirecionada usando 1>
, mas, como esse é o padrão, 1
ele geralmente é omitido e é escrito simplesmente como >
.
Assim, para executar command
no file.txt
e salvar sua saída em out.txt
e quaisquer mensagens de erro em error.txt
que você deve executar:
command < file.txt > out.txt 2> error.txt
>|
: Faz o mesmo que >
, mas substituirá o destino, mesmo que o shell tenha sido configurado para recusar a substituição (com set -C
ou set -o noclobber
).
command >| out.txt
Se out.txt
existir, a saída de command
substituirá seu conteúdo. Se não existir, será criado.
>>
: Faz o mesmo que >
, exceto que, se o arquivo de destino existir, os novos dados serão anexados.
command >> out.txt
Se out.txt
existir, a saída de command
será anexada a ele, depois do que já estiver nele. Se não existir, será criado.
&>
, >&
, >>&
E &>>
: (não padronizada). Redirecione o erro padrão e a saída padrão, substituindo ou anexando, respectivamente.
command &> out.txt
O erro padrão e a saída padrão command
serão salvos out.txt
, substituindo seu conteúdo ou criando-o se ele não existir.
command &>> out.txt
Como acima, exceto que, se out.txt
existir, a saída e o erro de command
serão anexados a ele.
A &>
variante se origina em bash
, enquanto a >&
variante vem do csh (décadas antes). Ambos conflitam com outros operadores de shell POSIX e não devem ser usados em sh
scripts portáteis .
<<
: Um documento aqui. É frequentemente usado para imprimir seqüências de várias linhas.
command << WORD
Text
WORD
Aqui, command
levará tudo até encontrar a próxima ocorrência de WORD
, Text
no exemplo acima, como entrada. Embora WORD
seja frequente EoF
ou variada, pode ser qualquer string alfanumérica (e não apenas) que você desejar. Quando WORD
é citado, o texto no documento aqui é tratado literalmente e nenhuma expansão é executada (em variáveis, por exemplo). Se não estiver entre aspas, as variáveis serão expandidas. Para mais detalhes, consulte o manual do bash .
Se você deseja canalizar a saída command << WORD ... WORD
diretamente para outro comando ou comandos, terá que colocar o canal na mesma linha que << WORD
, não poderá colocá-lo após o WORD final ou na linha seguinte. Por exemplo:
command << WORD | command2 | command3...
Text
WORD
<<<
: Aqui strings, semelhantes aos documentos aqui, mas destinadas a uma única linha. Eles existem apenas na porta Unix ou rc (onde se originou), zsh, algumas implementações de ksh, yash e bash.
command <<< WORD
Tudo o que é dado como WORD
é expandido e seu valor é passado como entrada para command
. Isso geralmente é usado para passar o conteúdo de variáveis como entrada para um comando. Por exemplo:
$ foo="bar"
$ sed 's/a/A/' <<< "$foo"
bAr
# as a short-cut for the standard:
$ printf '%s\n' "$foo" | sed 's/a/A/'
bAr
# or
sed 's/a/A/' << EOF
$foo
EOF
Isso abrange apenas os operadores mais comuns de conchas do tipo Bourne. Alguns shells possuem alguns operadores de redirecionamento adicionais próprios.