Bash Scripting - Δουλέψτε έξυπνα με λίγο (δικό σας) κώδικα

Το bash είναι το πιο γνωστό shell που χρησιμοποιείται σε όλες τις διανομές Linux.

Ως shell ορίζουμε ένα σύνολο από εντολές οι οποίες μας επιτρέπουν να εκτελούμε βασικές ή και πολύπλοκες διεργασίες. Ένα απλό παράδειγμα είναι η αντιγραφή ενός αρχείου από ένα directory σε ένα άλλο.Το Bash είναι έναν εγχείρημα του GNU. Το όνομα του προέρχεται από τα αρχικά: Bourne-Again Shell. Το Bourneήταν ένα κέλυφος επί εποχής Unix την δεκαετία του 70, το Bash δημιουργήθηκε το 1987 από τον Brian Fox και στην συνέχεια εξελίχθηκε από τον Chet Ramey. Πλέον είναι αναπόσπαστο κομμάτι σχεδόν όλως των Unix-ειδών συστημάτων.

Το άρθρο αυτό δεν έχει σκοπό την εκμάθηση του προγραμματισμού σε bash. Εάν θέλετε να γνωρίσετε και να μάθετε για το bash μπορείτε να διαβάσετε τον οδηγό Γνωριμία με το κέλυφος Bash.

Σκοπός του παρόντος άρθρου είναι να σας δείξουμε κάποια παραδείγματα ώστε να κατανοήσετε την δύναμη του bash και να μπορέσετε να δημιουργήσετε απλά scripts που θα κάνουν ευκολότερη την ζωή σας με την χρήση της γραμμής εντολών.
.




Δημιουργία  bash script

Η δημιουργία ενός scripts είναι μια πάρα πολύ απλή υπόθεση. Με τον αγαπημένο σας κειμενογράφο (nano, gedit, kwrite κτλ) δημιουργείτε ένα νέο αρχείο, στο οποίο τοποθετείται αρχικά την παρακάτω γραμμή, έτσι ώστε να δηλώσετε πως πρόκειται για ένα bash scripts.

#!/bin/bash

Από εκεί και πέρα ακολουθεί ο κώδικας του προγράμματος. Η bash δεν είναι ακριβώς μια γλώσσα προγραμματισμού. Έτσι έννοιες όπως δήλωση μεταβλητών, compile κτλ, δεν σας απασχολήσουν. Το μόνο που κάνει ένα bash script είναι να τρέχει μία μία τις εντολές κελύφους που περιέχονται μέσα στο αρχείο.

Πάμε λοιπόν να δημιουργήσουμε ένα απλό σκριπτάκι το οποίο θα χρησιμοποιεί το σύστημα ειδοποιήσεων του συστήματός μας (δεν έχει σημασία ποιο γραφικό περιβάλλον χρησιμοποιούμε) για να μας εμφανίσει κάτι.

#!/bin/bash
echo Give me your name #εμφανίζει στην οθόνη το κείμενο
read x #διαβάζει κάτι από τον χρήστη και το αποθηκεύει στο x
notify-send "your name is" "$x"

To σύστημα ειδοποιήσεων στο Linux είναι το notify-send, που παίρνει μέχρι και 2 ορίσματα. Με τον ίδιο τρόπο μπορείτε να χρησιμοποιείσετε οποιοδήποτε άλλο πρόγραμμα που έχετε στον υπολογιστή σας.
πχ.
firefox $x
όπου x θα είναι ένα site που θα δίνει ο χρήστης.

Εγκατάσταση bash script

Αρχικά, πριν εγκαταστήσουμε το script μας πρέπει να το δούμε να δουλεύει. Αυτό το κάνουμε δίνοντας
bash name
, όπου name το όνομά του, στο τερματικό (ενώ είμαστε στον φάκελο που είναι και το αρχείο φυσικά).

Για να το εγκαταστήσουμε τώρα πρέπει να δημιουργήσουμε έναν φάκελο με το όνομα bin στον αρχικό μας κατάλογο. Μέσα σε αυτόν τον φάκελο πρέπει να υπάρχει το αρχείο με τον κώδικα.
Αφού λοιπόν μετακινήσουμε το αρχείο εκεί πρέπει να το κάνουμε εκτελέσιμο. Αυτό γίνεται με την εντολή
chmod +x name
Πατώντας ls στο τερματικό, θα δούμε ότι το όνομα του αρχείου μας έχει αλλάξει χρώμα (γίνεται πράσινο συνήθως), που σημαίνει πως όλα έγιναν σωστά.
Πλέον αρκεί να δώσουμε μόνο το όνομα του προγράμματός μας σε οποιονδήποτε κατάλογο και αν βρισκόμαστε ώστε να τρέξει!!

Κάτι πιο χρήσιμο;


Φυσικά, το σκριπτάκι που δημιουργήσαμε δεν έχει καμία πρακτική  χρησιμότητα. Πάμε να δούμε λοιπόν κάτι πιο χρήσιμο.

Στα αποθετήρια της διανομής μας υπάρχει μια εφαρμογή η οποία λέγεται ffmpeg. Η εφαρμογή αυτή μεταξύ άλλων κάνει μετατροπές μορφών πολυμεσικών αρχείων. Έτσι για να μετατρέψουμε ένα βίντεο σε mp3 για παράδειγμα αρκεί να δώσουμε:
ffmpeg -i "onoma.mp4" "onoma.mp3"
με την προϋπόθεση ότι βρισκόμαστε στον ίδιο φάκελο με το βίντεο.

Επειδή η απευθείας χρήση της εντολής αυτής είναι χρονοβόρα, μπορούμε να φτιάξουμε ένα σκριπτάκι το οποίο θα αυτοματοποιεί την διαδικασία.
Ο σκοπός μας θα είναι το σκριπτάκι αυτό να ξεκινά αν δώσουμε την λέξη mp3  από οποιοδήποτε σημείο του τερματικού (πράγμα που σημαίνει ότι θα πρέπει να το έχουμε εγκαταστήσει όπως δείξαμε πριν). Εμείς το μόνο που θα χρειάζεται να δίνουμε θα είναι τα αρχικά γράμματα του βίντεο. Το πρόγραμμά μας θα αναλαμβάνει όλα τα υπόλοιπα.
Υποθέτουμε πως τα αρχεία βίντεο πηγαίνουν στον φάκελλο Downloads.

Ακολουθεί ο κώδικας:


#!/bin/bash

name=$(whoami)
cd /home/$name/Downloads
echo "Give starting letters of mp4 file"
read start
if [ $(ls "$start"* | wc -l) = 1 ]; then
ls "$start"*
ls "$start"* > .tmp
return=$(<.tmp)
ffmpeg -i "$return" "$return.mp3"
clear
echo "Done"
rm .tmp
else
echo Wrong Entrance
echo Try to specify your search
echo or chech if there is mote than one file with almost same name
fi
_________

name=$(whoami)
Με την εντολή αυτή αποθηκεύουμε στην μεταβλητή name το αποτέλεσμα της εντολή whoami που είναι το όνομα χρήστη μας.
cd /home/$name/Downloads
Μεταφορά στον φάκελο Downloads


echo "Give starting letters of mp4 file"
read start

Εμφάνιση μηνύματος και διάβασμα αρχικών γραμμάτων από τον χρήστη

if [ $(ls "$start"* | wc -l) = 1 ]; then
Η συνθήκη αυτή ελέγχει αν υπάρχει μόνο ένα αρχείο που να αρχίζει με αυτό που έδωσε ο χρήστης (στον φάκελο Downloads προφανώς).

ls "$start"*
ls "$start"* > .tmp
return=$(<.tmp)

Αν όντως υπάρχει μόνο ένα το πρόγραμμα εμφανίζει το όνομα του βίντεο και το μεταφέρει  (με ανακατεύθυνση) στο αρχείο .tpm (το οποίο δημιουργείται αυτόματα αν δεν υπάρχει). Έπειτα το περιεχόμενο του αρχείου αποθηκεύεται στην μεταβλητή return. Πρόκειται για το ολοκληρωμένο όνομα του βίντεο.

ffmpeg -i "$return" "$return.mp3"
Αφού έχουμε το ολοκληρωμένο όνομα του βίντεο εκτελούμε την ffmpeg με την σύνταξη που δείξαμε πριν, έτσι ώστε το βίντεό μας να μετατραπεί σε mp3. 

clear
echo "Done"
rm .tmp
Τέλος «καθαρίζουμε» την οθόνη, εμφανίζουμε Done και διαγράφουμε το βοηθητικό αρχείο .tmp.
else
echo Wrong Entrance
echo Try to specify your search
echo or chech if there is mote than one file with almost same name
fi
Στην αντίθετη περίπτωση τώρα, όπου η ls μας βγάζει περισσότερα από ένα αποτελέσματα προφανώς υπάρχει πρόβλημα, καθώς το πρόγραμμά μας δεν μπορεί να καταλάβει ποιο από αυτά θέλουμε εμείς να μετατρέψουμε. Οπότε εμφανίζουμε το παραπάνω μήνυμα λάθους.


Αποθηκεύουμε το αρχείο με όνομα mp3 στον φάκελο bin του home folder ας, το κάνουμε εκτελέσιμο (chmod +x mp3)
και πλέον δίνοντας mp3 θα δουλέψει. 

Φυσικά μπορούμε να κάνουμε το πρόγραμμα αυτό πολύ περισσότερο extreme  (προσθέτοντάς του για παράδειγμα την δυνατότητα να κατεβάζει βίντεο από το youtube, χρησιμοποιώντας το youtube-dl).


Διαβάστε το δεύτερο μέρος του οδηγού!





Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Phet – εικονικά πειράματα ανοικτού κώδικα

Fedora Weekend [18-19 Οκτωβρίου]

Εγκατάσταση CUDA για GPU υποστήριξη στο Tensorflow