[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-bash] Help With School Assignment, Learning Bash Scripts
From: |
Eduardo A . Bustamante López |
Subject: |
Re: [Help-bash] Help With School Assignment, Learning Bash Scripts |
Date: |
Wed, 5 Nov 2014 19:46:41 -0800 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Hey Nick :) You forgot to CC the list, I'll include a copy of your
email:
> I asked my teacher and all he states is read the power points.
> Furthermore I will paste all the steps below. If you have any
> other questions please let me known.
> Nick
> 1.Start this step by just adding the correct "echo" piped into the correct
> "grep", without redirecting the output, and make sure the script acts
> appropriately, for example:
>
> add2 4 -3 12 9
> 22
>
> add2 4 -3 twelve nine
> twelve
> nine
> 2.Now add an "if" structure right after the "echo ... | grep ...", testing the
> exit status of the "grep". If the "grep" was successful, then the appropriate
> message should be displayed, and the script terminated. Make sure the script
> acts appropriately, for example:
>
> add2 4 -3 12 9
> 22
>
> add2 4 -3 twelve nine
> twelve
> Sorry, 'twelve' is not a number
>
> 3.Finally, redirect the output of the grep to "/dev/null". Make sure the
> script acts correctly, for example:
>
> add2 4 -3 12 9
> 22
>
> add2 4 -3 twelve nine
> Sorry, 'twelve' is not a number
Yeah, I know teachers like these! I'm sorry about that, and about my
response :)
Ok, so you hve to do a script that adds numbers, and it should
complain if these are not really numbers. Then, it asks you to use
something that we consider "bad practice" (the, '"if" structure right
after the ...' part, that's wrong, but, ok, we'll do it as the
teacher says).
First step:
address@hidden ~/t % ./step1 9 -2 4
11
address@hidden ~/t % ./step1 9 -2 four
four
7
address@hidden ~/t % cat step1
#!/bin/bash
sum=0
for number in "$@"; do
echo "$number" | grep '[^0-9+-]'
sum=$((sum + number))
done
echo "$sum"
Then, teacher asks us to 'test' if grep was successful:
address@hidden ~/t % ./step2 9 -2 4
11
address@hidden ~/t % ./step2 9 -2 four
four
Sorry, 'four' is not a number
address@hidden ~/t % cat ./step2
#!/bin/bash
sum=0
for number in "$@"; do
echo "$number" | grep '[^0-9+-]'
if [ $? -eq 0 ]; then
echo "Sorry, '$number' is not a number"
exit 1
fi
sum=$((sum + number))
done
echo "$sum"
Then, as a last step, it asks us to 'mute' the output of grep:
address@hidden ~/t % ./step3 9 -2 4
11
address@hidden ~/t % ./step3 9 -2 four
Sorry, 'four' is not a number
address@hidden ~/t % cat ./step3
#!/bin/bash
sum=0
for number in "$@"; do
echo "$number" | grep '[^0-9+-]' >/dev/null
if [ $? -eq 0 ]; then
echo "Sorry, '$number' is not a number"
exit 1
fi
sum=$((sum + number))
done
echo "$sum"
Now, this is what the teacher *asked for*. But, I don't like it, I
would've done it like this:
address@hidden ~/t % ./correct 9 -2 4
11
address@hidden ~/t % ./correct 9 -2 four
Sorry, 'four' is not a number
address@hidden ~/t % cat correct
#!/bin/bash
shopt -s extglob
sum=0
for number in "$@"; do
if [[ $number != ?([+-])+([[:digit:]]) ]]; then
echo "Sorry, '$number' is not a number"
exit 1
fi
sum=$((sum + number))
done
echo "$sum"
I don't want to make this explanation long, so I'll just give you
some links you can read on why I said that:
- http://mywiki.wooledge.org/BashGuide/TestsAndConditionals#Conditional_Blocks
- http://wiki.bash-hackers.org/syntax/ccmd/if_clause
- http://mywiki.wooledge.org/glob#extglob
That should explain why:
- avoid using grep when you can do it inside the shell
- avoid doing: command; if [ $? -eq 0 ]; then.... when you can test
directly: if command; then ...
So, that's it. If you have questions on that, please ask.
- [Help-bash] Help With School Assignment, Learning Bash Scripts, nick, 2014/11/05
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Eduardo A . Bustamante López, 2014/11/05
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Eric Cook, 2014/11/05
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts,
Eduardo A . Bustamante López <=
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Greg Wooledge, 2014/11/06
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, nick, 2014/11/06
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Eduardo A . Bustamante López, 2014/11/06
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, nick, 2014/11/06
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Greg Wooledge, 2014/11/07
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Eric Blake, 2014/11/07
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Greg Wooledge, 2014/11/07
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, nick, 2014/11/07
- Message not available
- Message not available
- Message not available
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, Greg Wooledge, 2014/11/11
- Re: [Help-bash] Help With School Assignment, Learning Bash Scripts, nick, 2014/11/11