J’ai un script bash où j’essaie de trouver le nombre de fichiers dans un répertoire et d’y effectuer une opération supplémentaire.
Mais en faisant la même chose, je reçois l’erreur comme suit:
admin> ./fileCount.sh 1 ./fileCount.sh: line 6: 22 + : syntax error: operand expected (error token is " ")
Mon script est comme indiqué:
#!/usr/bin/bash Var1=22 Var2= ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l Var3= $(($Var1 + $Var2)) echo $Var3
Quelqu’un peut-il indiquer où est l’erreur.
Quelqu’un peut-il indiquer où est l’erreur.
=
. Var2
. Essayer:
Var1=22 Var2=$(ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l) Var3=$(($Var1 + $Var2)) echo $Var3
De plus, vous pourriez aussi dire
Var3=$((Var1 + Var2))
Comme @devnull a déjà répondu à la question, indiquez où est l’erreur ,
Juste quelques idées supplémentaires:
Pour effectuer ce type de navigation, il existe une commande très puissante qui vous permet de trouver récursivement ce que vous recherchez:
Var2=`find /stud_data/Input_Data/test3 -name '*.txt' | wc -l`
Si vous ne voulez pas que cela soit récursif:
Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -name '*.txt' | wc -l`
Si vous ne voulez que des fichiers (c’est-à-dire sans lien symbolique, ni répertoires)
Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -type f -name '*.txt' | wc -l`
Et ainsi de suite … Veuillez lire la page de manuel: man find
.
Comme votre question concerne bash , il y a un certain bashisme que vous pourriez utiliser pour rendre cela plus rapide:
#!/bin/bash Var1=22 VarLs=(/stud_data/Input_Data/test3/*.txt) [ -e $VarLs ] && Var2=${#VarLs[@]} || Var2=0 Var3=$(( Var1 + Var2 )) echo $Var3 # Uncomment next line to see more about current environment # set | grep ^Var
Où l’extension bash traduira /path/*.txt
dans un tableau contenant tous les noms de fichiers correspondant au formulaire jocker.
S’il n’y a pas de fichier correspondant au formulaire, VarLs
ne contiendra que le formulaire jocker lui-même.
Donc, le test -e
corrigera ceci: Si le premier fichier de la liste renvoyée existe, puis assigne le nombre d’éléments de la liste ( ${#VarLs[@]}
) à Var2
sinon, affectez 0
à Var2
.