[Resolvido] Como criar um Shell Script com um IF?

Estou tentando colocar uma notificação para quando ligar o computador, com uma opção “Modo de estudos”. O intento é simples, sempre que iniciar o sistema gostaria que abrisse uma janela perguntando se quero ativar esse modo de estudos, e se sim, abrir o spotify e um link. Para tal

#!/bin/bash
zenity --question --width 300 --text "Deseja ativar modo estudos?"
if [ $? -eq "0" ]
then 
spotify && gnome-terminal
else
exit

Contudo não funciona, executei via terminal para ver o que acontecia, mas não consegui entender o que acontece. Após o if o terminal retorna tudo com um “>” sem executar. Enfim, o que poderia estar errado na minha sintaxe?

Adicionalmente, gostaria de sabe como colocar um atraso na inicialização do script se ele ficar pronto algum dia. E também executar “dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play” com um delay de 15 segundos após o spotify iniciar.

Dá uma olhada aqui…
http://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/

Estou vendo e são informações muito interessantes, utilizarei em outro projeto inclusive. Contudo, a parte do Zenity está caminhando até bem, o script engasga na parte do if.

Conforme o link que passei, se você não usar os números, não vai funcionar.

Faltou fechar o if… para fechar tem que usar o fi

#!/bin/bash
zenity --question --width 300 --text "Deseja ativar modo estudos?"
if [ $? -eq "0" ]
then 
echo "ativado"
else
echo "não ativado"
fi
exit
1 curtida

Resolveu em parte!

Agora sim o script é executado, fiz algumas alterações a partir do que entendi também do que @anon17586640 disse.

#!/bin/bash
zenity --title="Modo de estudo" --question --width 300 --text "Deseja ativar modo estudos?"; echo $?

if [ $? -eq 0 ]
    then 
spotify && gnome-terminal && --delay 300 dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play
    else
zenity --info --title="Modo de estudos" --text="Ok"
fi
exit

Da maneira como está, ele executa a janela eu consigo selecionar um campo. Entretanto, independente da minha escolha o programa é executado. Ou seja, mesmo falando para não entrar em modo de estudo, ele entra.

1 curtida

Torno à dizer, tem que usar os números…

1 curtida

Agora sim entendi a que você estava se referindo. Resolveu!

Adicionalmente, o que posso fazer para que o comando “dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play” espere um tempo antes de ser executado? Ele que dará play no spotify, mas precisa de um tempinho para o programa abrir…

edit:
Adicionei um sleep e funcionou.

1 curtida

Desresolvi, na verdade agora o script está travado.

Quando o executo, o comportamento esperado é:

  1. Abrir o spotify;
  2. Esperar 60 segundos;
  3. Dar play;
  4. Abrir o webapp dos arquivos que utilizarei.

Todavia, ele só passa para a próxima ação depois que eu fecho o programa anterior. Na prática -> abre o spotify, para, quando eu fecho o spotify ele abre a pasta. E eu já mudei os && para ; e não mudou. O que poderia fazer?

#!/bin/bash

# Ativar modo de estudos?
zenity --title="Modo de estudo" --question --width 235 --text "Deseja ativar modo estudos?"

#Opções
case $? in
    0)
	/opt/brave.com/brave/brave-browser --profile-directory=Default --app-id=aghbiahbpaijignceidepookljebhfak ; spotify ; sleep 60 ; dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play 
	;;
    1)
        exit;;
    -1)
        exit;;
esac

O bash tem muito recursos, extremamente poderoso, porém ele não é intuitivo. Caso realmente queira saber como fazer seus próprios scripts precisará de tempo e dedicação, não só para aprender alguns pontos, mas aprender com a base sólida.

Execute e entenda:

1 curtida

Parenteses, chaves, aspas, etc…

Shell script é completamente feito por Inceptions…hehehe

Pra executar tudo de uma vez, é só um &, se colocar 2 ele fica esperando concluir a tarefa anterior.

No caso, não precisa por tudo numa linha só, pode separar em linhas sequencias que dá no mesmo, nesse caso.

1 curtida

Pretendo fazer isso sim, já separei alguns textos, tutoriais básicos e a documentação do bash, além de videos. Se tiver recomendações também estou aceitando.

Eu mudei e funcionou, agr é só acertar os delay’s para dar tudo certo. Estava usando o && para demorar um pouco mais e dar tempo do “play” funcionar. Mas acho que o que estava quebrando era o atalho para o webapp, ele dá erro em 3 GTK modules, e spotify também dá um erro de multi-thread ao iniciar. Via terminal os comandos seguiam, mas no script, depois do primeiro erro ele cancelava o resto.

1 curtida

Eu aprendi na época de tutorial via PDF nos cds que vinham em revistas!

Conheço desse cara que está montando agora uma turma para dar aula em BASH e está disponibilizando as aulas no youtube. Estou aproveitando para lustrar meus conhecimentos e posso afimar: o cara é fera! Fica o link da playlist que ele está fazendo.

1 curtida

Estou acompanhando também! Bem detalhado