2010-02-28 20 views
5

Je veux que mon script définisse un tableau vide. les valeurs de tableau doivent être ajoutées si la condition prédéfinie devient vraie. pour ce que je l'ai fait estcomment manipuler un tableau dans un script shell

declare -a FILES 
file_count=0 
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     $FILES[$file_count] = $filename 
     file_count=$file_count+1 
fi 

lors de l'exécution de ce script, je reçois une erreur comme ça

linux-softwares/launchers/join_files.sh: 51: [0]: not found 
+0

Pour aller plus loin sur les tableaux de bash jeter un oeil à http://tldp.org/LDP /abs/html/arrays.html –

Répondre

3

Lorsque les données de paramètres dans tableau ne se souvient pas avec $:

declare -a FILES 
file_count=0 
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     FILES[$file_count]=$filename 
     file_count=$file_count+1 
fi 

FICHIERS sans $.


Cela fonctionne pour moi:

#!/bin/bash 
declare -a FILES 
file_count=0 

file_ext='jpg' 
SUPPORTED_FILE_TYPE='jpg' 
filename='test.jpg' 

if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     FILES[$file_count]=$filename 
     file_count=$(($file_count+1)) 
fi 

Comme vous le voyez, une petite modification $ (()) pour le fonctionnement en mathématiques, mais les fichiers assignements est le même ...


Comme indiqué après de nombreux tests, le shell par défaut d'Ubuntu semble être un tiret, ce qui a provoqué l'erreur.

+0

Salut enrico, après avoir enlevé ce $ je reçois linux-logiciels/launchers/join_files.sh: 51: FICHIERS [0]: pas trouvé Qu'est ce que c'est? –

+1

Rappelez-vous votre question il y a quelques minutes? Les espaces blesse :) Il suffit de supprimer les espaces après les fichiers [$ file_count] –

+0

ohh oui. Désolé pour la lésion perdue. :) –

0

vous pouvez l'écrire de cette façon aussi

declare -a FILES 
file_count=0 
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     FILES[((file_count++))]=$filename 
fi 

A: Vijay

petite démonstration, liste des fichiers * .txt dans le répertoire et mis à tableau FILES

declare -a FILES 
i=0 
for file in *.txt 
do 
    FILES[((i++))]=$file 
done 
# display the array 
for((o=0;o<${#FILES};o++)) 
do 
    echo ${FILES[$o]} $o 
done 

sortie

$ ./shell.sh 
A.txt 0 
B.txt 1 
file1.txt 2 
file2.txt 3 
file3.txt 4 
+0

cela ne fonctionne pas. Le message d'erreur est "files.sh: 39: Erreur de syntaxe:" ("unexpected (expecting") ")" –

+0

il y a un "$" supplémentaire dans les fichiers variables. retirez-le. – ghostdog74

+0

Je n'ai pas eu de $ où est-ce? –

1

Pour ajouter un élément à la fin d'un tableau, utilisez l'opérateur + = (depuis bash 3.1 en 2004):

files+=("$file") 
Questions connexes