Shell question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell question
# 1  
Old 03-21-2013
Shell question

Hi,

I have this piece of code but I can not understand it in details and it is difficult to find in net. What is the function of the $, type, d and prefix here?

This script wants to get each file from their directory.

Thanks in advance.

Code:
for i in $(find  /file directory/ -type d | grep file name)
do 
prefix=`echo $i | cut -f5 -d"/"`
out=$prefix.out
echo $prefix

# 2  
Old 03-21-2013
find /file directory/ -type d => list out all the directories (-type d) in /file directory/
grep file_name => finds the file_name from the list
$(command) => pretend the result of the command to be a variable

But I don't think this script will "get each file from their directory". You will have to change -type d to -type f then.

Best of Luck Smilie
This User Gave Thanks to PikK45 For This Post:
# 3  
Old 03-21-2013
-type d means only find directories.
Go to a directory tree and experiment:

Code:
$ find . -type f -print
$ find . -type d -print

prefix is a variable here. It's holds a value.
For example, if the file is called taco.txt the prefix is taco.

The $ is used to refer to a variable.
So you say "x=1" to store 1 to the variable.
But you say "echo $x" to display the stored value.

The other $ is used with $(command) syntax to use the output from a command.

To learn, try putting in echo commands to see what happens with intermediate variables. For example, "echo $i".
This User Gave Thanks to hanson44 For This Post:
# 4  
Old 03-21-2013
What shell are you using?

I'm a bit confused with what it is trying to do, but here goes:-

Code:
for i in $(find  /file directory/ -type d | grep file name)
do 
prefix=`echo $i | cut -f5 -d"/"`
out=$prefix.out
echo $prefix

for i in starts a loop between the following do & done (which you haven't got, so it will fail with a syntax error, unless this is just a snippit.

The $( through to ) set up the conditions for the loop by executing the contents.

It then gets a bit murky. I'm hoping that the "file directory" and "file name" are actually single items, not with spaces in them, else the meaning changes completely. If they are actually filedirectory and filename then the find command will search from filedirectory for any other directories because of the option -type d

You loop then executes for each occurrence.

The prefix= is an odd statement, but it is getting the 5th field of the directory name found. So if you had the following, you would get this output:-

Code:
/filedirectory/a/b        no output
/filedirectory/a/b/c      c
/filedirectory/a/b/c/d    c

The first field here is before the first / so that's why c is the only thing displayed on the second line. Because you are after the 5th field, you never get the d from the third line. If you do want that level and all subsequent, change the cut to be cut -f5- -d "/"

You then assign variable out to be the value determined above appended with .out and then never use it, just displaying the line determined above.

So, if you have the directory structure alluded to above, you would get the final output of this:-
Code:
blank line
c
c


What are you trying to achieve overall? There is probably a better (less processing/IO) and neater way to do it.



I hope that this helps.


Robin
Liverpool/Blackburn
UK
This User Gave Thanks to rbatte1 For This Post:
# 5  
Old 03-21-2013
Thanks alot for your explanations. I am using Shell in Ubuntu 12.04.
I have already finished the task I needed to do with this script but as I have not written it, I could not understand it well but now, it's more clear.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Question regarding for shell scripting.

I tried to run a command which simply generates SSH key with out prompting password. After several trails , got the below command to run the script : ssh-keygen -t rsa -N "" -f id_rsa -N "" tells it to use an empty passphrase (the same as two of the enters in an interactive script) -f... (0 Replies)
Discussion started by: ulaxmi
0 Replies

2. Shell Programming and Scripting

Shell question

Hallo everyone, I have this code: DBNAME=DB_001 EXPORTPATH=./work EXPORTDATUM=${1} EXPORTSQL=$(dirname $0)/export_script.sql EXPORTSQL_TMP=${EXPORTPATH}/export.sql READYFILE=${EXPORTPATH}/ready EXPORTFILE_PREFIX=file.csv ## Prüfungen if ; then echo "not found" exit 1 fi I am... (2 Replies)
Discussion started by: ratnalein88
2 Replies

3. Homework & Coursework Questions

question in 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 Bourne shell script which: • Has one command line argument. • If the command line argument is a... (5 Replies)
Discussion started by: abood1190
5 Replies

4. Programming

question on shell script

when i run a shell script i have to type ./my_prog and the first line of my_prog has to have #!/usr/bin/env bash how do i change it to i only have to type my_prog to run it? (4 Replies)
Discussion started by: omega666
4 Replies

5. UNIX for Dummies Questions & Answers

Shell Question

Hi All, I am having this problem and I can't find a decent answer anywere. I'am trying to perform multiple command in a shell script. For example mkdir test tar cvzf test.tar.gz test/ rmdir test The problem I get is that if I run this file as a cronjob, with a big "test" folder; the... (4 Replies)
Discussion started by: dswz
4 Replies

6. UNIX for Dummies Questions & Answers

Linux Shell Question: how to print the shell script name ?

Suppose I have a script named "sc.sh" in the script how to print out its name "sc.sh"? (3 Replies)
Discussion started by: meili100
3 Replies

7. Shell Programming and Scripting

Shell script question

Hello, i am doing a project for school and i cannot figure out whats wrong with my 2 programs they dont seem to work at all. the first program is called isprime and naturally it checks to see if hte number is prime or not here is my code: #!/usr/bin/bash num=$1 echo you typed if ... (2 Replies)
Discussion started by: jbou1087
2 Replies

8. Shell Programming and Scripting

shell question

Can someone please explain the PS1="${x##*/}\$ " ?? how does that lop off leading components? I don't understand it.. thanks cd ( ) { command cd "$@" Actually change directory x=$(pwd) Get current directory name into variable x PS1="${x##*/}\$ " ... (2 Replies)
Discussion started by: convenientstore
2 Replies

9. Shell Programming and Scripting

shell command question

I'm running a select statmenet from shell script, sometimes the result for the select is no rows selected. my question is, can I find a command in the shell asking about the result of the select and if the result is no data found print any msg I want instead of just writting no rows selected.... (3 Replies)
Discussion started by: aya_r
3 Replies

10. UNIX for Dummies Questions & Answers

Shell question

In Unix, How to find the file when i have the matter by subdirectory wise. I have used the 'grep' command, but i can't get it, can anyone give the command of matter searched by subdirectorywise. :confused: (5 Replies)
Discussion started by: anjanb2
5 Replies
Login or Register to Ask a Question