it-swarm-eu.dev

Jak ukončím skript v podmíněném příkazu?

Píšu bash skript, kde chci ukončit, pokud uživatel není root. Podmíněné funguje dobře, ale skript není ukončen.

[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)

Zkusil jsem použít && namísto ; ale ani nefungují.

52
Garrett Hall

Dalo by se to takto:

[[ $(id -u) -eq 0 ]] || { echo >&2 "Must be root to run script"; exit 1; }

(„obyčejný“ podmíněný výraz s aritmetickým binárním operátorem v prvním příkazu) nebo:

(( $(id -u) == 0 )) || { echo >&2 "Must be root to run script"; exit 1; }

(aritmetické hodnocení pro první test).

Všimněte si změny () -> {} - složené závorky ne vytvářejí subshell. (Vyhledávání man bash pro "subshell".)

53
Mat

Závorky kolem těchto příkazů vytvoří subshell . Váš subshell echos "Musí být root, aby se skript spouštěl" a pak řeknete subshell , aby ukončil (i když by to už bylo, protože už neexistovaly žádné další příkazy). Nejjednodušší způsob, jak to opravit, je pravděpodobně pouze použít if:

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi
21
Michael Mrozek

S bash:

[ $UID -ne 0 ] && echo "Must be root to run script" && exit 1
2
Cyrus

Zátěžky kolem || a && nejsou vyžadovány, protože se jedná o asociativní právo. Následující dva výrazy jsou rovnocenné:

expr1 || expr2 && expr3
expr1 || { expr2 && expr3 }

Tak && namísto ; by fungovalo dobře, protože echo se vrátí true.

[[ $(id -u) == 0 ]] || echo "Must be root to run script" && exit 1
1
ata

to by vám mohlo pomoci, v bash

[[email protected] ~]$ which bash
/bin/bash
[[email protected] ~]$ cat test1.sh
if [ `id -u` != 0 ]
then
echo "Must be root to run the script
 "
exit
fi
0
sandeep kazipeta