Seu comando de exemplo não faz sentido. Você não tem then
ou fi
para usar seu if
e está inserindo comandos incorretamente em um bloco test
(ou seja, [
).
Seu código:
if [ 'cat test$compteur | sed -n $ligne\p | awk -F" " '{print $2}' ' == "*" ]
Parece que você está tentando comparar a saída dessa cadeia de comandos, e se a saída é literalmente *
, então faça alguma coisa indeterminada? Em caso afirmativo:
if [[ "$( cat test$computer | sed -n $ligne\p | awk -F' ' '{print $2}')" == "*" ]]; then
do_something
fi
Mas isso pode ser otimizado um pouco; não menos por se livrar de seu "uso inútil de cat
:
if [[ "$( sed -n $ligne\p test$computer | awk -F' ' '{print $2}')" == "*" ]]; then
do_something
fi
Não tenho certeza sobre o que você está fazendo com o comando sed
, mas presumindo que linge
seja uma variável contendo um número de linha para imprimir, isso pode ser feito apenas em awk
:
if [[ "$( awk -F' ' -v ln=$linge 'NR==ln { print $2 }' )" == "*" test$computer ]]; then
do_something
fi
Pegando o script completo que você enviou na sua "resposta", eu o reescrevi com essas alterações e alguns outros pequenos ajustes:
#!/bin/bash
compteur="1"
ligne="2"
> testfinal # clears contents of file in one step rather than rm; touch
#########BOUCLE PERMUTATION LIGNE
while [[ "$ligne" -lt 32 ]]; do
if [[ "$( awk -F' ' -v ln=$ligne 'NR==ln { print $2 }' test$computer )" == "*" ]]; then
compteur=$((compteur+1));
else
awk -v ln=$ligne 'NR==ln' >> testfinal
ligne=$((ligne+1))
compteur=$((compteur+1)); # I presume that the original 'compteur=1' was a typo.
fi
done