Linux/Unix Shell Scripting - Comparar cadenas

   
Vista:

Comparar cadenas

Publicado por Alejandro (1 intervención) el 14/07/2011 20:59:45
Hola.

Estoy haciendo un script para linux y algo falla. Resulta que recorro dos arrays, ambos contienen nombres de ficheros de dos directorios. Cuando coinciden el nombre, entonces lo que quiero es que en ese indice del array ponga una marca, escriba "X", por ejemplo, para que así luego al imprimir el array no salga ese fichero, ya que se mostrarán solo los que son diferentes en ambos directorios.


El código:
http://pastebin.com/TGvj0i6Q

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for i in `seq 0 1 ${#array_dir2[@]}` #Array más corto en primer lugar
do
	for j in `seq 0 1 ${#array_dir1[@]}` #Array más largo dentro del anidamiento
	do
 
		if [ ${array_dir1[$i]}==${array_dir2[$j]} ]
		then
 
			array_dir1[$i]="X"
			array_dir2[$j]="XX"
			break
 
		fi
	done
 
done
 
for i in `seq 0 1 ${#array_dir2[@]}`
do
	if [ ${array_dir2[$i]}!="XX" ]
	then
		echo ${array_dir2[$i]}
	fi
done




El prolema es que algo está saliendo mal porque imprime esto

XX
fichero1
norepetido

y debería imprimir esto otro, que son tres nombres de ficheros:

esto_tb_sale
fichero1
norepetido


(He hecho un simple for para que imprima ambos arrays antes de hacer esa comprobación y se imprimen bien, pero no sé en la comparacion del IF algo está fallando...)

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Comparar cadenas

Publicado por xve (254 intervenciones) el 12/01/2012 18:11:06
Hola Alejandro, creo que el problema esta en los ==... en bash, únicamente es un igual =
quedando así:
1
if [ ${array_dir1[$i]} = ${array_dir2[$j]} ]

Espero que aun te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar