0

I have this script that is currently launching a tool's graphical user interface. I want to add another functionality in switch case which is to kill the tool if needed. Right now I have different scripts doing this. I want to integrate the bits and pieces.

Currently, the script I have looks like this:

#!/bin/bash

tart_array=($1)

ip=()
tarts=()

for i in ${tart_array[@]}; do
        echo "Tart #: $i"
        case "$i" in

                1)
                IP=10.171.0.10
                ;;
                2)
                IP=10.171.0.11
                ;;
                3)
                IP=10.171.0.12
                ;;
                4)
                IP=10.171.0.13
                ;;
                5)
                IP=10.171.0.14
                ;;
                *)
                echo "Invalid TARTS '$i'" >&2;
                exit
                ;;
        esac
        ip+=(${IP=[i]})
#       echo "$ip"
        tarts=(${tart_array[@]})
#       echo "$tarts"
        echo "    ----  Launching Tart $i  ----  "
                sshpass -p "tart123" ssh -Y -X -L 5900:$IP:5901 tarts@$IP <<EOF1
                  export DISPLAY=:1
                gnome-terminal -e "bash -c \"pwd; cd /home/tarts; pwd; ./launch_tarts.sh exec bash\""
                exit
EOF1
done

Just like Launching TARTS I want to add Killing TARTS in the above switch case statement. Just for example for killing the tool I am doing:

 echo "Killing Tart $i"
                        sshpass -p "tart123"  ssh -tt -o StrictHostKeyChecking=no [email protected] <<EOF
                        . ./tartsenvironfile.8.1.1.0
                        nohup yes | kill_tarts mcgdrv &
                        nohup yes | kill_tarts server &
                        pkill -f traf
                        pkill -f terminal-server
                        exit
EOF

Can some one please guide how can I integrate Launching and Killing functionality in my script using the same switch case?

1 Answer 1

2

You can use functions. You can put the ip addresses in an array, using the corresponding tart number as the index. You can also leverage character sets if you need to validate 1-5.

Here’s a rough outline for what I think you’re getting at. Use like: tart-tool kill 1 3 2. I don’t fully understand your goal, but maybe it will give you some ideas.

#!/bin/bash

launch_tart () {
    local tart=$1
    local ip=${ip[tart]}

    echo "launching tart $tart…"
    sshpass tarts@$ip # etc
}

kill_tart () {
    local tart=$1
    local ip=${ip[tart]}

    echo "killing tart $tart…"
    sshpass tarts@$ip # etc
}

ip[1]=10.171.0.10
ip[2]=10.171.0.11
# etc

case $1 in
    kill) function=kill_tart;;
    launch) function=launch_tart;;
    *) exit 1
esac

shift

for tart in "$@"; do
    [[ "$tart" == [1-5] ]] || { echo error >&2; exit 1; }

    $function $tart
done
Sign up to request clarification or add additional context in comments.

2 Comments

I am facing an issue when I run the script like ./tartstesting kill 1 2 3 5 8 10. I am only able to kill the first tarts and for the rest I get an error message. It is not reading the rest of the IPs.
Thanks a lot for the guidance. It is working perfectly fine for me.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.