vendredi 20 octobre 2017

Bash - if statement not automatically operating

I'm having a very odd problem with a bash script, written on Ubuntu 17.04 machine.

I have a txt file that contains information about people in this fashion:

number name surname city state

With these infos I have to create an organization system that works by state. For example, with a list like this

123 alan smith new_york NEW_YORK

123 bob smith buffalo NEW_YORK

123 charles smith los_angeles CALIFORNIA

123 dean smith mobile ALABAMA

the outcome at the end of the computation should be three new files named NEW_YORK, CALIFORNIA and ALABAMA that contain people who live there.

The script takes as a parameter the list of names. I implemented an if statement (which condition is dictated by a test of existance for the file, just in case there's more people living in a certain state) inside a for loop that, oddly, doesn't operate unless I press enter while the program is running. The outcome is right, I get the files with the right people on them, but it baffles me that I have to press enter to make the code work, it doesn't make sense to me.

Here's my code:

#!/bin/bash

clear

#finding how many file lines and adding 1 to use the value as a counter later
fileLines=`wc -l addresses | cut -f1 --delimiter=" "`
(( fileLines = fileLines+1 ))

for (( i=1; i<$fileLines; i++ ))
do    
    #if the file named as the last column already exists do not create new one
    test -e `head -n$i | tail -n1 | cut -f5 --delimiter=" "`
    if [ $? = 0 ]
    then
        head -n$i $1 | tail -n1 >> `head -n$i $1 | tail -n1 | cut -f5 --delimiter=" "`
    else
        head -n$i $1 | tail -n1 > `head -n$i $1 | tail -n1 | cut -f5 --delimiter=" "`
    fi
done

echo "cancel created files? y/n"
read key

if [ $key = y ]
then
    rm `ls | grep [A-Z]$`
    echo "done"
    read
else
    echo "done"
    read
fi

clear

What am I doing wrong here? And moreover, why doesn't it tells me that something's wrong (clearly there is)?

Aucun commentaire:

Enregistrer un commentaire