Atualmente, estou escrevendo meu terceiro script de shell e já encontrei um problema. Este é o meu script até agora:
#!/bin/bash
echo "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script"
while read
do
case in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
done
quando tento executar o script, ele diz o seguinte:
line2 : unexpected EOF while looking for matching '"'
line14 : syntax error: unexpected end of file.
O que estou fazendo errado?
shell
shell-script
Swifty124
fonte
fonte
Respostas:
O problema é que sua
case
declaração está faltando no assunto - a variável que deve ser avaliada. Portanto, você provavelmente quer algo assim:Aqui
case
usa a variável padrão$REPLY
queread
preenche quando não recebe nomes de variáveis (consultehelp read
para detalhes).Observe também as alterações:
printf
é usado para exibir o prompt em cada rodada (e não acrescenta uma nova linha),cat
é usado para imprimir instruções em várias linhas, para que não sejam quebradas e sejam mais fáceis de ler.fonte
Não vamos esquecer
select
:fonte
Vamos tentar um único caso inicialmente. Usarei
read -p
para ler a entrada do usuário em uma variávelopt
seguida pela instrução case, conforme abaixo.O script acima funciona bem e agora, acredito que você precisa tê-lo em loop para poder ler a entrada do usuário até que o usuário pressione a opção 4.
Então, poderíamos fazê-lo com um
while
loop como abaixo. Defino a variávelopt
com o valor inicial como 0. Agora, eu estou iterando nowhile
loop, desde que aopt
variável tenha um valor como 0 (e é por isso que redefino aopt
variável como 0 no final dacase
instrução).fonte
Eu pessoalmente colocaria o "while" no início do código. Se você segui-lo com a
:
, permitirá que ele circule quantas vezes você desejar. É assim que eu escreveria.depois continue as perguntas e termine com
fonte