如何在 bash 脚本中使用 switch case 语句来执行不同的操作?
How can I use switch case statement in bash scripting to perform different operations?
我有这个脚本当前正在启动工具的图形用户界面。我想在 switch case 中添加另一个功能,即在需要时终止该工具。现在我有不同的脚本来做这件事。我要整合点点滴滴
目前,我的脚本如下所示:
#!/bin/bash
tart_array=()
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
就像Launching TARTS一样 我想在上面的switch case语句中添加Killing TARTS。
举个例子,杀死我正在做的工具:
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
有人可以指导我如何使用相同的 switch case 在我的脚本中集成启动和终止功能吗?
您可以使用函数。您可以将 ip 地址放在一个数组中,使用相应的 tart 编号作为索引。如果您需要验证 1-5,您还可以利用字符集。
以下是我认为您的意思的粗略概述。像这样使用:tart-tool kill 1 3 2
。我不完全理解你的目标,但也许它会给你一些想法。
#!/bin/bash
launch_tart () {
local tart=
local ip=${ip[tart]}
echo "launching tart $tart…"
sshpass tarts@$ip # etc
}
kill_tart () {
local tart=
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 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
我有这个脚本当前正在启动工具的图形用户界面。我想在 switch case 中添加另一个功能,即在需要时终止该工具。现在我有不同的脚本来做这件事。我要整合点点滴滴
目前,我的脚本如下所示:
#!/bin/bash
tart_array=()
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
就像Launching TARTS一样 我想在上面的switch case语句中添加Killing TARTS。 举个例子,杀死我正在做的工具:
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
有人可以指导我如何使用相同的 switch case 在我的脚本中集成启动和终止功能吗?
您可以使用函数。您可以将 ip 地址放在一个数组中,使用相应的 tart 编号作为索引。如果您需要验证 1-5,您还可以利用字符集。
以下是我认为您的意思的粗略概述。像这样使用:tart-tool kill 1 3 2
。我不完全理解你的目标,但也许它会给你一些想法。
#!/bin/bash
launch_tart () {
local tart=
local ip=${ip[tart]}
echo "launching tart $tart…"
sshpass tarts@$ip # etc
}
kill_tart () {
local tart=
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 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