nixCraft Poll

Topics

How to: Check the bash shell script is being run by root or not

Posted by Vivek Gite [Last updated: January 6, 2008]

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:

Discussion on This Article:

  1. Jeff Schroeder Says:

    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

  2. vivek Says:

    Nice suggestion, the post has been updated.

  3. diana Says:

    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…

  4. Fabio Says:

    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

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!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Tags: , , ,

Copyright © 2004-2008 nixCraft. All rights reserved - TOS/Disclaimer - Privacy policy - Sitemap - Powered by Open source software.