Resposta “Digite seu Coice: [1-3]” via Shell Script

3

Eu tenho um problema no meu script de shell. Eu tento controlar uma instalação. Durante a instalação, há algumas perguntas que precisam ser respondidas. Como: "Digite sua escolha [1-3]:"

Eu quero fazer algo assim:

--> It's my first script <--
#!/bin/bash


echo "--> Install packages <--"
sudo apt-get install git

cd $HOME/

#mkdir mspgcc_download
#cd mspgcc_download

echo "--> Download mspgcc <--" 

git clone git://mspgcc4.git.sourceforge.net/gitroot/mspgcc4/mspgcc4
cd mspgcc4

echo "--> Build mspgcc <--" 

echo "y" | echo "n" | echo "" | echo "n" | echo "2" | echo "1" | echo "1" | echo "1" | ./buildgcc.sh
    
por alschbpk 19.01.2011 / 15:51

4 respostas

1

Você pode fazer isso com um documento :

cat <<EOF | ./buildgcc.sh
y
n

n
2
1
1
1
EOF

ou

./buildgcc.sh <<EOF
y
n

n
2
1
1
1
EOF
    
por 19.01.2011 / 17:42
3

echo será impresso na saída padrão, ou seja, o que você vê no terminal. Você precisa canalizar os dados para a entrada padrão do seu aplicativo, geralmente com | .

echo 1 | your-prog-here

Talvez você deva usar espera , mas é uma nova linguagem de programação que você terá que aprender.

    
por 19.01.2011 / 15:58
1
$ read -p 'Gimme a B: ' b
bee
$ echo $b
bee
    
por 19.01.2011 / 15:56
1

Se eu entendi bem sua consulta, geralmente uso esse tipo de código:

_answer=''
while [ -z ${_answer} ]
do
    # I check if Bash or Ksh is used
    if [ "x${BASH_VERSION}" != "x" -a "x${KSH_VERSION}" = "x" ]; then
        # Bash
        read -n 1 -p "Your choice [1-3] : " _answer
    else
        # KSH
        read  _answer?"Your choice [1-3] : "
    fi
    clear
    case "${_answer}" in
        1) function1 ;;
        2) function2 ;;
        3) function3 ;;
        *) _answer='' ;;
    esac
done

A diferença na sintaxe de leitura, vamos apenas digitar o caractere no Bash, mas você deve digitar uma entrada no final com o KSH. Para o bash, é o -n 1 que diz para ler para aguardar apenas 1 caractere.

Não se esqueça de declarar sua função antes.

    
por 19.01.2011 / 16:28