Não é possível obter se a instrução for executada corretamente. Principiante. [duplicado]

0

Eu sou muito novo para bater, apenas brincando no meu tempo livre fora do trabalho. Eu quero verificar se existe um arquivo, e se ele não existe, eu quero perguntar ao usuário se eles gostariam de criá-lo. Quer o usuário insira Y ou N, somente "Whatever you say" aparece na tela. Agradecemos antecipadamente.

#!/bin/bash

#This is testing if a file (myFile) exists

if [ -f ~/myFile  ]
then 
        echo "The file exists!"
else
        echo "The file does not exist. Would you like to create it? (Y/N)"
        read ANSWER
fi

if [ "$ANSWER"="N" ]
then
        echo "Whatever you say!"
else
        touch myFile
        echo "The file has been created!"
fi
    
por ara6 31.05.2015 / 18:18

2 respostas

1

Você deve usar espaços em branco ao usar o operador de comparação = . [ ] é uma função interna do shell. Portanto, você precisa passar todos os argumentos com espaços. Então você deve fazer assim:

if [ "$ANSWER" = "N" ]

Fonte: link

    
por 31.05.2015 / 18:29
0

Você precisa de espaços em torno do operador = .

if [ "$ANSWER" = "N" ]

Quando preciso de correspondência de texto, prefiro usar case over test ou [ ... ] , porque é mais flexível e eficiente.

FILE=~/myFile
if [ -f "$FILE"  ]
then 
        echo "The file exists!"
else
        echo -n "The file does not exist. Would you like to create it? (Y/N) "
        read ANSWER
        shopt -s nocasematch
        case "$ANSWER" in
        n|no)
                echo "Whatever you say!"
                ;;
        *)
                touch "$FILE"
                echo "The file has been created!"
                ;;
        esac
        shopt -u nocasematch
fi
    
por 31.05.2015 / 18:37

Tags