CT320: Network and System Administration

Fall 2018

Bash II

CT320 Bash Lab II

Group Project

You may work in pairs, if space demands.


The purpose of this assignment is to get more experience writing Linux scripts using bash and other commands. You will create and edit a bash script called pwval that uses many of the features of shell scripts described in the lecture.


The following commands might be useful for this lab:

Also, remember what $# means in a shell script.

Password file entry

Lines in /etc/passwd looks like this:

    applin:$6$30CrCh90r7Dl5Q4o$uwOkdKHjNkdBLIpreE090Cxt5z0WB765SLXry1QFE8n9fuwYrikKjY37kkPasFwf5My/w2HKgD6kdPsLT0hYV.:2464:1555:Jack Applin:/s/parsons/d/fac/applin:/bin/bash

The fields, separated by colons, are:

  1. username (e.g., “jsmith42”)
  2. encrypted password
  3. numeric user ID
  4. numeric group ID
  5. user name (e.g., “John Smith”)
  6. home directory
  7. shell program


You will write a bash script called pwval that ensures that /etc/passwd is good. It will:

  1. verify permissions on /etc/passwd
  2. no duplicate usernames
  3. no duplicate userids
  4. for every entry, verify that:
    • the password is non-empty
    • the home directory exists
    • the shell exists and is executable
    • the group exists in /etc/group


If an argument is given, then it is a file to be used instead of /etc/passwd. This is useful for testing.


Think of this program as something to be executed every day, from cron. Therefore, it should be relatively quiet. It shouldn’t say anything, unless bad things are detected.

However, when the script does emit an error message, it must contain sufficient information to track down the problem. For example, an error message that simply says “duplicate user name” is insufficient—the message must specify, at least, what the duplicate user name is. Line numbers would be even better.

All error messages must:

Temporary Files

To get a temporary file, use mktemp to generate a unique name:

#! /bin/bash
echo "My temp file is $tmpfile"
date >$tmpfile
cat $tmpfile
rm $tmpfile
My temp file is /tmp/tmp.CztbfZLIR2
Wed Jan 23 15:19:02 MST 2019

Get Credit

When you have tested your script, and it works, show your work to the TA.

User: Guest

Edit History Source

Modified: 2018-09-06T14:13

Apply to CSU | Contact CSU | Disclaimer | Equal Opportunity
Colorado State University, Fort Collins, CO 80523 USA
© 2018 Colorado State University
CS Building