LinuxQuestions.org
Share your knowledge at the LQ Wiki.
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 05-02-2012, 11:59 AM   #16
arungala
LQ Newbie
 
Registered: May 2012
Posts: 19

Original Poster
Rep: Reputation: 0

#!/bin/bash
if [ $# -eq 0 ]
then
echo "please enter some arguments"
fi
x=$#

---now how to proceed
 
Old 05-02-2012, 12:01 PM   #17
arungala
LQ Newbie
 
Registered: May 2012
Posts: 19

Original Poster
Rep: Reputation: 0
#!/bin/bash
if [ $# -eq 0 ]
then
echo "please enter some arguments"
fi
x=$#

---now how to proceed
 
Old 05-02-2012, 12:26 PM   #18
whizje
Member
 
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 592

Rep: Reputation: 140Reputation: 140
hint:rev
 
Old 05-02-2012, 12:46 PM   #19
TB0ne
LQ Guru
 
Registered: Jul 2003
Location: Birmingham, Alabama
Distribution: SuSE, RedHat, Slack,CentOS
Posts: 18,785

Rep: Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159Reputation: 4159
Quote:
Originally Posted by arungala View Post
Code:
#!/bin/bash
if [ $# -eq 0 ]
then
echo "please enter some arguments"
fi
x=$#
If it took you FOUR HOURS to do this, you're in trouble. Also, you say you're working for a 'small company', but I cannot think of ANY reason why a 'company' would need a shell script to do what you're asking for. This is homework, so please be honest about it.

If you bothered to look at the bash scripting tutorial I posted to you before (or if you showed ANY effort into looking things up before you came here), you'd have had your solution. Again, we will spoon-feed you an answer:
http://tldp.org/LDP/abs/html/interna...s.html#ARGLIST

It shows you how to read multiple command-line arguments, and print them out. And 'rev' was mentioned...look it up.
 
Old 05-02-2012, 01:21 PM   #20
whizje
Member
 
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 592

Rep: Reputation: 140Reputation: 140
Code:
x=$@  # copy parameters to variable x
result=$(echo $x | rev | cut -d ' ' -f 2-)
echo $result ${x##*' '}
# echo $x : send x to standard output 
# rev : reverse line
# cut -d ' ' -f 2- : delimiter is space -f 2- is print from field 2 to end
# print $result is reversed line except first field 
# ${x##*' '} remove all fields from $x except last and print it.
 
Old 05-02-2012, 01:25 PM   #21
suicidaleggroll
LQ Guru
 
Registered: Nov 2010
Location: Colorado
Distribution: OpenSUSE, CentOS
Posts: 5,454

Rep: Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052Reputation: 2052
Quote:
Originally Posted by whizje View Post
Code:
x=$@  # copy parameters to variable x
result=$(echo $x | rev | cut -d ' ' -f 2-)
echo $result ${x##*' '}
That can't handle double-digit numbers, FYI

Code:
$./test.sh 1 2 13 5 4
5 31 2 1 4
 
1 members found this post helpful.
Old 05-02-2012, 01:29 PM   #22
whizje
Member
 
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 592

Rep: Reputation: 140Reputation: 140
I know. Sed would be more appropriate.

Last edited by whizje; 05-02-2012 at 01:30 PM.
 
Old 05-02-2012, 01:29 PM   #23
273
LQ Addict
 
Registered: Dec 2011
Location: UK
Distribution: Debian Sid AMD64, Raspbian Wheezy, various VMs
Posts: 6,596

Rep: Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880Reputation: 1880
I did it with rev too, but with more lines.
I'd be interested to know whether there's a way to do it without rev or any loops.
 
Old 05-02-2012, 02:10 PM   #24
whizje
Member
 
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 592

Rep: Reputation: 140Reputation: 140
This works without rev and loops the last number is also reversed but changing that is trivial.
Code:
echo 182 3 6 7 81 |tr ' ' '\n' | sed -n '1!G;h;$p' |tr '\n' ' ' ; echo
81 7 6 3 182 
bash-4.1$
 
Old 05-02-2012, 02:19 PM   #25
dugan
LQ Guru
 
Registered: Nov 2003
Location: Canada
Distribution: Slackware
Posts: 7,362

Rep: Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747
I was just thinking: why not concatenate all of the arguments to a single line and then sort that line?

Googled for how to sort items on a single line and got this:

http://www.unix.com/302353987-post2.html

Sort has a switch (finding it is your problem) that will cause it to sort in numerical order rather than lexical order.

You should know how to get all of the arguments on a single line from following this discussion alone.

I've just told you how to solve this. You're welcome.

Last edited by dugan; 05-02-2012 at 02:32 PM.
 
1 members found this post helpful.
Old 05-02-2012, 02:43 PM   #26
whizje
Member
 
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 592

Rep: Reputation: 140Reputation: 140
All arguments on one line is trivial
Code:
x=$@
but the
Code:
xargs -n 1
is a nice one !
 
Old 05-02-2012, 02:56 PM   #27
gajovy
LQ Newbie
 
Registered: May 2012
Posts: 4

Rep: Reputation: Disabled
Code:
#!/bin/bash

if [ $# -gt 0 ]; then
	TOREV=$( eval echo \$$# $@ )
	echo "$TOREV " | tac -s" "  | cut -d" " -f2-
	exit 0
else
	echo "please enter some args" >> /dev/stderr
	exit 1
fi
 
1 members found this post helpful.
Old 05-02-2012, 05:10 PM   #28
dugan
LQ Guru
 
Registered: Nov 2003
Location: Canada
Distribution: Slackware
Posts: 7,362

Rep: Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747
Could you please edit the thread title to be more descriptive and appropriate to your problem? Say, "bash: sorting the arguments"?
 
Old 05-02-2012, 05:12 PM   #29
whizje
Member
 
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 592

Rep: Reputation: 140Reputation: 140
Your programs gives problems with more then 10 parameters. A little adaptation.

Code:
#!/bin/bash

if [ $# -gt 0 ]; then
	echo "${@:$#} $@ "| tac -s" " | cut -d " "  -f 2-
	exit 0
else
	echo "please enter some args" >> /dev/stderr
	exit 1
fi
 
1 members found this post helpful.
Old 05-02-2012, 05:19 PM   #30
dugan
LQ Guru
 
Registered: Nov 2003
Location: Canada
Distribution: Slackware
Posts: 7,362

Rep: Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747Reputation: 2747
Uhm, whizje, are you sure you should be trying to actually give him a a complete answer in the form of code? Remember that this is homework.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

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
bash scripting question, homework related cybergeek11235 Linux - General 4 10-12-2008 10:59 PM


All times are GMT -5. The time now is 09:44 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
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration