Úkol :-)

Založil Zikáč, 27. 11. 2017, 23:14:10

Předchozí téma - Další téma

Zikáč

Ta kontrola statutu se hodila, moc díky. Jen mám teď problém - skript se má spustit automaticky a při jeho spuštění mám zadat jméno a domovský adresář nového uživatele. Měl jsem skript takto:

#!/bin/bash

user=$1
home_directory=$2

sudo adduser $user --home $home_directory


Pokud to nastavím a spustím, nic se nestane, pouze v logu napíše, že adduser potřebuje vstupní parametry. Zadání úkolu je takové, že skript nesmí být interaktivní. Když zadám do skriptu hodnoty přímo do příkazu adduser, uživatel se co 20 minut vytvoří.

Co s tím?

P.S.: Pokud skript výše napsaný spustím manuálně, zadám heslo sudo a terminál se zavře.

Petr Gajdůšek

#16
Musíš ten script přece volat s parametry, který očekává.
muj_skript.sh <uzivatel> <home>

Přidej ty parametry do ExecStart= své systemd unity, stejně jako bys script spouštěl z příkazové řádky.

Jinak ten script má celkem dost problémů:

Volání adduser bys měl ošetřit pro libovolné (i nevalidní) hodnoty parametrů, např. obsahující mezery nebo začínající pomlčkou:
/usr/sbin/adduser --home="$home_directory" -- "$user"

Pokud má být script neinteraktivní, nemá v něm co dělat volání interaktivního sudo. Můžeš explicitně kontrolovat ještě před voláním adduser, zda je skript spuštěn pod rootem, jinak skončit chybou; místo toho abys nechal na nedostatek práv selhat až volání adduser.
if [[ $(whoami) != root ]]; then echo "You must run this script as root" >&2; exit 1; fi

Volat adduser jenom tehdy, pokud uživatel neexistuje, aby ses vyhnul neustálému selhávání a logování chyby. Ke zjištění, zda uživatel existuje se dá použít návratový kód příkazu getent passwd
if ! getent passwd -- "$user" >/dev/null; then ... fi

Mohl bys lépe parsovat parametry scriptu a případně vypisovat help.
http://wiki.bash-hackers.org/scripting/posparams

Hodně zdaru!