Monte um pequeno script BASH para listar, selecionar e tocar músicas no Linux.

O comando SELECT, combinado com o aplicativo mpg123, pode facilmente criar um mp3 player que te permita escolher as músicas que deseja tocar em um diretório.
O objetivo deste curto tutorial é dar um exemplo prático, simples e funcional do uso destas duas ferramentas, além de ajudar a aprender um pouco mais de Linux ou Unix, enquanto você se diverte.

comando selecto e mpg123 para escolher músicas mp3
Clique, para ampliar.

O que você precisa ter instalado no seu sistema

Tudo o que você precisa instalar é um pequeno aplicativo de leitura de arquivos mp3, chamado >mpg123.
Se você ainda não o tiver ou não souber como instalá-lo, leia aqui sobre como fazer isto.
Se você preferir, pode também baixar o código fonte e compilar o mpg123 (é muito fácil).
Como o comando select já faz parte do Bash, não há mais nada a ser adicionado ou instalado.

Como montar um script para selecionar as músicas

Todo o processo pode ser resumido em uma linha de comando, conforme nos ensina o @climagic:


Para que ele funcione, é necessário estar dentro do diretório em que se encontram os seus arquivos mp3:

select mus in *.mp3; do mpg123 "$mus"; done # Player de multipla escolha

Ao dar Enter, as músicas existentes no diretório atual serão exibidas e o comando select esperará que você digite o número da música desejada (na primeira coluna à esquerda):

 1) 01 - Queen - Another One Bites the Dust.mp3
 2) 02 - Blondie - Call Me.mp3
 3) 03 - J. Geils Band - Centerfold.mp3

...

16) 16 - The B-52's - Private Idaho.mp3
17) 17 - The Blasters - Marie Marie.mp3
18) 18 - The Boomtown Rats - I Don't Like Mondays.mp3
19) 19 - Squeeze - Tempted.mp3
20) 20 - Bob Marley and the Wailers - Redemption Song.mp3
#? 

Simples, assim.
Para sair, sem selecionar nada, basta pressionar Ctrl + C.

Monte um script para executar arquivos mp3

Se você incluir o código em um script, pode desfrutar de um pouco mais de comodidade.
Abra o seu editor favorito e inclua o código lá dentro:

#! /bin/bash
# Player mp3 de múltipla escolha
select mus in *.mp3;
do mpg123 "$mus";
done

Grave-o com o nome de toca.sh (ou outro nome de sua preferência) e mude a permissão do arquivo para executável.

chmod +x toca.sh

Agora, é possível executá-lo:

./toca.sh

Se quiser ter um pouco mais de comodidade, crie um diretório apenas para seus scripts, e coloque-o lá dentro para ser usado de qualquer lugar do seu sistema.
Veja como:

mkdir bin
mv toca.sh bin/
export PATH="~/bin:$PATH"

Com o procedimento, acima, é possível executar o toca.sh de qualquer pasta no seu sistema.
Experimente.
Tem alguma dica, para melhorar o script? Compartilhe conosco nos comentários. 😉

Como conectar ao MySQL de um script em PHP

A tarefa mais básica de scripts que fazem uso do servidor de bancos de dados é a conexão. Em seguida, vem a seleção do banco de dados, da tabela e as consultas (queries).
php and mysql logos
O exemplo de script PHP, usado neste texto, necessita que você tenha tanto o MySQL quanto o PHP instalados no seu sistema.
Se você não tem certeza de que este é o seu caso, pode usar as dicas no final do artigo Como instalar Linux, MySQL, Apache e PHP, para saber se tudo está ok.
Embora o PHP e o MySQL possam ser executados da linha de comando, este texto vai se voltar para a execução a partir de um servidor web.
Sinta-se à vontade para usar a caixa de busca, no canto superior direito deste site, sempre que quiser alguma informação adicional (neste momento, temos quase 500 tutoriais…) 😉

Como se conectar ao MySQL via PHP

Por ser uma atividade tão trivial, programadores mais ocupados criam bibliotecas de scripts que fazem a conexão — e chamam estes scripts de dentro de seus outros scripts.
É comum programadores experientes terem esquecido como realizar tarefas básicas como esta.
Se você é iniciante, não se esqueça de usar um editor de textos adequado a escrever códigos de programas, para evitar problemas na execução dos seus scripts.
Do lado de cá, vou criar um arquivo chamado conecta.php, dentro do qual vou inserir o código em PHP para fazer uma simples conexão ao banco de dados MySQL e, em seguida, desconectar.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Página de conexão ao banco de dados</title>
</head>
<body>
<!-- O script PHP começa abaixo -->

<?php
    conecta.php - script de conexão ao servidor MySQL
    if (!($con = @mysql_connect ("localhost", "justincase", "minhasenha")))
    {
        die ("Não foi possível conectar ao servidor. <br />");
    }
    print ("Conexão bem sucedida. <br />");
    if (!@mysql_select_db ("tutorial", $con))
    {
        die ("Não foi possível selecionar o banco de dados. <br />");
    }
    mysql_close ($con);
    print ("Conexão terminada. <br />");
?>

<!-- Fim do script PHP -->
</body>
</html>

A partir deste código, é possível construir o que você quiser.
A parte em HTML do código, logo no começo, serve apenas para localizar a página e permitir que as mensagens (em português) sejam exibidas com as palavras devidamente acentuadas — não fazem parte, portanto, do programa em si.

Entenda o código em PHP

  • if (!($con = @mysql_connect ("localhost", "justincase", "minhasenha"))) — esta parte tenta fazer uma conexão com a função mysql_connect(), usando os dados de nome do servidor, nome do usuário “justincase” e a senha “minhasenha”.
  • die ("Não foi possível conectar ao servidor.");
    — se nada der certo, o script será interrompido pela função die(), com a exibição da mensagem entre as aspas.
    Se a conexão se efetivar, o programa prossegue a próxima instrução e armazena as informações da conexão na variável $con.
  • print ("Conexão bem sucedida."); — exibe a mensagem entre aspas.
  • if (!@mysql_select_db ("tutorial", $con))
    — tenta selecionar o banco de dados “tutorial”, com as informações armazenadas na variável $con. Se isto não for possível, executa a instrução que segue:
  • die ("Não foi possível selecionar o banco de dados."); — finaliza o script e devolve a mensagem entre aspas.
  • mysql_close ($con); — se tudo correu bem, até aqui, o script irá fechar a conexão, baseado nas informações contidas em $con.
  • print ("Conexão terminada."); — exibe a frase entre aspas.

Captura de tela do komodo editor - código PHP para conectar ao banco de dados MySQL

Funções PHP para conectar ao MySQL

Neste artigo, usei a função mysql_connect(), para fazer a conexão ao banco de dados. Alternativamente, você pode usar a função mysql_pconnect() — para estabelecer uma conexão persistente.
Pode ser útil caso você queira deixar a conexão aberta para ser reutilizada por outros scripts subsequentes — evitando, assim, alguma sobrecarga ao servidor.
Iniciar conexões persistentes e deixá-las abertas (por esquecimento), pode acarretar, como consequência a negação de abertura de novas conexões por parte do servidor MySQL.
Portanto, seja organizado(a) neste ponto.

Como executar queries MySQL de uma shell script.

É possível inserir queries MySQL dentro de scripts shell, da mesma forma que você faria com a linguagem PHP, Perl etc.
Em vez de invocar o MySQL diretamente da linha de comando do console Bash ou digitar suas queries dentro do cliente MySQL, é possível automatizar atividades rotineiras. relacionados a bancos de dados, com scripts.
pícture of a mountain and mysql logo
É comum realizar este trabalho com o uso da linguagem Perl (com a interface DBI), no Linux/UNIX. Mas, se o que você quer, precisa ser feito rapidamente e não for muito complicado, pode ser mais interessante usar shell scripts.
Ao usar o MySQL na linha de comando, é possível pós processar os resultados com outros comandos da shell, filtrar as saídas e obter resultados mais relevantes.

Exemplos de shell scripts com comandos SQL

O script que segue serve para exibir o tempo em que o seu servidor MySQL está no ar ou uptime.
O script vai executar uma query SHOW STATUS para obter o valor da variável do status que contém o uptime (em segundos).
Abra o seu editor de texto favorito e digite o código abaixo:

#! /bin/sh
# myuptime.sh - exibe o uptime total do servidor em segundos
mysql -u root -p -B -N -e "SHOW STATUS LIKE 'Uptime'"

É importante que se diga que o editor de texto, para escrever código de programas, não pode inserir formatação dentro do script. Use um editor de texto puro, como o nano, o vi, gedit, mousepad etc.


Agora, torne o arquivo script myuptime.sh executável:

chmod +x ./myuptime.sh

Feito isto, execute-o:

./myuptime.sh 

O script vai pedir a senha de root do servidor MySQL, antes de mostrar o resultado:

Enter password: 
Uptime	3180

Entenda o script linha a linha

  • #! /bin/sh — esta primeira linha é especial. Ela invoca o Bash, que irá interpretar e executar as instruções contidas neste script.
  • # myuptime.sh ... — linhas que começam com # são comentários e, portanto, não são executadas.
  • mysql -u root -p — se você já é iniciado no MySQL, sabe que esta parte da instrução inicia o cliente, faz login e pede a senha do usuário root.
  • -B — gera uma saída batch. Exibe os resultados, usando a caractere tab como separador de colunas.
  • -N — suprime o cabeçalho da coluna. Assim temos uma saída mais limpa.
  • -e "SHOW STATUS LIKE 'Uptime'" — este é o “miolo” do nosso script — onde a mágica acontece.

Experimente remover as opções -B -N, para ver o que acontece.
Altere a linha mysql -u root -p -B -N -e "SHOW STATUS LIKE 'Uptime'", no script, para mysql -u root -p -e STATUS | grep -i uptime.
Eu obtive o seguinte resultado, após esta alteração:

Uptime:			1 hour 18 min 42 sec

Leia mais

Conheça outras formas de executar queries MySQL da linha de comando e que podem ser usadas dentro de seus scripts.
Entenda melhor o comando grep, para filtrar os seus resultados e excluir informações irrelevantes.
Saiba como pegar queries do histórico do MySQL.

Como criar scripts a partir do histórico de comandos do MySQL

As queries ou consultas feitas no cliente interativo MySQL, que funcionam bem, podem ser facilmente convertidas em scripts para automatizar suas tarefas ou adiantar o seu trabalho como desenvolvedor — seja qual for a sua linguagem de programação.
Logo MySQL sobre um fundo com um lago e um barco
A solução relatada neste artigo permite reusar as queries, de uma sessão anterior do MySQL, que estão funcionando para você, em um script.

Use um arquivo tee ou o histórico do MySQL

Uma das formas de reusar as queries MySQL, dentro de um script, é buscá-las a partir de um arquivo tee.
No artigo, Como guardar o histórico dos comandos no MySQL em um arquivo externo, eu explico o procedimento em detalhes.
Outra forma, é buscar as queries no arquivo de histórico padrão do MySQL, importar o texto e ir retirando tudo o que não serve ao seu script.
Neste caso, comece por digitar suas queries no cliente MySQL, normalmente — se certificando de que estejam funcionando sintaticamente e entregando os resultados desejados.
Em seguida, saia do MySQL, com o comando quit e liste o arquivo do histórico da sua sessão, da linha de comando:

cat .mysql_history

No Linux, o arquivo do histórico costuma ficar armazenado no seu diretório home.
Experimente combinar o comando cat com o comando grep, para obter resultados mais precisos em relação ao que te interessa:

cat .mysql_history grep -e select

Exemplo de execução do comando cat com o comando grep
Clique, para ver detalhes.

O arquivo do histórico, bem como aquele criado pelo comando tee, pode ser aberto no seu editor de scripts favorito, de onde você pode extrair as queries que deseja e editá-las como bem entender.
captura de tela komodo editor

Como determinar a versão do PHP no servidor

É possível obter informações sobre a versão do PHP em um servidor remoto, a partir de um simples terminal.
Vou mostrar como fazer isto, do console do Linux e, caso você queira saber, vou mostrar como dificultar que estranhos obtenham esta informação do seu servidor.
php logo elephpant
Ocultar a versão do PHP a requisições remotas, pode ser útil para evitar que visitantes maliciosos conheçam a que vulnerabilidades o seu site pode estar exposto.
Pode ser recomendado como um primeiro passo básico (de muitos outros) para tornar o seu servidor mais seguro.
Como se trata de segurança por obscuridade, recomenda-se não ficar dependente exclusivamente deste método.

Como obter a versão do PHP, de um servidor remoto

Tal como visto no texto Como descobrir a versão do Apache em execução, é possível obter informações diversas de um servidor remoto com o uso do comando HEAD.
Veja como obter informações sobre o PHP, no servidor:

HEAD http://localhost/sites/ial/site/index.php

Observe as informações na última linha:

200 OK
Connection: close
Date: Wed, 11 Mar 2015 20:40:37 GMT
Server: Apache
Content-Type: text/html
Client-Date: Wed, 11 Mar 2015 20:40:37 GMT
Client-Peer: 127.0.0.1:80
Client-Response-Num: 1
X-Powered-By: PHP/5.5.9-1ubuntu4.6

É importante indicar uma página .php na linha de comando do HEAD, para obter um resultado significativo.
Este é o banner que o (meu) PHP adiciona às informações do sistema: X-Powered-By: PHP/5.5.9-1ubuntu4.6.

Como determinar a localização do arquivo php.ini

Vamos ao arquivo de configuração, para ajustar a diretiva adequada.
A localização do arquivo de configuração do PHP php.ini pode variar em função do sistema operacional em uso (Linux, Unix, Windows, MacOS etc.)
No Ubuntu 14.04 LTS e em outras distrbuições Linux baseadas no Debian o arquivo de configuração a ser alterado é /etc/php5/apache2/php.ini.
Se você tiver dúvidas, uma maneira eficiente de encontrar o arquivo de configuração do PHP é usar o comando locate com o comando grep. Veja:

locate php.ini | grep apache

O meu foi encontrado aqui:

/etc/php5/apache2/php.ini
The elephant inside the snake  - O elefante dentro da cobra - em o pequeno príncipe
Tentar encontrar o arquivo de configuração do PHP, me fez pensar no “O Pequeno Príncipe”.

Como desabilitar a exibição do banner de informações do PHP no servidor

Uma vez determinado o seu arquivo de configuração php.ini, faça uma cópia de segurança, antes de alterá-lo:

sudo cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.original

A seguir, abra o arquivo e localize a linha que contém expose_php On e altere-a para expose_php Off. Salve o arquivo e feche o editor.
De volta ao terminal, reinicie o Apache:

sudo apachectl stop
sudo apachectl start

Se o Apache estiver exibindo a mensagem “Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName”, leia este artigo, depois.


Agora, faça o teste:

HEAD http://localhost/sites/ial/site/index.php

Observe as informações na última linha:

200 OK
Connection: close
Date: Wed, 11 Mar 2015 20:40:37 GMT
Server: Apache
Content-Type: text/html
Client-Date: Wed, 11 Mar 2015 20:40:37 GMT
Client-Peer: 127.0.0.1:80
Client-Response-Num: 1

Você pode obter mais informações sobre a configuração do PHP, no manual online: php.net/manual/pt_BR/