Portál AbcLinuxu, 10. května 2025 09:04
#!/bin/sh BINDIR=/usr/local/bin SYSDIR=/usr/local/lib/xe BIODIR=${SYSDIR}/bios if [ `whoami` == root ]; then # must be logged as root for i in $SYSDIR $BIODIR; do if [ ! -d $i ]; then # if dir does not exist, create mkdir $i >& /dev/null if [ $? != 0 ]; then echo unable to create $i exit fi fi done cp -rf xe modules rc manual.html $SYSDIR >& /dev/null # Copy files if [ $? != 0 ]; then echo unable copy files to $SYSDIR exit fi ln -sf $SYSDIR/xe $BINDIR/xe # link binary to bin path if [ $? != 0 ]; then echo unable to link $BINDIR/xe exit fi echo xe successfully installed # done else echo Must be logged on as root. fiI přesto, že sem přihlášenej jako root, tak mi to hlásí že root nejsem
Řešení dotazu:
Porovnávání na rovnost u standardního příkazu test
(jehož synonymem je levá hranatá závorka) se provádí jedním rovnítkem. Operátor '==
' je specialita konstrukce '[[ ... ]]
' v bashi. Takže buď
#!/bin/sh ... if [ `whoami` = root ]; ...nebo
#!/bin/bash ... if [[ `whoami` == root ]]; ...
Osobně bych ale spíš číselně porovnával $UID
nebo `id -u`
na nulu.
Koukám, že je tam toho víc. Na řádku 11 máte další bashismus: přesměrování pomocí >&
v normálním Bourne shellu nefunguje (a i dokumentace bashe preferuje zápis &>
, aby se to nepletlo s připojením k deskriptoru).
Zápis
příkaz if [ $? != 0 ]; then
sice funguje, ale je zbytečně nepraktický - téhož dosáhnete pomocí
if ! příkaz; then
A pokud skript končí chybou, měl by vrátit nenulovou návratovou hodnotu, tj. např. 'exit 1
' místo 'exit
'.
Tečka tam asi nakonci nepatří co?
Jedinou tečku vidím na konci řádku 35 a ta určitě ničemu nevadí.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.