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 umthene umfi. - A maneira como você está usando
-nestá errada.-ntesta 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