Portál AbcLinuxu, 27. dubna 2024 01:34


Dotaz: Co je špatně v tom skriptu?

robotics avatar 15.2.2011 16:57 robotics | skóre: 29 | blog: o_vsem_moznem
Co je špatně v tom skriptu?
Přečteno: 188×
Odpovědět | Admin
#!/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? :-D
Používejte Windows.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.2.2011 17:19 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Co je špatně v tom skriptu?
Odpovědět | | Sbalit | Link | Blokovat | Admin

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.

15.2.2011 17:30 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Co je špatně v tom skriptu?
Odpovědět | | Sbalit | Link | Blokovat | Admin

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í.

robotics avatar 15.2.2011 17:33 robotics | skóre: 29 | blog: o_vsem_moznem
Rozbalit Rozbalit vše Re: Co je špatně v tom skriptu?
Děkuji, není to můj skript ale stažený z internetu, potřeboval sem to kvůli instalaci :-).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.