LinuxQuestions.org
Latest LQ Deal: Latest LQ Deals
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices


Reply
  Search this Thread
Old 11-28-2008, 07:53 AM   #1
rylan76
Senior Member
 
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552

Rep: Reputation: 103Reputation: 103
BASH: instad of echo-ing, I just want to assing to a bash variable... how??


Hi Guys

Given this bash fragment:

Code:
filename="${base%.*}"
echo ${base%}|awk -F . '{print $NF}'
how the heck do I get the output to go into a variable, INSTEAD of being echoed?

E. g. this does NOT work:

Code:
filename="${base%.*}"
ext="${base%}|awk -F . '{print $NF}'"
I just want what is echo-ed, to go into a bash variable instead - extremely simple - but I've been at this for hours (incredible eh?) but I simply cannot get it to work.

It feels as if I must escape something somehow, to keep the code from being "triggered" even if being assigned to a variable?
 
Old 11-28-2008, 08:00 AM   #2
colucix
LQ Guru
 
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,509

Rep: Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983
Use command substitution. Better with the $(...) syntax, unless you want your code be portable to the Bourne Shell.
 
Old 11-28-2008, 08:05 AM   #3
rylan76
Senior Member
 
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552

Original Poster
Rep: Reputation: 103Reputation: 103
Thanks... I already have... it is why I posted...

I have tried

Code:
ext="`${file_base%}|awk -F . '{print $NF}'`"
but this results in

[rylan@development ~]$ prozget.sh http://www.google.com.abc.def/tzaneen.xls
xls
tzaneen
./prozget.sh: line 8: ./tzaneen.xls: Permission denied

where line 8 is the above line of code...

How do I substitute correctly? The link you sent stipulated `` as command substitution characters.

Thanks! Any other ideas how to assign the output to a variable?
 
Old 11-28-2008, 08:07 AM   #4
rylan76
Senior Member
 
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552

Original Poster
Rep: Reputation: 103Reputation: 103
If I try

Code:
ext=$("${file_base%}|awk -F . '{print $NF}'")
as you seem to suggest (newbie - I don't understand what you mean with "use $(...)") it results in

Quote:
[rylan@development ~]$ prozget.sh http://www.google.com.abc.def/tzaneen.xls
xls
tzaneen
./prozget.sh: line 8: tzaneen.xls|awk -F . '{print }': command not found
I have also tried:

Quote:
ext="${`file_base%}|awk -F . '{print $NF}'`}"
ext="$${`file_base%}|awk -F . '{print $NF}'`}"
ext="{`file_base%}|awk -F . '{print $NF}'`}"
etc...

Ye gods... I just want that to go into a variable... not go to the moon...!

Last edited by rylan76; 11-28-2008 at 08:11 AM.
 
Old 11-28-2008, 08:15 AM   #5
dive
Senior Member
 
Registered: Aug 2003
Location: UK
Distribution: Slackware
Posts: 3,467

Rep: Reputation: Disabled
Code:
ext=`echo ${base%}|awk -F . '{print $NF}'`
 
Old 11-28-2008, 08:18 AM   #6
colucix
LQ Guru
 
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,509

Rep: Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983
Quote:
Originally Posted by rylan76 View Post
newbie - I don't understand what you mean with "use $(...)"
If you take a look at the link I have provided, you will find out!
Quote:
Ye gods... I just want that to go into a variable... not go to the moon...!
Take it easy. You want the output of a command into a variable, right? The correct syntax is
Code:
varname=$(command)
where "command" must be some valid command giving some output. Ok, first build the command, then embed it with the syntax for command substitution. Is the following a valid command?
Code:
${file_base%}|awk -F . '{print $NF}'
No. And the following?
Code:
echo ${file_base%}|awk -F . '{print $NF}'
Yes. Now assign the output to a variable:
Code:
my_var=$(echo ${file_base%}|awk -F . '{print $NF}')
Easy now?
 
Old 11-28-2008, 08:20 AM   #7
rylan76
Senior Member
 
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552

Original Poster
Rep: Reputation: 103Reputation: 103
Hi Dive, Colucix

This

Quote:
Originally Posted by dive View Post
Code:
ext=`echo ${base%}|awk -F . '{print $NF}'`
just results in the nothing being assigned to the $ext bash variable....

e. g.

Code:
[rylan@development ~]$ prozget.sh http://www.google.com.abc.def/tzaneen.xls
xls
tzaneen

[rylan@development ~]$
where I changed

Code:
echo ${file_base%}|awk -F . '{print $NF}'
into

Code:
ext=`echo ${base%}|awk -F . '{print $NF}'`
echo $ext
I've also tried

Code:
ext="`echo ${base%}|awk -F . '{print $NF}'`"
ext=$"`echo ${base%}|awk -F . '{print $NF}'`"
ext=$("`echo ${base%}|awk -F . '{print $NF}'`")
with no luck at all...

Thanks for the help anyway... I had no idea this was so incredibly tough to do!

Last edited by rylan76; 11-28-2008 at 08:22 AM.
 
Old 11-28-2008, 08:23 AM   #8
rylan76
Senior Member
 
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552

Original Poster
Rep: Reputation: 103Reputation: 103
Dive and Colucix

Thanks...

[high embarrassment factor]
I had my variable reference wrong Dive... your suggestion worked.

Thanks Colucix! If you remove the idiot from the equation, your suggestions worked fine...
[/high embarrassment factor]

THANK YOU!!

Last edited by rylan76; 11-28-2008 at 08:25 AM.
 
Old 11-28-2008, 08:27 AM   #9
colucix
LQ Guru
 
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,509

Rep: Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983Reputation: 1983
Ok. Let's start from the beginning. You launch a script (prozget.sh) and pass a URL as argument. What do you want to put exactly inside the ext variable?

EDIT: Ok... didn't see your last message before posting. There is no idiot in the equation, just some hurry!

Last edited by colucix; 11-28-2008 at 08:28 AM.
 
Old 11-28-2008, 08:46 AM   #10
rylan76
Senior Member
 
Registered: Apr 2004
Location: Potchefstroom, South Africa
Distribution: Fedora 17 - 3.3.4-5.fc17.x86_64
Posts: 1,552

Original Poster
Rep: Reputation: 103Reputation: 103
Ok but thanks again anyway.

The whole idea of the script is to eventually call the prozilla downloader binary. The script first checks if the file you will download already exists in the directory you are calling the script in. If it is, it fudges the name of the file and renames it to the fudged name, THEN calls prozilla on the download. E. g. you will most likely not accidentally overwrite a file with a name that is the same of the file you are prozilla'ing down off some server somewhere.

Here's my final script, and it works - thanks to you guys' help!

Call with, for example,

Code:
filename="$1"
file_base=$(basename ${filename})
if [ -f ${file_base} ]; then
    #if the file exists already
    filename="${file_base%.*}"
    ext=`echo ${file_base%}|awk -F . '{print $NF}'` #THANKS to Colucix and Dive!
    fudge=`echo $RANDOM` #THANKS to Colucix and Dive!
    underscore="_"
    fudge=$underscore$fudge
    dot="."
    newfile=$filename$fudge$dot$ext
    echo $newfile
    echo $file_base
    mv -i $file_base $newfile
    cmd="proz $1 -k4 --retry-delay=1"
    $cmd
else
    cmd="proz $1 -k4 --retry-delay=1"
    $cmd
fi
Much obliged guys!

Last edited by rylan76; 12-01-2008 at 03:27 AM.
 
  


Reply

Tags
bash, files, substitution, variable



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
passing variable from bash to perl in a bash script quadmore Programming 6 02-21-2011 04:11 AM
Reading a bash variable in bash scripting problem freeindy Programming 3 11-27-2008 02:29 AM
Need to re-source /etc/profile to access the net when sudo bash-ing Pier Linux - Newbie 1 12-19-2007 05:36 AM
(bash) echo "#!/bin/bash" event not found - trying to generate profiles automatically jimieee Programming 9 05-03-2006 10:24 AM
Turning echo off in bash slomek Programming 1 03-01-2006 11:38 AM

LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie

All times are GMT -5. The time now is 11:45 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration