# Shell parameter definition

**URL:** <https://community.unix.com/t/shell-parameter-definition/309768>\
**Category:** Fedora\
**Created:** [May 7, 2012, 2:45pm UTC](https://community.unix.com/t/shell-parameter-definition/309768 "2012-05-07T14:45:19Z")\
**Posts on this page:** 8\
**Page:** 2

<div class="post-metadata">

**Author:** ![methyl](https://community.unix.com/letter_avatar/methyl/32/5_5575768a8748004e209b776fc1b2916d.png) [@methyl](https://community.unix.com/u/methyl)\
**Post date:** [May 10, 2012, 7:51am UTC](https://community.unix.com/t/shell-parameter-definition/309768/21 "2012-05-10T07:51:37Z")

</div>

Based on the very limited information and examples supplied by the O/P, I deduce that your two parameters are numbers between 0.1 and 0.9 inclusive.

We could treat each parameter as a string and test for all possible valid values.

```nohighlight
ABCDJ="$1"
GHIJJ="$2"
#
case "${ABCDJ}" in
        "0.1"|"0.2"|"0.3"|"0.4"|"0.5"|"0.6"|"0.7"|"0.8"|"0.9")
                : # Do nothing
                ;;
        *)
                echo -e "Option limit should be positive number and less than 1. Program aborts!"
                exit 1
                ;;
esac
#
case "${GHIJJ}" in
        "0.1"|"0.2"|"0.3"|"0.4"|"0.5"|"0.6"|"0.7"|"0.8"|"0.9")
                : # Do nothing
                ;;
        *)
                echo -e "Option limit should be positive number and less than 1. Program aborts!"
                exit 1
                ;;
esac
#
echo -e "Valid parameters supplied ${ABCDJ} ${GHIJJ}"

```

---

<div class="post-metadata">

**Author:** ![pankaj\_tarale](https://community.unix.com/letter_avatar/pankaj_tarale/32/5_5575768a8748004e209b776fc1b2916d.png) [@pankaj\_tarale](https://community.unix.com/u/pankaj_tarale)\
**Post date:** [May 10, 2012, 8:48am UTC](https://community.unix.com/t/shell-parameter-definition/309768/22 "2012-05-10T08:48:42Z")

</div>

For any other shell you can use the bc as below.

```nohighlight
ABCDJ=0.5 |bc
GHIJJ=0.75 |bc
if [[${ABCDJ} -le 0 || ${GHIJJ} -ge 1]]; then
echo hello
fi

```

-Pank's

---

<div class="post-metadata">

**Author:** ![jacobs.smith](https://community.unix.com/letter_avatar/jacobs.smith/32/5_5575768a8748004e209b776fc1b2916d.png) [@jacobs.smith](https://community.unix.com/u/jacobs.smith)\
**Post date:** [May 10, 2012, 3:03pm UTC](https://community.unix.com/t/shell-parameter-definition/309768/23 "2012-05-10T15:03:36Z")

</div>

> [@pankaj\_tarale](#):
>
> For any other shell you can use the bc as below.
> 
> ABCDJ=0.5 |bc  
> GHIJJ=0.75 |bc  
> if [[${ABCDJ} -le 0 || ${GHIJJ} -ge 1]]; then  
> echo hello  
> fi
> 
> -Pank's

Hey Pankaj,

Great man. Thanks. The program is running. Will keep you posted with the output.

Another question is, as above if the values are 0.5 and 0.75, piping it to bc will still keep the decimals or will it round it to the number before the decimal?

Thanks in advance.

---------- Post updated at 03:03 PM ---------- Previous update was at 09:19 AM ----------

I just hit with some errors

Saying cat and sed commands couldn't be found.

My header was #!/bin/sh

But now I changed it to #!/bin/bash, the program is running fine and I have to look into it.

---

<div class="post-metadata">

**Author:** ![Scrutinizer](https://community.unix.com/user_avatar/community.unix.com/scrutinizer/32/1216_2.png) [@Scrutinizer](https://community.unix.com/u/Scrutinizer)\
**Post date:** [May 10, 2012, 3:15pm UTC](https://community.unix.com/t/shell-parameter-definition/309768/24 "2012-05-10T15:15:31Z")

</div>

Hi, just use

```plaintext
#!/bin/ksh

```

on the first line and it should work. If not, type

```plaintext
which ksh

```

and it should tell you the path to ksh, if it is installed on your Fedora Linux system.

> [@jacobs.smith](#):
>
> Hello Scrutinizer, thanks for your solutions.
> 
> But, how do I switch to zsh or ksh to make my code work?
> 
> I tried making the #!/bin/bash to #!/bin/sh, and still no luck. :wall::wall::wall::wall::wall::wall::wall::wall::wall::wall:

---

<div class="post-metadata">

**Author:** ![methyl](https://community.unix.com/letter_avatar/methyl/32/5_5575768a8748004e209b776fc1b2916d.png) [@methyl](https://community.unix.com/u/methyl)\
**Post date:** [May 10, 2012, 3:51pm UTC](https://community.unix.com/t/shell-parameter-definition/309768/25 "2012-05-10T15:51:43Z")

</div>

@pankage\_tarale

> [@](#):
>
> ABCDJ=0.5 |bc  
> GHIJJ=0.75 |bc  
> if [[${ABCDJ} -le 0 || ${GHIJJ} -ge 1]]; then  
> echo hello  
> fi

Sorry, but this script does not work at all:

```plaintext
ABCDJ=0.5 |bc
GHIJJ=0.75 |bc
echo "1 Value of ABCDJ: ${ABCDJ}"
echo "2 Value of GHIJJ: ${GHIJJ}"
if [[${ABCDJ} -le 0 || ${GHIJJ} -ge 1]]; then
echo hello
fi
echo "3 Value of ABCDJ: ${ABCDJ}"
echo "4 Value of GHIJJ: ${GHIJJ}"

./scriptname
1 Value of ABCDJ: 
2 Value of GHIJJ: 
hello
3 Value of ABCDJ: 
4 Value of GHIJJ:

```

@jacobs.smith  
Please post the exact and precise (to the last decimal place) range of the parameter or parameters you are trying to validate. The Shell normally deals with integers ... but there is always another way. I think that my post is the only one which works so far. The awk and perl programmers have kept quiet so far ... perhaps because we are all having difficulty visualising your computer.  
Do you have any computer programming languages available on your computer - expecially any in which you have expertise?

---

<div class="post-metadata">

**Author:** ![jacobs.smith](https://community.unix.com/letter_avatar/jacobs.smith/32/5_5575768a8748004e209b776fc1b2916d.png) [@jacobs.smith](https://community.unix.com/u/jacobs.smith)\
**Post date:** [May 10, 2012, 4:09pm UTC](https://community.unix.com/t/shell-parameter-definition/309768/28 "2012-05-10T16:09:23Z")

</div>

> [@methyl](#):
>
> @pankage\_tarale
> 
> Sorry, but this script does not work at all:
> 
> ```plaintext
> ABCDJ=0.5 |bc
> GHIJJ=0.75 |bc
> echo "1 Value of ABCDJ: ${ABCDJ}"
> echo "2 Value of GHIJJ: ${GHIJJ}"
> if [[${ABCDJ} -le 0 || ${GHIJJ} -ge 1]]; then
> echo hello
> fi
> echo "3 Value of ABCDJ: ${ABCDJ}"
> echo "4 Value of GHIJJ: ${GHIJJ}"
> 
> ./scriptname
> 1 Value of ABCDJ: 
> 2 Value of GHIJJ: 
> hello
> 3 Value of ABCDJ: 
> 4 Value of GHIJJ:
> 
> ```
> 
> @jacobs.smith  
> Please post the exact and precise (to the last decimal place) range of the parameter or parameters you are trying to validate. The Shell normally deals with integers ... but there is always another way. I think that my post is the only one which works so far. The awk and perl programmers have kept quiet so far ... perhaps because we are all having difficulty visualising your computer.  
> Do you have any computer programming languages available on your computer - expecially any in which you have expertise?

Hey Methyl,

That was so nice of you in taking time to write a detailed message.

It is an already being used shell script (program.sh) on my GNU Linux server.

The program was developed by another person that accepted only whole numbers(1,2, 3, 4, .....) but not decimals.

I just added the " | bc " to my program and it works now.

Earlier before, the first line in my code used to be #!/bin/sh and it gave me some errors saying cat and sed commands couldn't be found.

But, now I changed it to #!/bin/bash and the program is running without my earlier "arithmetic errors". I will let this post know how my output or errors are headed to.

Thanks to all of you.

---

<div class="post-metadata">

**Author:** ![Scrutinizer](https://community.unix.com/user_avatar/community.unix.com/scrutinizer/32/1216_2.png) [@Scrutinizer](https://community.unix.com/u/Scrutinizer)\
**Post date:** [May 10, 2012, 4:20pm UTC](https://community.unix.com/t/shell-parameter-definition/309768/29 "2012-05-10T16:20:16Z")

</div>

Did you try changing to

```nohighlight
#!/bin/ksh

```

as well?

---

<div class="post-metadata">

**Author:** ![methyl](https://community.unix.com/letter_avatar/methyl/32/5_5575768a8748004e209b776fc1b2916d.png) [@methyl](https://community.unix.com/u/methyl)\
**Post date:** [May 10, 2012, 5:31pm UTC](https://community.unix.com/t/shell-parameter-definition/309768/33 "2012-05-10T17:31:02Z")

</div>

I think that this will be post #28 on what should be a 2-post question.  
@jacobs.smith  
Why can you not post the precise range and precision of the variables which you are trying to validate?

Hmm:

> [@](#):
>
> I just added the " | bc " to my program and it works now.

It doesn't.

[Previous page](https://community.unix.com/t/shell-parameter-definition/309768.md?page=1)
