Unix/Linux Go Back    


Homework & Coursework Questions Students must use and complete the template provided. If you don't, your post may be deleted! Special homework rules apply here.

Help with creating a simple shell script

Homework & Coursework Questions


Reply    
 
Thread Tools Search this Thread Display Modes
    #1  
Old Unix and Linux 03-19-2017
Scripter12345 Scripter12345 is offline
Registered User
 
Join Date: Mar 2017
Last Activity: 19 March 2017, 11:07 PM EDT
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Help with creating a simple shell script

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

1. The problem statement, all variables and given/known data:

Write a shell script that accepts two arguments. The two arguments are the
name of 2 files.
• If the arguments are not 2, display “need 2 arguments” and quit.
• If one or both of the arguments are directory, display “No directories
please” and quit.
• If one of the two files does not exist, display “filename: no such file” where
filename is the name of the missing file, then quit. If the two files do not
exist, repeat the above for the 2 files, each in a separate line and quit.
• If the 2 files do exist, then display one of the two phrases, “The two files
are identical” or “The two files are not identical” then quit.




3. The attempts at a solution (include all code and scripts):


Code:
{
printf "%s\n" "$1"
cat "$2"
} > tempfile.$$
mv tempfile.$$ "$2"



4. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

Concodia University, Toronto, Canada , Hamza, CS1032

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

Last edited by Scrutinizer; 03-20-2017 at 12:57 AM.. Reason: code tags
Sponsored Links
    #2  
Old Unix and Linux 03-19-2017
drysdalk drysdalk is offline
Registered User
 
Join Date: Feb 2017
Last Activity: 23 July 2017, 8:18 AM EDT
Location: United Kingdom
Posts: 182
Thanks: 9
Thanked 61 Times in 59 Posts
Hi,

OK, there's a few concepts you'd need to get to grips with in order to write a solution to this problem. You've not said what shell or platform you're using, so I'm going to assume you're using Bash on Linux here, as that's probably the most likely possibility.

Firstly: knowing how many parameters a script has passed to it. This is actually fairly straightforward, and is handled by the Bash built-in variable $#. Take a look at this one-line example script, and try running it with different numbers of arguments. You should soon get a feel for how this works.


Code:
#!/bin/bash
echo "You provided $# arguments to this script."

Next, testing things. There will be times (such as in your problem statement here) when you need to know how many arguments there are, or if they're equivalent to each other. Bash has a few ways of doing this, the simplest and most straightforward for your purposes being the if statement.

For instance, try running this second small example script with different numbers of arguments. Take particular note of what happens if you run it with three arguments.


Code:
#!/bin/bash

if [ "$#" == "3" ]
then
        echo "You entered three arguments - that's my lucky number, thank you !"
else
        echo "Hmm.  That's an OK number of arguments, but it's not my favourite. Thanks for trying though."
fi

Here, we're checking to see if the number of arguments ($#) is equal (==) to the number 3. If it is, we display a special message. If it's anything other than three (in other words, if it's something else), we display another message instead.

Now, Bash can test for all kinds of things besides whether one thing is equal to another thing. Of particular interest to you should be the conditional tests it can carry out to check if something is a file, or a directory, or if it exists, and so on. If you look at the man page for Bash in the "CONDITIONAL EXPRESSIONS" section, you'll find a whole list of these.

For example, if I wanted to check to see if the second argument passed to my script actually existed on the filesystem, I could do something like this.


Code:
#!/bin/bash

if [ -e "$2" ]
then
        echo "Hey, look !  The second argument you gave me exists !  Let's take a look at what it is:"
        /bin/ls -ld "$2"
fi

Here, we check to see if the second argument ($2) exists (the meaning of the -e conditional expression). If it does, we print a message, and run the command /bin/ls -ld on it.

The last thing you'll probably need to understand to fully solve this problem is that conditional expressions (and plenty else besides) can be chained together using logic such that at least one of them must be true, or that they all must be true. Take a look at the "Compound Commands" section of the Bash man page to read how they all work.

I'll leave you with one last example though of a situation where we want to check that two particular things are the case at the same time.


Code:
#!/bin/bash
if [ "$1" == "dog" ] && [ "$2" == "cat" ]
then
        echo "Those are my two favourite animals too !  We have a lot in common !"
else
        echo "Sorry, but those aren't my two favourite animals."
fi

Here, if the first argument ($1) and (the meaning of && here) the second argument ($2) are equal to "dog" and "cat" respectively, we print a special message. If they're not both set to exactly those things (and they both must be, due to our use of && here) then we print another message instead.

Anyway, hope all this helps give you some pointers on how to get started, and which documentation is best to look at to familiarise yourself with the Bash tests you'll need to know about.
The Following User Says Thank You to drysdalk For This Useful Post:
Scrutinizer (03-20-2017)
Sponsored Links
    #3  
Old Unix and Linux 03-19-2017
Scripter12345 Scripter12345 is offline
Registered User
 
Join Date: Mar 2017
Last Activity: 19 March 2017, 11:07 PM EDT
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
This is awesome help. Thanks so much for your time!!
    #4  
Old Unix and Linux 03-20-2017
RudiC RudiC is offline Forum Staff  
Moderator
 
Join Date: Jul 2012
Last Activity: 27 July 2017, 4:41 PM EDT
Location: Aachen, Germany
Posts: 11,067
Thanks: 284
Thanked 3,412 Times in 3,142 Posts
Quote:
Originally Posted by Scripter12345 View Post
.
.
.
• If the 2 files do exist, then display one of the two phrases, “The two files
are identical” or “The two files are not identical” then quit.
.
.
.
If you don't want to display either phrase at random, look into the diff or cmp commands...
Sponsored Links
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Linux More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Creating a simple ID Script kkishore4580 UNIX for Beginners Questions & Answers 4 10-23-2016 03:35 PM
how to execute ksh simple shell script without creating .sh file Sooraj_Linux Shell Programming and Scripting 7 10-24-2011 06:40 AM
Creating simple shell program Mayuri P R Shell Programming and Scripting 1 01-27-2009 06:49 AM
creating a simple archiving script lensmen Shell Programming and Scripting 3 12-05-2007 08:16 AM
Creating a command history feature in a simple UNIX shell using C -=Cn=- Shell Programming and Scripting 2 11-13-2007 12:04 AM



All times are GMT -4. The time now is 10:47 AM.