VirtulBox Manager
VirtulBoxをシェル(bash)から対話型で操作するためのスクリプトです。ヘッドレス(GUIなし)で起動したり終了することができます。SSH接続で利用することを想定しています。
実行環境:macOS(bash 5.0.17)、VirtualBox 6.0
実行画面
VirtualBoxにインストールしてあるOSとそのステータスの一覧を取得し表示します。起動と終了のみ操作することができます。SSH接続して使う場合に便利だと思います。
$ ./vbmanger.sh
================================
VirtualBox Manager
================================
1) fedora29 powered off
2) Arch powered off
3) Mint19 running
--------------------------------
*) Any other key to exit
================================
P<no>: Power on <OS-no>
S<no>: Shutdown <OS-no>
Input P<OS-no> | S<OS-no> : s3
Waiting for VM Mint19 to shutdown...
VirtualBox Managerのコード
筆者はmacOSで利用していますが、bashの基本的なコマンドをGNUコマンドに書き換えてます。もしかしたら、BSDのままでは動かないかも知れません。その時は修正してください。
#!/bin/bash
declare -r DISTRO=($(vboxmanage list vms | sed -n 's/.*"\(.*\)".*/\1/p' | sort -f))
fn_main() {
echo "================================"
echo " VirtualBox Manager "
echo "================================"
fn_show_os
echo "--------------------------------"
echo "*) Any other key to exit"
echo "================================"
echo "P<no>: Power on <OS-no>"
echo "S<no>: Shutdown <OS-no>"
read -p "Input P<OS-no> | S<OS-no> : " power
case $power in
[Pp]*)
fn_run_os
;;
[Ss]*)
fn_shutdown_os
;;
*)
;;
esac
}
fn_show_os() {
num=1
for i in ${DISTRO[@]}; do
echo -n "$((num++))" # or $(num) and line 26
echo -n ") $i "
echo "$(vboxmanage showvminfo $i | sed -n 's/State: *\(.*\) (.*/\1/p')"
done
}
fn_run_os() {
num=$(echo "$power" | sed 's/^.//')
for ((i=0; i<=${#distro[*]}; i++)); do
if [ "$i" = "$(($num - 1))" ]; then
vboxmanage startvm ${distro[$i]} --type headless &>/dev/null \
&& echo "Waiting for VM ${distro[$i]} to power on..." \
|| echo "${distro[$i]} is alerdy running."
exit
fi
done
echo "Selected OS was not found."
exit
}
fn_shutdown_os() {
num=$(echo "$power" | sed 's/^.//')
for ((i=0; i<=${#DISTRO[*]}; i++)); do
if [ "$i" = "$(($num - 1))" ]; then
vboxmanage controlvm ${DISTRO[$i]} acpipowerbutton &>/dev/null \
&& echo "Waiting for VM ${DISTRO[$i]} to shutdown..." \
|| echo "${DISTRO[$i]} is not running."
exit
fi
done
echo "Selected OS was not found."
exit
}
fn_main
# HASE Kazuaki <https://psipsina.jp>
更新情報
- 作成日:2020-07-03
- 作成日:2022-05-02