How to: Check the bash shell script is being run by root or not
Sometime it is necessary to find out if a shell script is being run as root user or not.
When user account created a user ID is assigned to each user. BASH shell stores the user ID in $UID variable. Your effective user ID is stored in $EUID variable. You can
Old way...
You can easily add a simple check at the start of a script:
Check the script is being run by root user
#!/bin/bash # Init FILE="/tmp/out.$$" GREP="/bin/grep" #.... # Make sure only root can run our script if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # ...
New way: Using EUID
#!/bin/bash # Init FILE="/tmp/out.$$" GREP="/bin/grep" #.... # Make sure only root can run our script if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" 1>&2 exit 1 fi # ...
Mount /dev/sdb1 only if you are a root
#!/bin/bash if [[ $EUID -ne 0 ]]; then echo "You must be a root user" 2>&1 exit 1 else mount /dev/sdb1 /mnt/disk2 fi
Updated for accuracy and more examples.
Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
You may also be interested in other helpful articles:
- Shell scripting: Reading a root password with su-to-root shell script
- Domain Expiration Check Shell Script
- FreeBSD > Sending a Message by E-Mail
- Temporary memory files and shell scripts
- Linux : How to run a command when boots up?
Discussion on This Article:
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!
Tags: check root user, root user, script to check root user, shell script



Make error messages go to STDERR (Standard Error) like they do in other Unix programs. That is the best way to do things.
if [ "$(id -u)" != "0" ]; then
echo “This script must be run as root” 2>&1
exit 1
fi
Nice suggestion, the post has been updated.
may be it was the wrong place to post this.Please help me,
I would like to send mail for each success login.i tried with this,
and place this in /root/.bashrc
#!/bin/bash
echo `last $i | head -1 | awk ‘{print $1″ “$3″ “$4″ “$5″ “$6″ “$7}’`|while read output;
do
echo $output
ip=$(echo $output | awk ‘{print $2}’ )
on=$(echo $output | awk ‘{print $3″ “$4″ “$5}’ )
at=$(echo $output | awk ‘{print $6′} )
echo “User logged in from $ip on $on at $at”|mail -s “Alert: user logged in to server $(hostname) from $ip” ephrondiana@gmail.com
done
but its sending mail for root login only,i need to send mail for users login also.Please help me…
Hi,
if you want to redirect a message to stderr using echo you have to use “1>&2″ instead of “2>&1″.
For example,
~ >> f(){
> echo “to stdout” 2>&1
> echo “to stderr” 1>&2
> }
~ >> f 2>/dev/null
to stdout #this is printed to stdout
~ >>
bye