caminho do arquivo na variável da entrada do usuário

0

Estou tentando criar um script onde o usuário dará um caminho para algum arquivo, e o script irá verificar se o arquivo existe e fazer algumas coisas ... Eu escrevi este código:

read -p "Enter path: " $path

#check if path is not empty string
if [ -z $path ]
then
  echo "path is empty string"
  exit
fi
#check if file exist
if [ ! -f $path ] 
then
  echo "file doesnt exists"
fi

meu problema é com condição secound - se eu alterar $path com alguma string tudo está OK, mas quando eu entro caminho via variável é sempre "arquivo doesnt existe" eu estava tentando com

if [ ! -f '$path' ]

mas se o arquivo não tiver permissão de execução, o resultado também falhará. Alguém pode me ajudar a corrigir o código acima? :)

EDITAR desculpe, eu quis dizer -z e -f não duplo -z condição

    
por Krystian 08.11.2013 / 12:23

1 resposta

2

O problema aqui é que os backticks:

'command'

são usados para executar um comando e substituir seus fluxos de saída (padrão e erro) como resultado, e é por isso que o teste falha quando você fornece um arquivo sem permissões de execução.

Como corrigir isso

Use

if [ -f "$path" ]

As aspas duplas servem para proteger contra a divisão de palavras (no caso de conter espaços) e contra globbing (no caso de o caminho conter caracteres curinga como * ou ? )

Melhor ainda, como o caminho pode estar em um diretório, simplesmente verifique a existência do caminho com -e :

if [ -e "$path" ]
    
por 08.11.2013 / 12:29

Tags