Linux – BASH scripting tips en tricks
Hieronder een paar handige tips om leuke bash scripts te maken die bestanden etc. kunnen manipuleren.
Terminal scherm leegmaken (Printf)
Maak het scherm in de terminal leeg:
printf "\033c"
Tekst weergeven (ECHO)
Om vanuit BASH een regel weer te geven in de console, gebruik echo:
echo "Hallo Wereld"
Meerdere lijnen gebruiken (/n als newline)
echo -e "Hallo\nWereld!"
Ps. -e Enable interpretation of of backslash escapes
of met prinf:
printf "Hallo\nWereld!\n"
Regel toevoegen aan (het einde) van een bestand (BASH -C)
De regel i2c-dev toegevoegen aan het bestand /etc/modules:
sudo bash -c "echo 'i2c-dev' >> /etc/modules"
Regel in een bestand aanpassen (SED)
syntax: sudo sed -i -e ‘s/[TEKSTVAN]/[TEKSTNAAR]/g’ [BESTAND]
Hieronder een voorbeeld om abc aan te passen in xyz
sudo sed -i -e 's/abc/xyz/g' /etc/dhcp/dhcpd.conf
het werkt ook met langere strings etc, hieronder een voorbeeld om een regel als commentaar te zetten door er een hekje (#) voor te plaatsen:
sudo sed -i -e 's/option domain-name "example.org";/#option domain-name "example.org";/g' /etc/dhcp/dhcpd.conf
Regel weghalen (leeg maken), verwijder “country_code=US”
sudo sed -i -e 's/country_code=US//g' /etc/network/interfaces
Vreemde Karakters gebruiken met SED of ECHO
Wil je aanhalingstekens (“) of backslash (/) gebruiken in een SED commando, zet er een slash (\) voor
Vervangen DAEMON_CONF= in DAEMON_CONF=/etc/hostapd/hostapd.conf
sudo sed -i -e 's/DAEMON_CONF=/DAEMON_CONF=\/etc\/hostapd\/hostapd.conf/g' /etc/init.d/hostapd
Toevoegen van een regel met aanhalingstekens: option domain-name “local”;
sudo bash -c "echo ' option domain-name \"local\";' >> /etc/dhcp/dhcpd.conf"
Regel toevoegen voor laatste regel in een bestand (SED)
syntax: sudo sed -i -e ‘$i \[TEKST]\n’ [BESTAND]/
ps. $ betekend de laatste lijn, i betekend voor de huidige lijn, zodoende is $i invoegen voor de laatste lijn.
Hieronder een voorbeeld om /home/pi/setupgpio.sh toe te voegen in /etc/rc.local
sudo sed -i -e '$i \/home/pi/setupgpio.sh\n' /etc/rc.local
Gebruiker toevoegen om te SUDOen (BASH -C)
Gebruiker www-data toevoegen aan de “sudo’ers lijst” in het bestand /etc/sudoers:
www-data ALL=(ALL) NOPASSWD: ALL
Met het commando:
sudo bash -c "echo 'www-data ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers"
Bestanden downloaden en uitpakken (WGET + BASH)
Downloaden met wget:
-O = output file.
sudo w get http://website.nl/instellingen.zip -O instellingen.zip
ZIP uitpakken
- -o = overschrijf bestanden
- -d = folder
sudo unzip -o instellingen.zip -d /var/www/html
TGZ
tar zxvf bestand.tgz
GZ
gunzip file.gz of gzip -d file.gz
Nieuwe CRONJOB installeren
Voorbeeld bij opstarten en om de 5 minuten:
1 2 |
echo "@reboot sudo python /home/pi/it.py ip" >> tempcron echo "*/5 * * * * sudo python /home/pi/it.py" >> tempcron |
Installeer de nieuwe cron:
1 2 |
crontab tempcron rm tempcron |
Tijdzone instellen op Amsterdam
sudo cp /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime
Nederlandse talen genereren
Voeg regels toe om talen te genereren in “locale.gen”.
1 2 |
sudo bash -c "echo 'nl_NL.UTF-8 UTF-8' >> /etc/locale.gen" sudo bash -c "echo 'nl_NL ISO-8859-1' >> /etc/locale.gen" |
Genereer de nieuwe talen
sudo locale-gen
i2C activeren en laden
Activeren:
sudo bash -c "echo 'dtparam=i2c_arm=on' >> /boot/config.txt"
Laden:
sudo bash -c "echo 'i2c-dev' >> /etc/modules"
1-Wire activeren en laden
Activeren:
sudo bash -c "echo 'dtoverlay=w1-gpio' >> /boot/config.txt"
Laden:
1 2 |
sudo bash -c "echo 'w1-gpio pullup=1' >> /etc/modules" sudo bash -c "echo 'w1-therm' >> /etc/modules" |
RTC Gebruiken
Gebruik de RTC bij reboot.
1 2 |
sudo sed -i -e '$i \echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device\n' /etc/rc.local sudo sed -i -e '$i \sudo hwclock -s\n' /etc/rc.local |
Programmeer de RTC met de tijd (van internet):
sudo hwclock -w
Reset SPI bus
use the command lsmod
to get the name of your spi
module and simply remove it as follows (assuming spi_bcm2708
is module name),
1 2 |
rmmod spi_bcm2708 |
then reload it as follows,
1 2 |
modprobe spi_bcm2708 |
try with sudo
if doesn’t work.
1 2 |
pi@raspberrypi:~ $ sudo rmmod spi_bcm2835 pi@raspberrypi:~ $ sudo modprobe spi_bcm2835 |