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 |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
|
 |
|
05-02-2012, 11:59 AM
|
#16
|
LQ Newbie
Registered: May 2012
Posts: 19
Original Poster
Rep:
|
#!/bin/bash
if [ $# -eq 0 ]
then
echo "please enter some arguments"
fi
x=$#
---now how to proceed
|
|
|
05-02-2012, 12:01 PM
|
#17
|
LQ Newbie
Registered: May 2012
Posts: 19
Original Poster
Rep:
|
#!/bin/bash
if [ $# -eq 0 ]
then
echo "please enter some arguments"
fi
x=$#
---now how to proceed
|
|
|
05-02-2012, 12:26 PM
|
#18
|
Member
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 594
Rep: 
|
hint:rev
|
|
|
05-02-2012, 12:46 PM
|
#19
|
LQ Guru
Registered: Jul 2003
Location: Birmingham, Alabama
Distribution: SuSE, RedHat, Slack,CentOS
Posts: 27,659
|
Quote:
Originally Posted by arungala
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.
|
|
|
05-02-2012, 01:21 PM
|
#20
|
Member
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 594
Rep: 
|
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.
|
|
|
05-02-2012, 01:25 PM
|
#21
|
LQ Guru
Registered: Nov 2010
Location: Colorado
Distribution: OpenSUSE, CentOS
Posts: 5,573
|
Quote:
Originally Posted by whizje
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.
|
05-02-2012, 01:29 PM
|
#22
|
Member
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 594
Rep: 
|
I know. Sed would be more appropriate.
Last edited by whizje; 05-02-2012 at 01:30 PM.
|
|
|
05-02-2012, 01:29 PM
|
#23
|
LQ Addict
Registered: Dec 2011
Location: UK
Distribution: Debian Sid AMD64, Raspbian Wheezy, various VMs
Posts: 7,680
|
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.
|
|
|
05-02-2012, 02:10 PM
|
#24
|
Member
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 594
Rep: 
|
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$
|
|
|
05-02-2012, 02:19 PM
|
#25
|
LQ Guru
Registered: Nov 2003
Location: Canada
Distribution: distro hopper
Posts: 11,352
|
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.
|
05-02-2012, 02:43 PM
|
#26
|
Member
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 594
Rep: 
|
All arguments on one line is trivial
but the is a nice one !
|
|
|
05-02-2012, 02:56 PM
|
#27
|
LQ Newbie
Registered: May 2012
Posts: 4
Rep: 
|
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.
|
05-02-2012, 05:10 PM
|
#28
|
LQ Guru
Registered: Nov 2003
Location: Canada
Distribution: distro hopper
Posts: 11,352
|
Could you please edit the thread title to be more descriptive and appropriate to your problem? Say, "bash: sorting the arguments"?
|
|
|
05-02-2012, 05:12 PM
|
#29
|
Member
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 594
Rep: 
|
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.
|
05-02-2012, 05:19 PM
|
#30
|
LQ Guru
Registered: Nov 2003
Location: Canada
Distribution: distro hopper
Posts: 11,352
|
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.
|
|
|
All times are GMT -5. The time now is 06:27 AM.
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|