Function doesn't work


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Function doesn't work
# 1  
Old 11-02-2012
Function doesn't work

Hello, and here's my problem:

I can't get my function to do what I want. When I call my function get_from_A_to_F I give it an argument $remainder. I want my function to substitute a number higher than 9 to a specific letter. If the argument is equal to 10 than it should change it to "A". However it still leaves it as a 10. What am I doing wrong here?
Code:
#!/bin/sh

get_from_A_to_F() 
{   
    case $1 in
        10)  $1="A"
        ;;
        11)  $1="B"
        ;;
        12)  $1="C"
        ;;
        13)  $1="D"
        ;;
        14)  $1="E"
        ;;
        15)  $1="F"    
        ;; 
        [0-9]) $1=$1
        ;;  
    esac
    echo $1
}

read number
string=""
index=`expr index $number "."`
if [ $index -eq 0 ]
then
    integer=$number
    fraction=0
else
    integer=`expr substr $number 1 $(expr $index - 1)`
    fraction=`expr "$number - $integer" | bc`
fi
result=$integer
while [ $result -ne 0 ] 
do
    remainder=`expr $result % 16`
    get_from_A_to_F $remainder
    result=`expr $result / 16`
    string=$remainder$string
    #echo $string
done

# 2  
Old 11-02-2012
Did you try enclosing function's argument in double quote ?

Code:
get_from_A_to_F "$remainder"

# 3  
Old 11-02-2012
Yes, still doesn't work, any other ideas

Let's say the number is 634. In that case the output of this script is:

634
test: 43: 10=A: not found
10
test: 43: 7=7: not found
7
test: 43: 2=2: not found
2

Last edited by linas; 11-02-2012 at 02:57 PM..
# 4  
Old 11-02-2012
Note : when you are inside your function, "$1" refers to the first argument passed to your function (and not the first argument given to your shell script).

Instead of your function, you could go with :

Code:
echo "ibase=10;obase=16;$remainder" | bc


Last edited by ctsgnb; 11-02-2012 at 03:07 PM..
# 5  
Old 11-02-2012
You can define remainder as a variable outside the function:-

Code:
typeset remainder

And use the variable directly instead of $1

Code:
case $remainder

I hope it helps.
# 6  
Old 11-02-2012
I tweaked your script a bit. Is this the output you're looking for:

Code:
./testme.sh
634
A
10
7
7
2
2

# 7  
Old 11-02-2012
You should by the way read more about handling variable locally or globally.
Read this link and pay attention to 6.5.1 section

Regarding your hex conversion:
Code:
$ remainder=634
$ echo "ibase=10;obase=16;$remainder" | bc
27A

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

-ne 0 doesn't work -le does

Hi, I am using korn shell. until ] do echo "\$# = " $# echo "$1" shift done To the above script, I passed 2 parameters and the program control doesn't enter inside "until" loop. If I change it to until ] then it does work. Why numeric comparison is not working with -ne and works... (3 Replies)
Discussion started by: ab_2010
3 Replies

2. Shell Programming and Scripting

How come this if statement doesn't work?

greetings, the following code isn't working as i expect it to. the first dbl brackets do but the second set gets ignored. ie: if i'm on t70c6n229 it echoes "Something" and i expect it not to. what am i missing? if " ]] || " ]]; then echo "Something" fi thanx! (9 Replies)
Discussion started by: crimso
9 Replies

3. UNIX for Dummies Questions & Answers

Why doesn't this work?

find . -name "05_scripts" -type d -exec mv -f {}/'*.aep\ Logs' {}/.LogFiles \; Returns this failure: mv: rename ./019_0120_WS_WH_gate_insideTEST/05_scripts/*.aep\ Logs to ./019_0120_WS_WH_gate_insideTEST/05_scripts/.LogFiles/*.aep\ Logs: No such file or directory I don't know why it's trying... (4 Replies)
Discussion started by: scribling
4 Replies

4. Shell Programming and Scripting

Why double quotation marks doesn't work in ksh function parameters passing?

I'm working on AIX 6, ksh shell. The parameters are some strings quotated by double quotation marks which from a file. They are quotated because there may be spaces in them. Example: "015607" "10" " " "A"I want to pass these parameters to a shell function by writing the following command: ... (4 Replies)
Discussion started by: Shimmey
4 Replies

5. Shell Programming and Scripting

echo doesn't work right

Hi,when I run my first shell script,I got something that doesn't work right. I wrote this code in the script. echo -e "Hello,World\a\n"But the screen print like this: -e Hello,World The "-e" wasn't supposed to be printed out. Can anyone help me out?:wall: Many thanks!:) (25 Replies)
Discussion started by: Demon
25 Replies

6. Shell Programming and Scripting

alias doesn't work

Hi I have put alias ll='ls -la' in .profile file but it doesn't work. On hand it works it looks like the .profile file is not beeing read. How to check whitch file is loaded? ,profile? .bash_profile? My system: SunOS mion 5.10 Generic Shell: /bin/pfksh Thanks (2 Replies)
Discussion started by: miojamo
2 Replies

7. Shell Programming and Scripting

for loop doesn't work

I have a script which uses below for loop: for (( i = 0 ; i <= 5; i++ )) do echo "Welcome $i times" done But when I run the script, it gives error message: Syntex Error : Bad for loop variable Can anyone guide to run it? Thanks in advance. (10 Replies)
Discussion started by: naw_deepak
10 Replies

8. UNIX for Dummies Questions & Answers

FTP doesn't work

Hi! I have 2 servers. The firts has vsftpd server with this configuration: # Example config file /etc/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all... (2 Replies)
Discussion started by: Torquemada
2 Replies

9. UNIX for Dummies Questions & Answers

Script doesn't work, but commands inside work

Howdie everyone... I have a shell script RemoveFiles.sh Inside this file, it only has two commands as below: rm -f ../../reportToday/temp/* rm -f ../../report/* My problem is that when i execute this script, nothing happened. Files remained unremoved. I don't see any error message as it... (2 Replies)
Discussion started by: cheongww
2 Replies

10. Shell Programming and Scripting

Why doesn't this work?

cat .servers | while read LINE; do ssh jason@$LINE $1 done exit 1 ./command.ksh "ls -l ~jason" Why does this ONLY iterate on the first server in the list? It's not doing the command on all the servers in the list, what am I missing? Thanks! JP (2 Replies)
Discussion started by: jpeery
2 Replies
Login or Register to Ask a Question