From eabee350a930e1fd3a829b255a17d3be5bb99e23 Mon Sep 17 00:00:00 2001
From: Manuel Thalmann <m@nuth.ch>
Date: Sat, 1 Apr 2023 01:48:43 +0200
Subject: [PATCH] Add a script for choosing a block device

---
 scripts/Scripts/choose-disk.sh | 53 ++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100755 scripts/Scripts/choose-disk.sh

diff --git a/scripts/Scripts/choose-disk.sh b/scripts/Scripts/choose-disk.sh
new file mode 100755
index 00000000..8bbc4aaf
--- /dev/null
+++ b/scripts/Scripts/choose-disk.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+function chooseDisk() {
+    local -n result="$1" 2>&1;
+    local message="$2";
+    local choice;
+    local disk;
+    local -a disks;
+    local i;
+    disks=();
+
+    while read disk
+    do
+        disks+=("$disk");
+    done < <(lsblk -do NAME,SIZE,TYPE);
+
+    diskCount="$(expr "${#disks[@]}" - 1)";
+    padding="${#diskCount}";
+
+    if [ "$diskCount" -gt 0 ]
+    then
+        while true
+        do
+            echo "$message";
+
+            for i in $(seq 0 "$(expr "$diskCount")")
+            do
+                local index;
+                if [ "$i" -eq 0 ]
+                then
+                    index="";
+                else
+                    index="$i:";
+                fi;
+
+                printf "%$(expr "${diskCount}" + 1)s ${disks[$i]}" "$index";
+                echo "";
+            done;
+
+            read -p "Your choice: " choice;
+
+            if [ "$choice" -ge 1 ] && [ "$choice" -le "$diskCount" ]
+            then
+                disk=(${disks[$choice]});
+                result="/dev/${disk[0]}";
+                return;
+            else
+                >&2 echo "The specified choice \"$choice\" is invalid!";
+            fi;
+        done;
+    else
+        >&2 echo "No valid disk found!";
+    fi;
+}