2017-10-05 7 views
1

Je suis totalement nouveau à l'écriture de code avec shell script.Bash Shell Erreurs de script: redirection ambiguë et opérateur unaire attendu

Ceci est mon code:

#!/bin/bash 
echo -n "Output to $2 " 
# set counter 
count=1 
# zap output file 
> $2 
# Loop 
while [ $count -le $1 ] 
do 
    # generate some random text 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    randomtext=`cat /dev/urandom | tr -cd "[:alnum:]" | head -c $randomnumber` 
    # generate a random number 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    # output to file 
    echo "$count,$randomtext,$randomnumber" | sed -e "s: *::g" >> $2 
    # increment counter 
    count=$(($count + 1)) 
    if [ $(($count % 500)) -eq 0 ] 
    then 
echo -n "." fi 
done 
echo " Output complete" 

Et ceci est mon erreur:

Line 2: ambiguous redirect and Line 14: unary operator expected. 

Quelqu'un peut-il me aider à comprendre pourquoi j'avoir cette erreur?

+1

Les numéros de ligne ne sont pas alignés sur le code. Corrigez s'il vous plaît. –

+1

Il semble que vous ayez besoin de valider la saisie de l'utilisateur. Est-ce que 2 arguments ont été fournis? –

+1

Lisez attentivement [Implications pour la sécurité de l'oubli d'une variable dans les shells bash/POSIX] (https://unix.stackexchange.com/q/171346/4667) –

Répondre

1

Comme @GlennJackman souligne, les lignes sont ne correspondent pas le code, donc je devine ce qui suit:

  • La redirection ambiguë est en ligne 6: Pour tronquer un fichier, vous devrait utiliser truncate -s0 $2
  • Pour l'erreur de l'opérateur unaire, je parie sur la ligne 21: soit mettre un saut de ligne ou un point-virgule ; avant fi

Essayez ce qui suit:

#!/bin/bash 
echo -n "Output to $2 " 
# set counter 
count=1 
# zap output file 
truncate -s0 $2 
# Loop 
while [ $count -le $1 ] 
do 
    # generate some random text 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    randomtext=`cat /dev/urandom | tr -cd "[:alnum:]" | head -c $randomnumber` 
    # generate a random number 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    # output to file 
    echo "$count,$randomtext,$randomnumber" | sed -e "s: *::g" >> $2 
    # increment counter 
    count=$(($count + 1)) 
    if [ $(($count % 500)) -eq 0 ] 
    then 
     echo -n "." 
    fi 
done 
echo " Output complete"