🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

O que é o Dash, o shell padrão do Ubuntu? Um guia completo de uso e diferenças com o Bash

Se você usa o Ubuntu, talvez já tenha ouvido falar do Dash (dash). A existência do Dash é especialmente importante ao escrever scripts de shell. Embora o shell que a maioria dos usuários usa diariamente seja o Bash, nos bastidores do sistema Ubuntu, o Dash está em pleno funcionamento. Neste artigo, vamos explicar de forma clara para iniciantes o papel do Dash como o shell padrão do Ubuntu, seu uso básico e as diferenças com o Bash que costumam confundir muitas pessoas.

Como criador de conteúdo para a web, você encontrará cada vez mais scripts de shell em tarefas de configuração de servidor e implantação. Todo o código deste artigo foi feito para funcionar com um simples copiar e colar, então, sinta-se à vontade para experimentar e sentir a alegria de ver algo "funcionar"!


Afinal, o que é o Dash? E por que o Ubuntu o utiliza?

O Dash (Debian Almquist shell) é um shell de linha de comando usado em sistemas operacionais do tipo UNIX. Sua principal característica é ser leve e rápido. Em comparação com o Bash, um shell rico em recursos, o Dash se concentra em funções básicas, o que torna a execução de scripts muito mais rápida.

O Ubuntu (e sua base, o Debian) aproveita essa velocidade ao adotar o Dash como o shell de sistema padrão (/bin/sh) para executar scripts de inicialização do sistema e vários processos em segundo plano. Isso significa que, além do shell de login interativo (/bin/bash) que normalmente usamos no terminal, o Dash está realizando tarefas de forma eficiente dentro do sistema. Essa divisão de trabalho — "Dash para o shell do sistema, Bash para o shell de login" — é o que sustenta o desempenho ágil do Ubuntu.

Vamos verificar ao que o /bin/sh está vinculado no seu próprio ambiente. Executar o comando a seguir mostrará sua verdadeira identidade.

ls -l /bin/sh

Na maioria dos casos, você verá /bin/sh -> dash, indicando que a entidade real de /bin/sh é o Dash.


Uso básico do Dash

Agora, vamos executar um script simples usando o Dash. O uso do Dash é muito simples.

1. Criar um arquivo de script

Primeiro, crie um arquivo de script simples com um editor de texto. Vamos chamá-lo de hello_dash.sh.

nano hello_dash.sh

Assim que o editor abrir, cole o conteúdo a seguir e salve.

#!/bin/sh
# A linha acima é chamada de "shebang" e especifica que este script deve ser executado com /bin/sh (ou seja, o Dash).

echo "Hello, Dash!"

2. Conceder permissão de execução

Dê ao arquivo de script que você criou a permissão necessária para ser executado.

chmod +x hello_dash.sh

3. Executar o script

Agora que está tudo pronto, vamos executar o script.

./hello_dash.sh

Se "Hello, Dash!" aparecer no terminal, deu certo! Esta é a maneira mais básica de executar um script Dash. Ao especificar #!/bin/sh no shebang, o script foi interpretado e executado pelo Dash.


Exemplo avançado: Usando variáveis e laços no Dash

Para um exemplo mais prático, vamos ver um script que usa variáveis e um laço while. A sintaxe básica é semelhante à do Bash, mas é importante ter em mente a escrita em conformidade com o padrão POSIX, que garante o funcionamento no Dash.

O script a seguir executa um laço até que um contador chegue a 3, exibindo a contagem atual.

#!/bin/sh

# Definir uma variável
COUNT=1

# Continuar o laço enquanto COUNT for menor ou igual a 3
while [ "$COUNT" -le 3 ]; do
  echo "Contagem atual: $COUNT"
  # Adicionar 1 a COUNT. Usar o comando expr é a forma mais segura.
  COUNT=$(expr "$COUNT" + 1)
done

echo "Laço finalizado."

Salve este script com um nome como loop_test.sh, conceda permissão de execução da mesma forma e execute-o com ./loop_test.sh. Você deverá ver a contagem de 1 a 3.


Pontos de atenção: Incompatibilidades entre Dash e Bash

O obstáculo mais comum para iniciantes ao escrever scripts de shell é a diferença de funcionalidades entre o Dash e o Bash. É comum que um comando que funciona perfeitamente no terminal usual (Bash) cause um erro em um script que especifica /bin/sh (Dash).

No ambiente de desenvolvimento web, quando scripts são executados como tarefas cron em um servidor ou por meio de ferramentas de implantação, eles são frequentemente executados pelo shell padrão do sistema, que é o Dash. Portanto, usar inconscientemente recursos exclusivos do Bash (conhecidos como "Bashisms") pode causar erros que só aparecem no ambiente de produção.

Abaixo estão alguns dos exemplos mais representativos de incompatibilidade aos quais você deve prestar atenção especial.

1. Não é possível usar arrays

No Bash, você pode manipular arrays facilmente com algo como fruits=("Apple" "Banana" "Cherry"), mas o Dash não suporta arrays.

Exemplo que funciona apenas no Bash (erro no Dash):

#!/bin/bash
# Note que o shebang é /bin/bash

fruits=("Apple" "Banana" "Cherry")
echo "A primeira fruta é ${fruits[0]}."

2. Não é possível usar a Expansão de Chaves (Brace Expansion) {..}

No Bash, se você escrever echo file{1..3}.txt, ele se expande para file1.txt file2.txt file3.txt, mas o Dash не tem essa funcionalidade.

Exemplo que funciona apenas no Bash (exibido como está no Dash):

#!/bin/bash

# Este comando gera três nomes de arquivo no Bash
touch data_{a,b,c}.csv

Para fazer o mesmo no Dash, você precisaria usar um laço for ou algo semelhante.


3. Não é possível usar o comando de teste `[[ ... ]]`

Como mencionado anteriormente, o comando de teste estendido do Bash, [[ ... ]], embora mais poderoso, não pode ser usado no Dash. Você deve se ater ao compatível com POSIX, [ ... ].

Exemplo que funciona apenas no Bash (erro no Dash):

#!/bin/bash

NAME="hoge"
# [[ ... ]] pode usar && e || internamente
if [[ "$NAME" == "hoge" && -n "$NAME" ]]; then
  echo "O nome é hoge."
fi

Código alternativo que também funciona no Dash:

#!/bin/sh

NAME="hoge"
# Em [ ... ] usa-se -a (AND)
if [ "$NAME" = "hoge" -a -n "$NAME" ]; then
  echo "O nome é hoge."
fi

Note também que a comparação de strings usa = em vez de ==.


Conclusão: Escreva scripts robustos com o Dash em mente

Neste artigo, explicamos o papel do Dash como o shell padrão do Ubuntu, seu uso básico e suas diferenças com o Bash.

Pode ser confuso no início, mas entender essas diferenças pode evitar problemas do tipo "funcionou na minha máquina, mas não no servidor". Familiarize-se com o mundo do Ubuntu dash e aspire a criar scripts de shell mais confiáveis!


Artigos relacionados

Se você quiser aprender mais sobre escrita avançada de scripts e compatibilidade com o Bash, este artigo também é recomendado.