Comparando uma variável com letras maiúsculas e minúsculas

0

Então eu quero validar uma resposta de um usuário no script tcsh e é isso que eu tenho até agora

set var1="temp"
    while($var1 != [yY] && $var1 != [Yy][Ee][Ss] && $var1 != [Nn] && $var1 != [Nn][Oo])
            echo "Do you want to create a backup directory ? :"
        set response=&< 
        if ($response == [yY] || $respose == [Yy][Ee][Ss]) then
            mkdir backup
            echo "Backupd directory created \n"
        else if($response == [nN] || $response == [Nn][Oo]) then
            echo "No backup directory is created \n"
        else
            echo "Please enter a valid respose ! \n"
            var1=$response
        endif 
    end

Eu basicamente quero que o usuário insira Y, y, Sim, N, n, Não e, é claro, eu também permito uma combinação de maiúsculas e minúsculas em sim e agora.

Mas quando executo o script, ocorre um erro dizendo [yY]: No match.

Então estou supondo que algo está errado ao comparar $ var1 com [Yy]. Basicamente estou validando a entrada do usuário.

E cai a atribuir var1 como eu fiz, var1=$response , ou tenho que usar o conjunto novamente >

    
por alkabary 23.01.2016 / 00:53

1 resposta

2

Você provavelmente quis dizer !~ , "não corresponde à expressão regular", em vez de != , "não é igual a".

Para $var =~ regexp e $var !~ regexp , o padrão à direita não deve ser citado. Para == e != , você pode citar a parte à direita (e de fato eu encorajaria isso).

Como != espera uma string, " [yY] não foi analisado como uma expressão regular. Em vez disso, o shell expandiu para" qualquer arquivo cujo nome seja y ou Y ". E como você não o fez t tem um, a casca reclamou.

Esse tipo de coisa, a propósito, é por isso que eu prefiro não escrever scripts no tcsh, mesmo que eu use como meu shell interativo.

    
por 23.01.2016 / 01:11

Tags