Kwehmann
Kwehmann

Reputation: 19

bash script, ask for arg if not provided

I have created a script that will check to see if a user you provide is logged on and display the duration of the session if logged on. What i need to do now is if no argument (username) is provided when the command is issued, ask for one and have the same results as if you have provided one.

Here is what I have:

name=$(cat /etc/passwd | grep $1 | cut -d':' -f5 | tr ':' ' ' | sed 's/,//' | sed 's/^\([^ ]*\) \([^ ]*\)/\2 \1/' | sort -t' ' -k3,3)
terminal=$(who | grep $1 | cut -d' ' -f3)
loginHour=$(who | grep $1 | cut -c30-31)
loginMin=$(who | grep $1 | cut -c33-34)
loginMins=$((loginHour * 60 + loginMin))
nowHour=$(date +%R | cut -c1-2)
nowMin=$(date +%R | cut -c4-5)
nowMins=$((nowHour * 60 + nowMin))
totalMins=$((nowMins - loginMins))
hoursOn=$((totalMins / 60))
minsOn=$((totalMins % 60))

clear
echo
if [[ $# -eq 1 ]] ; then
    grep -q $1 /etc/passwd
    if grep -q $1 /etc/passwd ; then
        clear
        echo
        if who | grep $1 > /dev/null ; then
            echo "$name" is currently logged on to terminal "$terminal" and has been for "$hoursOn" hour"(s)" and "$minsOn" minute"(s)".
            echo
            exit 0
        else
            echo "$name" is NOT currently logged on.
            echo
            exit 1
        fi
    else
        echo The user you entered is not a valid user on this system.
        echo
        exit 2
    fi
fi

I had an attempt before but was not the desired result so I removed it out of confusion.

Upvotes: 1

Views: 464

Answers (2)

RedX
RedX

Reputation: 15165

You can also abort if no name given

# : does nothing it just forces the evaluation
: ${1:?"Need to provide name to script"}

Upvotes: 1

rojomoke
rojomoke

Reputation: 4015

if [[ $# -eq 0 ]]
then
    read -p "Enter Name: " username
else
    username=$1
fi

then replace all subsequent references to $1 by $username

Upvotes: 5

Related Questions