Eu quero fazer shell-script que tenha recurso de ligar e desligar
Assim como esta
Primeira vez:
echo -e "Activated!"
Segundo tempo:
echo -e "Deactivated!"
Existe uma maneira de fazer isso?
Eu quero fazer shell-script que tenha recurso de ligar e desligar
Assim como esta
Primeira vez:
echo -e "Activated!"
Segundo tempo:
echo -e "Deactivated!"
Existe uma maneira de fazer isso?
Isso significa que você teria que salvar o estado atual da ativação.
A maneira mais fácil de fazer isso seria criar um arquivo para um dos estados (talvez para o estado "ativado" ou "ativado") e remover esse arquivo ao entrar no outro estado ("desativado" ou "desativado") .
A criação de um arquivo vazio é feita com
touch filename
, e o teste de existência desse arquivo é feito comif [ -e filename ]; then ...; fi
. Remova o arquivo comrm filename
.O abaixo lhe dá a opção de armazenar um pouco de informação nesse estado salvando o valor de uma variável em um arquivo. Nesse caso, o estado é carregado por um arquivo persistente que é alterado toda vez que você executa o script (em vez de apenas um arquivo que é criado ou removido a cada chamada do script).
Supondo que você esteja usando
bash
:Teste:
state
O script salva a variável$HOME/.script.state
por meio dedeclare -p state
inbash
no final de cada execução e a lê a partir daí, fornecendo esse arquivo no início (se o arquivo existir).Este arquivo acabaria parecendo
que é a saída de
declare -p state
if$state
é a stringoff
.Com
/bin/sh
, o script acima pode ser escrito como... apenas substituindo a leitura e escrita do estado por
read
eprintf
, o que salvaria apenas a própria string de estado no arquivo de estado.Se você deseja inverter o estado automaticamente em cada execução, você também pode aproveitar a operação numérica de "negação lógica", que é útil para inverter um valor. Ou seja, a negação lógica de 0 é 1 e vice-versa.
Os shells POSIX são capazes de realizar as operações numéricas e bit a bit mais comuns por meio de Aritmética Expansion , e Bash não é curto , fornecendo também Arrays que podem ser indexados por um número inteiro como 0 ou 1 (e mais).
Na prática:
Em um shell estritamente POSIX, é um pouco mais complexo porque precisamos contornar a falta de arrays: