Archiv štítku: bash

Python, bash – ověření zda skript běží pod sudem

Čas od času se hodí některé skripty pouštět pod rootem. Asi jeden z nejjednodušších způsobů je na začátek vašeho skriptu dát tento kód:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os

if os.geteuid() != 0:
    print "Skript musi byt spusten pod sudem!"
    exit()

Ověří se zda je skript spuštěn pod rootem a pokud ne, tak se skript sám ukončí.

Jestli máte raději Bash, tak tam se to udělá takto:

#!/bin/bash

if [ "$USER" != 'root' ]; then
    echo "Skript musi byt spusten pod sudem!"
    exit
fi

Bash – načtení externího zdroje

Zkoušeli jste někdy spouštět skript z jiného umístění než kde se skutečně nalézá? Jestli ano, tak jste si určitě všimli že pokud načítáte konfigurační soubor, musíte používat absolutní cestu.

Jenže co když skript chcete dát k dispozici někomu jinému, který se třeba v bashi vůbec nevyzná a musel by znovu nastavovat cesty.

Já jsem to vyřešil takto:

$(cd $(dirname $0) && pwd)

No a rovnou si to ukážeme na příkladu:

Soubor example.sh

#!/bin/bash
CONFIGFILE="$(cd $(dirname $0) && pwd)/config.ini"
if [ -f "$CONFIGFILE" ]
then
    # Nacteni configu
    source $CONFIGFILE
else
    echo "ERROR: Nemuzu nalezt "$CONFIGFILE""; exit
fi

Soubor config.ini

echo "Ahoj, ja jsem config.ini"

Tento příklad se vám bude hodit pokud skripty spouštíte třeba přes cron.

Bash – rozpoznání architektury OS

#!/bin/bash
case $(uname -m) in
x86_64)
    echo "ARCH=x86_64"
    wget http://domena.tld/balicek_amd64.deb
    echo
    echo Instaluji balicek
    echo
    sudo dpkg -i balicek_amd64.deb
    ;;
i*86)
    echo "ARCH=i*86"
    wget http://domena.tld/balicek_i386.deb
    echo
    echo Instaluji balicek
    echo
    sudo dpkg -i balicek_i386.deb
    ;;
*)
    echo "Error + popisek" # Error - Neznama architektura
    ;;
esac

Bash – vypsání uživatelů ve skupině

Včera jsem si potřeboval překontrolovat jaké uživatele jsem zařadil do určité skupiny. Strýček google mi nenabídl nějaké rychlé řešení a tak jsem si napsal vlastní skriptík.

#!/bin/bash

echo -ne "Zadejte jmeno skupiny: "; read group_name
if [ -z "$group_name" ]
then
    echo "Nic jste nezadali."
else
    var_group="$(cat /etc/group | grep ^$group_name: | awk 'BEGIN{FS=":"} {print $4}')"
    echo "Ve skupine "${group_name}" jsou tito uzivatete: ($var_group)";
fi