O código que você está usando tem alguns problemas:
- Não é recomendado analisar
ls
, mas vamos mantê-lo por enquanto, pois não tem nada a ver com o seu problema. - Usar
''
para executar seus comandos funciona, mas é um estilo antigo e deve ser substituído com$()
. Não é muito importante aqui, mas talvez valha a pena mencionar para o futuro. - Seu
if
-construct tem a sintaxe incorreta. Está faltando umthen
e umfi
. - A maneira como você está usando
-n
está errada.-n
testa se uma string não está vazia.
Aqui está uma versão melhorada:
#!/bin/sh
testString=$(ls -l $1 | awk '{print $1}' | grep x)
if [ -n "$testString" ]
then
echo "file is executable"
else
echo "file is not executable"
fi
A questão é sobre manipulação de strings e usa o flag executável apenas como exemplo, mas eu ainda quero mencionar a maneira recomendada de verificar se um arquivo é executável:
#!/bin/bash
file="$1"
if [[ -x "$file" ]]
then
echo "File '$file' is executable"
else
echo "File '$file' is not executable or found"
fi