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!