A dash to GOTO or a dash from GOTO, that is the question...


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting A dash to GOTO or a dash from GOTO, that is the question...
# 1  
Old 09-18-2019
A dash to GOTO or a dash from GOTO, that is the question...

Well, guys I saw a question about GOTO for Python.

So this gave me the inspiration to attempt a GOTO function for 'dash', (bash and ksh too).

Machine: MBP OSX 10.14.3, default bash terminal, calling '#!/usr/local/bin/dash'...

This is purely a fun project to see if it is possible in PURE shell scripting, and so it is...

I now consider myself competent at UNIX shell scripting...

Enjoy ripping it apart:

Code:
#!/usr/local/bin/dash
# goto_demo.sh

# goto ': some_label:'
goto()
{
    line_number=1
    start_line=1
    while IFS='' read -r line
    do
        if [ "${line}" = "${1}" ]
        then
            : > /tmp/goto.tmp
            start_line=${line_number}
        fi
        if [ ${line_number} -ge ${start_line} ]
        then
            echo "${line}" >> /tmp/goto.tmp
        fi
        line_number=$(( line_number + 1 ))
    done
    . /tmp/goto.tmp
} < ${0}

goto ': second:'
echo 'This will not be printed!'
: first:
echo '**************************************'
echo 'You are at first label!'
# cat /tmp/goto.tmp
echo '**************************************'
goto ': third:'
echo 'This will not be printed either!'
: second:
echo '**************************************'
echo 'You are at the second label!'
# cat /tmp/goto.tmp
echo '**************************************'
goto ': first:'
echo 'And finally, this will not be printed either!'
: third:
echo '**************************************'
echo 'You are at the third label!'
echo '######## cat /tmp/goto.tmp... ########'
cat /tmp/goto.tmp
echo '###### END cat /tmp/goto.tmp... ######'
echo '**************************************'
: end:
echo 'Exiting...'
echo '**************************************'
exit

Results using above:
Code:
Last login: Wed Sep 18 15:55:17 on ttys000
AMIGA:amiga~> cd Desktop/Code/Shell
AMIGA:amiga~/Desktop/Code/Shell> ./goto_demo.sh
**************************************
You are at the second label!
**************************************
**************************************
You are at first label!
**************************************
**************************************
You are at the third label!
######## cat /tmp/goto.tmp... ########
: third:
echo '**************************************'
echo 'You are at the third label!'
echo '######## cat /tmp/goto.tmp... ########'
cat /tmp/goto.tmp
echo '###### END cat /tmp/goto.tmp... ######'
echo '**************************************'
: end:
echo 'Exiting...'
echo '**************************************'
exit
###### END cat /tmp/goto.tmp... ######
**************************************
Exiting...
**************************************
AMIGA:amiga~/Desktop/Code/Shell> _

EDIT:
Tested on current Linux Mint 19, using the shebang #!/bin/sh and working as per the image.
A dash to GOTO or a dash from GOTO, that is the question...-goto_demopng

Last edited by wisecracker; 09-19-2019 at 10:42 AM..
These 2 Users Gave Thanks to wisecracker For This Post:
# 2  
Old 09-19-2019
Isn't line_number always equal to or greater than start_line?
It works because the output file is truncated at the right moment.

I would rather go for
Code:
goto()
{
    line_copy=
    while IFS='' read -r line
    do
        [ "$line" = "$1" ] && line_copy=1
        [ -n "$line_copy" ] && echo "$line"
    done < "$0" > /tmp/goto.tmp
    . /tmp/goto.tmp
}

Eventually swap the two lines in the loop, to omit the first line (then you do not need to prefix the lable with a nop).

Of course this is a hack. A function puts something on the "return" stack...
This User Gave Thanks to MadeInGermany For This Post:
# 3  
Old 09-19-2019
Quote:
Originally Posted by MadeInGermany
Isn't line_number always equal to or greater than start_line?
It works because the output file is truncated at the right moment.

I would rather go for
Code:
goto()
{
    line_copy=
    while IFS='' read -r line
    do
        [ "$line" = "$1" ] && line_copy=1
        [ -n "$line_copy" ] && echo "$line"
    done < "$0" > /tmp/goto.tmp
    . /tmp/goto.tmp
}

Eventually swap the two lines in the loop, to omit the first line (then you do not need to prefix the lable with a nop).

Of course this is a hack. A function puts something on the "return" stack...
I will replace my version with your function and give it a whirl.
I had in fact thought about using #some_label: as both methods would not create an error, something like command not found under normal running but I see your point.
And of course it's a hack, as I always quote "if there is a back door I will find it" and hacks by their nature are back doors....
# 4  
Old 09-19-2019
Hi MadeInGermany...
(Hopefully this does not attach to the previous post.)

Copied and pasted your segment into my original code and it works well.

Thanks...

Bazza...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Ubuntu

Use of goto keyword in kernel programming

I have found many source files in the kernel using goto keyword instead of just doing the actual thing. For example: if(blah) goto x; -- -- -- -- -- x: return blah-blah Is there any specific reason for writing the code like this? The first thought that came to my mind is minimizing... (0 Replies)
Discussion started by: BHASKAR JUPUDI
0 Replies

2. Shell Programming and Scripting

Alternative for goto

#!/bin/sh label: echo sql poll v=`sqlplus -s <<! HR/HR set pages 0 echo off feed off select distinct status from emp where id=5; ! ` echo $v; echo it comes here after false if then echo if condition true sqlplus -l scott/tiger <<EOF select * from department; EXIT (2 Replies)
Discussion started by: kumaar1986
2 Replies

3. Shell Programming and Scripting

Using A Goto Label?

Im trying to do something like this but I cant find any documentation. read X if then goto ThisLine fi OTHER CODE OTHER CODE Label: ThisLine echo "You entered 1" (5 Replies)
Discussion started by: Grizzly
5 Replies

4. Shell Programming and Scripting

remove dash

hi I am using ksh #A="abc-def" #typeset -u B="$A" #echo $B ABC-DEF how to remove the dash? i.e. ABCDEF? thank you (1 Reply)
Discussion started by: melanie_pfefer
1 Replies

5. Solaris

Goto last visted directory

Dear All, Can any one pls let me the command for how to goback to previous visited directory from the current working directory in SunOS ? In case of HP-UX; the same can be resolved through "cd -" command. Thanks in advance! Prasanth Babu. (6 Replies)
Discussion started by: prasanth_babu
6 Replies

6. UNIX for Dummies Questions & Answers

dash after ampersant

Hi! I'm new in these forums and more or less new with Unix. So... here is the question: does anyone know where is redirected the output of a command when you put >&- after it? Does it means any standard file descriptor? Thanks! (2 Replies)
Discussion started by: csecnarf
2 Replies

7. UNIX for Dummies Questions & Answers

Stuck after typing goto

uname -a returns: SMP Tue May 17 17:52:23 EDT 2005 i686 athlon i386 GNU/Linux I have many aliases beginning with "goto" so... if I type goto and then hit return (oops) A goto prompt pops up and I cant exit from it(I tried MANY key seqs) The only way to exit is to kill the term window... (2 Replies)
Discussion started by: rairey
2 Replies

8. Shell Programming and Scripting

goto statement

I have a test script for using goto statement but its not working. please help i tried both in linux and hp-ux it's not working please help #! /bin/ksh t=`ps -ef|grep ti.sh|grep -v grep` if ; then goto start else goto stop fi start: echo "start" stop: echo "stop" (5 Replies)
Discussion started by: Krrishv
5 Replies

9. Shell Programming and Scripting

Use of GOTO statement in scripts

Hey Guys.. I just want to know how to use Goto statement in shell scripts. I know the basic use of statement. Goto Label The above statement will search for some label which must be defined in the script itself as: label: I tried these combinations but I didn't work out for me and I'm... (7 Replies)
Discussion started by: vikasduhan
7 Replies

10. Shell Programming and Scripting

how to goto in ksh

Hi, I'm trying to use the goto in ksh but it does not appear to be a valid command. Is that only valid in csh? Anything similar in ksh that I can use? Appreciate any help you can provide. Thanks. geraldine (4 Replies)
Discussion started by: Geraldine
4 Replies
Login or Register to Ask a Question