首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash脚本中使用switch语句来执行不同的操作?

如何在bash脚本中使用switch语句来执行不同的操作?
EN

Stack Overflow用户
提问于 2021-11-02 13:07:30
回答 1查看 87关注 0票数 0

我有这个脚本,目前正在启动一个工具的图形用户界面。我想在交换机中添加另一个功能,即在需要时杀死该工具。现在我有不同的脚本来做这件事。我想把零碎的东西整合起来。

目前,我的脚本如下所示:

代码语言:javascript
复制
#!/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

就像启动TARTS一样,我想在上面的switch case语句中添加、Killing TARTS、。举个例子,杀死我正在做的工具:

代码语言:javascript
复制
 echo "Killing Tart $i"
                        sshpass -p "tart123"  ssh -tt -o StrictHostKeyChecking=no tarts@10.171.0.10 <<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

请有人指点一下,如何使用相同的开关情况,在我的脚本中集成启动和杀死功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 15:23:04

你可以使用函数。您可以将ip地址放在一个数组中,使用相应的tart编号作为索引。如果需要验证1-5,也可以利用字符集。

这是我想你要讲的东西的大致轮廓。用法类似:tart-tool kill 1 3 2。我不完全理解你的目标,但也许它会给你一些想法。

代码语言:javascript
复制
#!/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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69811022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档