Shell Script (beginner)

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions Shell Script (beginner)
# 1  
Old 11-23-2012
Shell Script (beginner)

1. The problem statement, all variables and given/known data:
Arguments:
http://farm9.staticflickr.com/8070/8...6e8c10c5_c.jpg

I am given these three arguments. $1, $2, $3
The first argument is the path to a directory.
So, how would I go into the directory and compare files?

I also need to check if the second argument (a C program) can compile or not. I don't know how.

I have no idea.
Try to keep your answer simple. I'm new to this.
Thank you so much for your time.
(I am learning Bourne shell)

2. Relevant notes:

This is the handout of my assignment:
http://farm9.staticflickr.com/8346/8...c3096663_z.jpg
http://farm9.staticflickr.com/8201/8...0263744b_c.jpg

3. My attempt at a solution:

Code:
if (test $# -ne 3)
then
  echo Usage a2.sh <testdir> <C program> <time limit>
  exit 1 # exit failure
elif (test ! -d $1) # arg1 is not a directory
then
  echo $1 is not a directory.
  exit 1 # exit failure
elif (test ! -r $1) || (test ! -x $1) # arg1 is a directory, but not readable or excutable.
then
  echo $1 is not accessible.
  exit 1 # exit failure
elif (test ! -e $2) || (test ! -r $2) #arg2 doesn't exist, or is not readable.
then
  echo $2 is not accessible.
elif(test # check if arg2 doesn't compile. I don't know this case!!!!!!!!!!!!!!)

elif (test -ne [0-9][0-9]*)
then
  echo The third argument must be an integer.
fi
fi
fi
fi
fi
fi



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

York University, Toronto, Canada, Bil , cse 203 1

Last edited by Scott; 11-26-2012 at 04:54 PM.. Reason: Post restored; Thread Closed.
# 2  
Old 11-23-2012
A single fi is enough to close the if elif. For testing if file can be compiled, it is clearly mentioned in assignment to use cc compiler without options. Use regex to test for integers:-
Code:
if [ $# -ne 3 ]
then
        echo "Usage a2.sh <testdir> <C program> <time limit>"
        exit 1    # exit failure
fi

if [ ! -d $1 ]   # arg1 is not a directory
then
        echo $1 is not a directory.
        exit 1    # exit failure
elif [ ! -r $1 ] || [ ! -x $1 ]  # arg1 is a directory, but not readable or excutable.
then
        echo $1 is not accessible.
        exit 1    # exit failure
elif [ ! -e $2 ] || [ ! -r $2 ]   #arg2 doesn't exist, or is not readable.
then
        echo $2 is not accessible.
# elif [ $2 use cc compiler with no options ]
elif ! [[ $3 =~ ^[0-9]+$ ]] # using regex to test integer
then
        echo The third argument must be an integer.
        exit 1
fi

# 3  
Old 11-23-2012
1. When you say "compare files", what exactly you want to do?
2. To check if a C program can compile or not, pass the C file to the C-compiler' for e.g., cc test.c and check the exit status echo $?. Anything other than 0 would mean compilation was not a success.
# 4  
Old 11-24-2012
Thank you for helping me.

compare files:
I mean I'm given the path to a directory. How do I go into the directory, and how can I tell it's a .in file and find a corresponding .out file?



I meant to write:
Code:
elif test $3 -ne [0-9][0-9]*

Can I still use this?


I don't know how to get the C program from the second argument path...Smilie

-----------------------------------------------------------------------------------------------------------

---------- Post updated 11-24-12 at 04:23 PM ---------- Previous update was 11-23-12 at 05:06 PM ----------

Hey guys.

I'm not sure if this is the correct way.
So, I figured out:
Code:
getFile=` find $1 -type f -name '*.in' `

I think this means it finds all the .in files in the path of argument 1.

Now, I'm really stuck on how to find it's corresponding .out file.

Last edited by spider-man; 11-23-2012 at 08:25 PM..
# 5  
Old 11-24-2012
Use a for loop instead, for every .in file check if .out exist or not:-
Code:
for in_file in *.in
do
        out_file=$( echo $in_file | sed 's/\.in/\.out/g' ) # replace .in with .out
        if [ ! -f ${out_file} ]  # check if corresponding .out file exists.
        then
                echo ${out_file} is missing.
        fi
done

# 6  
Old 11-24-2012
Quote:
Originally Posted by spider-man
I'm not sure if this is the correct way.
So, I figured out:
Code:
getFile=` find $1 -type f -name '*.in' `

I think this means it finds all the .in files in the path of argument 1.
Good research skills! Many people here are not at all able to independently come up with an at least valid try.

Alas, this line might even work, so when i tell you that there are a few problems with it - please believe me! I'll try to explain:

first problem: proper quoting

Code:
find $1

This will work as long as "$1" contains only "normal" paths, like "/some/dir". It will fail, though, when the path contains a space, because a space character is also used by the shell to delimit arguments. Consider the following two lines:

Code:
command arg1 arg2 arg3
command arg1 "arg2 arg3"

the first command gets 3 arguments, "arg1", "arg2" and "arg3". The second command only gets two: "arg1" and "arg2 arg3". The double quote in this case tells the shell to treat the blank like a normal character. Because it won't hurt script programmers routinely protect their variables:

Code:
find "$1"


next problem: where do you want to search?

"find" is a command which searches recursively. That is, it finds files not only in the directory it starts in, but in every subdirectory there might be too. Do you want that? Or do you want to only search in the directory you named? Depending on your answer you may have to either modify "find" (read the man page about the "-prune"-option) to only search this directory and not its subdirectories or use "ls" instead of find.

last problem: subshell invocation

it is possible to invoke a series of commands and fill their output to a variable. Historically this has been done with backticks, like you did. Still, backticks have some severe limitations and are deprecated. Instead there is the "$(...)". Alas, there are still a lot of examples on the net with backticks. Believe me, they are all flawed in this regard. Backticks do not offer a single advantage over the modern subshell invocation but a lot of disadavantages: cannot be nested, cannot be quoted, just to name two. Therefore:

Code:
getFile="$(find "$1" -type f -name '*.in')"

I hope this helps.

bakunin
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Beginner bash - basic shell script 'while' help...

Hi everyone, first time visitor to these forums here. Keeping a long story short I've been attempting to learn how to code in bash. I have VERY little previous experience with coding languages besides simply copying and pasting batch scripts for Windows. So, with that in mind I've followed a... (4 Replies)
Discussion started by: Meta
4 Replies

2. Shell Programming and Scripting

If condition shell script beginner

Hi all I have the folloing process that needs checking often: ps -ef | grep ih bscsrtx 206 15901 0 11:28:10 pts/6 0:00 fih -r4 bscsrtx 218 15901 0 11:28:27 pts/6 0:01 aih bscsrtx 29763 15901 4 11:27:16 pts/6 0:59 rdh -prih root 429 27268 0 11:30:15 pts/td ... (13 Replies)
Discussion started by: fretagi
13 Replies

3. Shell Programming and Scripting

C shell - a question of a beginner

Hi, can someone explain how this aliases work: alias m 'if ( \!:$ =~ *gz) set status = 1 && most \!:$ || gzcat \!:1 | most ' I mean, I know what it does, but I don't know how - what is \!:$ and \!:1 - how do it used the && and || - what it does with status variable? thanks (3 Replies)
Discussion started by: tzvikao
3 Replies

4. Shell Programming and Scripting

Shell Programming (beginner help)

So guys basically I was really sick and couldn't attend the labs and lectures and I went to my lecture hoping he would say ok I will help you from the start but he just said google it. So If it's possible to make the assignment and explain more in detail why is that would be really helpfull. I can... (1 Reply)
Discussion started by: Joola94
1 Replies

5. Homework & Coursework Questions

Shell-script loops beginner

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: "Create a shell script that changes the selected word to another word in all files from selected archive. The... (1 Reply)
Discussion started by: oibanuelos
1 Replies

6. Shell Programming and Scripting

Shell script (beginner) need help...

Hello, I'm new to Sheel script and I need your help for a script I need to develop (for me). Indead, I have a software which log all entry from internet and save it in text file. But, the log is practically unreadable because every 256 characters jump to a new line (even if the message is... (5 Replies)
Discussion started by: acidoangel
5 Replies

7. Shell Programming and Scripting

Debugging a beginner shell script...

I have been following a tutorial on bash which has proven to be very helpful. However, i am stuck with a command not found issue when asking for a y/n response from the user. Below is the part of code I believe is giving me grief... I have been trying to work through this for 3 hours now.... Please... (5 Replies)
Discussion started by: brokepunk
5 Replies

8. Shell Programming and Scripting

Beginner shell script help

. ./testFile.sh url=http://ichart.finance.yahoo.com/table.csv?s= suf=&d=5&e=9&f=2009&g=d&a=1&b=4&c=1999&ignore=.csv wget $url$s1$suf; sleep 10; cat header.txt > $s1.txt; chmod 777 $s1.txt; sed '1d' table.csv?s\=$s1 >> $s1.txt; rm -Rf table* Very new at shell scripting as you can see... (3 Replies)
Discussion started by: harte
3 Replies

9. Shell Programming and Scripting

Shell Script for Beginner

I have a folder with lots of file. e.g. a.txt, b.txt, c.txt.... I want to put these files from the source directory and place them in a destination directory in a specific order, such as /destination/a/a.txt, /destination/b/b.txt, /destination/c/c.txt, ...... Please help. Thx :confused: (3 Replies)
Discussion started by: aaron_fong
3 Replies

10. Shell Programming and Scripting

Beginner trying to write a shell script!

Dear All, I'm trying to write a shell script that continously checks a certain folder. When a file is placed in the directory securely copies the file to another server. I've got the secure copying working, but I don't know how to contiously check a directory for a new file and then use that... (3 Replies)
Discussion started by: duncan_glover
3 Replies
Login or Register to Ask a Question