Eu sou novo em bash programação. Eu li dois bons e longos guias, mas eles fizeram uma bagunça na minha cabeça sobre operadores e palavras-chave.
Quais são mais comum e amplamente utilizados? Não sei quando usar qual e por quê.
test
,[[ ]]
Ou[ ]
ou mesmo(( ))
$((exp))
ou$[exp]
-gt
ou>
,ge
ou>=
etc.- quando usar
<
e>
ou( )
quando temos que escapar com\:
\<
\(
etc. ==
ou=
(comparações de string)
Eu sei que as diferenças básicas entre [
e [[
outras questões são um mistério para mim.
Agradeço antecipadamente
command-line
bash
programming
scripts
MikeD
fonte
fonte
Respostas:
test
é um shell interno que (obviamente) testa alguma condição. Algumas conchas mais antigas precisam de um comando especial. Então você encontrará também um programa em/usr/bin/test
.[
também é um programa para testar alguma condição. Este software também precisa de um suporte de fechamento e você pode encontrá-lo em/usr/bin/[
.[[…]]
é uma alternativa paratest
e[
. Foi desenvolvido para o shell Korn (ksh
). Mas você também o encontra nas versões do Bash maiores que 2 e no Z Shell. Os colchetes duplos têm alguns recursos bacanas:-a
(AND) ou-o
(OR), você pode usar&&
ou||
.=
pode fazer muito mais.((…))
é equivalente alet
. Então basicamente((expression))
é o mesmo quelet "expression"
. No entanto,let
você pode usar mais de uma expressão, mas os colchetes duplos permitem apenas uma expressão.$((…))
(e também$[…]
) faz algum cálculo. Seu shell tenta calcular a expressão dentro dos chavetas e substitui a expressão pelo resultado. Entãoecho $((1+1))
leva aecho 2
. Então suas conchas imprimem o número 2.Sempre que quiser comparar dois números, use a opção com um traço e duas letras (
-ge
,-lt
etc.). Se você quiser comparar strings, use=
ou!=
.Sua pergunta sobre escapar é bastante difícil de responder. Porque depende do software que você usa além do shell. Então, ou seja,
grep
egrep -E
precisa escapar diferente. Este é também o caso comsed
,awk
e outros. Portanto, a melhor opção é dar uma olhada na página de manual. Depois de algum tempo, você se acostuma e sabe quando usar o escape.fonte
if [ 2 -gt 1 ]; …
é mais comum, porque eu vejo isso mais frequentemente em scripts de shell e, tanto quanto sei, isso é compatível com POSIX.