私はこれがなぜ失敗するのか、一生はわかりません。だからここで誰かがこれについて明らかにできることを願っています。
#!/bin/sh
NAME=Container
if [ -d "/mnt/SSD/docker" ]; then
if [ ! -d "/mnt/SSD/docker/$NAME/data" ]; then
mkdir -p /mnt/SSD/docker/$NAME/data
fi
printf "\nPlease select installation method:\n\n"
while true; do
read -p "1. Re-create existing container
2. Create new container: " CHOICE
case $CHOICE in
1 )
if [ "$(docker ps -a | grep $NAME)" ]; then
IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $NAME)
MAC=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $NAME)
docker stop $NAME; docker rm $NAME; docker image rm repo/image
break;;
else
printf "\nNo existing container found, going back to menu!\n\n";;
fi
2 )
read -p 'Please enter the IP-address to use: ' IP
read -p 'Please enter the MAC-address to use: ' MAC
break;;
* )
printf "\nIncorrect or no selection made. Please enter 1 or 2.\n\n";;
esac
done
docker run -d \
-e JVM_HEAP=1024m -e TZ=Europe/Stockholm \
--hostname=$NAME \
--ip=$IP \
--mac-address=$MAC \
--name=$NAME --network=macvlan \
--restart=always \
-v /mnt/SSD/docker/$NAME/data:/$NAME/data \
-v /mnt/HDD/Storage:/mnt/HDD/Storage \
repo/image
else
logger "ZFS pool SSD is not mounted; aborting $0!"
fi
Binarystaの答えで構文エラーが発生しましたが、caseステートメントでブレークやシャットダウンが使用されなくなったため、スクリプトはこれ以上行う必要はありません。
Option 1. コンテナがある場合(break;;) Case 文の後に命令を実行しなければならず、コンテナがなければメニューに戻るか(;;) スクリプトを終了(exit;;)する。
;;;代わりにbreakを使用すると、何を選択してもコマンドは実行されますが、;;はメニューに戻り、そのコマンドは実行されません。
ベストアンサー1
case
文にいくつかの文法的エラーがあります。
#!/bin/sh
NAME=Container
if [ -d "/mnt/SSD/docker" ]; then
if [ ! -d "/mnt/SSD/docker/$NAME/data" ]; then
mkdir -p /mnt/SSD/docker/$NAME/data
fi
printf "\nPlease select installation method:\n\n"
while true; do
read -p "1. Re-create existing container
2. Create new container: " CHOICE
case $CHOICE in
1 )
if [ "$(docker ps -a | grep $NAME)" ]; then
IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $NAME)
MAC=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $NAME)
docker stop $NAME; docker rm $NAME; docker image rm repo/image
else
printf "\nNo existing container found, going back to menu!\n\n"
fi
;;
2 )
read -p 'Please enter the IP-address to use: ' IP
read -p 'Please enter the MAC-address to use: ' MAC
;;
* )
printf "\nIncorrect or no selection made. Please enter 1 or 2.\n\n"
;;
esac
done
docker run -d \
-e JVM_HEAP=1024m -e TZ=Europe/Stockholm \
--hostname=$NAME \
--ip=$IP \
--mac-address=$MAC \
--name=$NAME --network=macvlan \
--restart=always \
-v /mnt/SSD/docker/$NAME/data:/$NAME/data \
-v /mnt/HDD/Storage:/mnt/HDD/Storage \
repo/image
else
logger "ZFS pool SSD is not mounted; aborting $0!"
fi