Operadores de comparação e expressão Bash

11

Eu sou novo em programação bash. Eu li dois guias bons e longos, mas eles fizeram uma bagunça na minha cabeça sobre operadores e palavras-chave.

Quais são mais comumente e amplamente usados? Não sei quando usar qual e por quê.

  1. test , [[ ]] ou [ ] ou mesmo (( ))
  2. $((exp)) ou $[exp]
  3. -gt ou > , ge ou >= etc.
  4. quando usar < e > ou ( ) e quando tivermos que escapar com \: \< \( etc.
  5. == ou = (comparações de string)

Eu sei as diferenças básicas entre [ e [[ , mas outras questões são um mistério para mim.

Obrigado antecipadamente

    
por MikeD 27.03.2013 / 19:27

1 resposta

5

  • test é um shell embutido que (obviamente) testa para alguma condição dada. Algumas shells 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 colchete de fechamento e você pode encontrá-lo em /usr/bin/[ .
  • [[…]] é uma alternativa para test e [ . Foi desenvolvido para o shell Korn ( ksh ). Mas você também o encontra em versões Bash maiores que 2 e no Z Shell. Os colchetes duplos possuem alguns recursos interessantes:
    • O shell não faz nenhuma divisão de palavras ou expansão de nome de arquivo.
    • Você não precisa de citações.
    • Em vez de -a (AND) ou -o (OR), você pode usar && ou || .
    • O = pode fazer muito mais.
  • ((…)) é equivalente a let . Então, basicamente ((expression)) é o mesmo que let "expression" . No entanto, com let , você pode usar mais de uma expressão, mas as chaves duplas permitem apenas uma expressão.
  • $((…)) (e também $[…] ) faz algum cálculo. Você shell tenta calcular a expressão dentro das chaves e substitui a expressão com o resultado. Então, echo $((1+1)) leva a echo 2 . Então suas conchas imprimem o número 2.

Sempre que você 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 o escape é bem difícil de responder. Porque depende do software que você usa além do shell. Então, por exemplo, grep e grep -E precisam de escape diferente. Esse também é o caso de sed , awk e outros. Então a melhor opção é dar uma olhada na manpage. Depois de algum tempo você se acostuma e sabe quando usar o escape.

    
por qbi 29.03.2013 / 22:05