Portál AbcLinuxu, 4. prosince 2025 12: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.
fi
I přesto, že sem přihlášenej jako root, tak mi to hlásí že root nejsem
, takže skript vůbec neproběhne a nahlásí to unexpected error na řádku 37. což je poslední řádek. Tečka tam asi nakonci nepatří co?
Ř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.