Skip to content
Advertisement

Linux Bash script isnt printing out correctly

GOAL: My goal in this assignment is to create a script that will take in a student id as an input and will output a matching student’s name OR an error message saying there is none by that name in this class. Im fairly new to Linux and it is kinda tough for me but I would love all the help I can get. Thanks!

Screenshot Page 1 of assignment

Screenshot Page 2 of assignment

My script is printing off everyones name in the file rather than just the one I am searching for.

  #!/bin/bash
# findName.sh
searchFile="/acct/common/CSCE215-Fall17"

if [[ $1 = "" ]] ; then
  echo "Sorry that person is not in CSCE215 this semester"
  exit 2
fi

while read LINE
do
    firstNameIndex=0
    middleNameIndex=1
    lastNameIndex=2
    userIDIndex=3

    IFS=', ' read -r -a lineArray <<< "$LINE"

        if [[ $1 -eq ${lineArray[$userIDIndex]} ]] ; then
        echo ${lineArray[$firstNameIndex]} ${lineArray[$middleNameIndex]} ${lineArray[$lastNameIndex]}
    fi

done < "$searchFile"

Advertisement

Answer

VERSION 3:

Here is how I would do it with grep. This prevents you from looping through the input file.

#!/bin/bash

searchFile="sample.txt"

function notincourse()
{
    echo "Sorry that person is not in CSCE215 this semester"
    exit 2
}

# Verify arguments, 1 argument, name to search for
if [ $# -ne 1 ]
then
    echo "findName.sh <NAME>"
    exit 1
else
    searchfor=$1
fi

# Verify if the name is in the file
nameline=$(grep $searchfor $searchFile)
#if [ $(echo $nameline | wc -l) -eq 0 ]
if [ $? -eq 1 ]
then
    notincourse
else
    idvalue=$(echo $nameline | cut -d',' -f1)
    if [ "$idvalue" == "$searchfor" ]
    then
        IFS=', ' read -r -a lineArray <<< "$nameline"
        echo ${lineArray[1]} ${lineArray[2]} ${lineArray[3]}
    else
        notincourse
    fi
fi

I tried if with the following test input file:

111, firstname1, middlename1, lastname1
222, firstname2, middlename2, lastname2
333, firstname3, middlename3, lastname3

VERSION 3: it now verifies that the id is indeed the first word in the line. I realized that if the student id is someown included in his name (ya, but better safe than sorry!) my grep would return true!

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement