Ombyggnad 2026/2027 pågår - döda länkar förekommer. Mer information

Fråga efter bekräftelse på åtgärd i POSIX skalskript

2026-05-26 på Anders Ytterströms webblogg

#!/bin/bash i all ära, men vad om #!/bin/sh - den minsta gemensamma nämnaren för POSIX-compliance?

Detta inlägg visar hur ett skript tar emot hemlig inmatning och sparar i en variabel (t ex lösenord, tokens) med maximal portabilitet.

Skriptkod

Nedan visar exempel på att bekräfta en önskad åtgärd. Vid tryck på Enter sparas den inmatade texten i variabeln ans. För att få till felhantering behövs en loop som inte låter användaren fortsätta förrän ett giltigt värde matats in.

Exempel 1 - Bekräftelse med default, ingen felhantering:

#!/bin/sh
printf "Är du säker? [y/N] "
read -r i
case "$i" in
[yY])
        ans="y"
        ;;
""|[nN])
        ans="n"
        ;;
esac
printf "Du svarade: %s\n" "$ans"

Exempel 2 - Bekräftelse med default, med felhantering:

#!/bin/sh
while [ -z "$ans" ]; do
        printf "Är du säker? [y/N] "
        read -r i
        case "$i" in
        [yY])
                ans="y"
                break
                ;;
        ""|[nN])
                ans="n"
                break
                ;;
        *)
                printf "Felaktigt svar! Ange \"y\" eller \"n\".\n"
                ;;
        esac
done;
printf "Du svarade: %s\n" "$ans"

Exempel 3 - Bekräftelse utan default, med felhantering:

#!/bin/sh
while [ -z "$ans" ]; do
        printf "Är du säker? [y/n] "
        read -r i
        case "$i" in
        [yY])
                ans="y"
                break
                ;;
        [nN])
                ans="n"
                break
                ;;
        *)
                printf "Felaktigt svar! Ange \"y\" eller \"n\".\n"
                ;;
        esac
done;
printf "Du svarade: %s\n" "$ans"

Verifiera: är detta POSIX-kompatibelt?

Detta kontrolleras enklast med programmet shellcheck.

shellcheck -s sh confirmation.sh

Detta är ett inlägg i en serie om att skripta Unixliknande system med maximal portabilitet. Förgående inlägg i serien: Inmatning av data i POSIX skalskript.


Ovanstående inlägg publicerades 2026-05-26. Det går att prenumerera på denna webblogg. Härifrån är följande mål rekommenderade: