Οδηγός για αρχάριους στο BASH - Συνθήκες και μεταβλητές

Εισαγωγή

Καλώς ήλθατε στο τρίτο μέρος του "Οδηγός για αρχάριους του BASH". Εάν έχετε χάσει τα προηγούμενα δύο άρθρα, τότε πιθανότατα θα θέλετε να μάθετε τι κάνει αυτό τον οδηγό διαφορετικό από άλλους οδηγούς scripting BASH.

Αυτός ο οδηγός γράφεται από έναν πλήρη αρχάριο στην BASH και ως αναγνώστη που μαθαίνετε καθώς μαθαίνω. Ενώ είμαι αρχάριος στην BASH έρχομαι από ένα φόντο ανάπτυξης λογισμικού, αν και τα περισσότερα από τα πράγματα που έχω γράψει ήταν για την πλατφόρμα των Windows.

Μπορείτε να δείτε τους δύο πρώτους οδηγούς με την επίσκεψη:

Εάν είστε νέοι στη συγγραφή του BASH, προτείνω να διαβάσετε τους πρώτους δύο οδηγούς πριν συνεχίσετε με αυτό.

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

Εγκαταστήστε rsstail

Για να ακολουθήσετε αυτόν τον οδηγό θα χρειαστεί να εγκαταστήσετε μια εφαρμογή γραμμής εντολών που ονομάζεται rsstail η οποία χρησιμοποιείται για την ανάγνωση τροφοδοσιών RSS .

Εάν χρησιμοποιείτε έναν τύπο διανομής με βάση το Debian / Ubuntu / Mint, ακολουθήστε τα εξής:

sudo apt-get να εγκαταστήσετε το rsstail

Για το Fedora / CentOS κλπ πληκτρολογήστε τα εξής:

yum install rsstail

Για τύπο openSUSE :

zypper install rsstail

Η δήλωση IF

Ανοίξτε ένα τερματικό και δημιουργήστε ένα αρχείο που ονομάζεται rssget.sh πληκτρολογώντας τα εξής:

sudo nano rssget.sh

Στο πλαίσιο του προγράμματος επεξεργασίας nano πληκτρολογήστε το ακόλουθο κείμενο:

#! / bin / bash
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;

Αποθηκεύστε το αρχείο πιέζοντας τα πλήκτρα CTRL και O και, στη συνέχεια, κλείστε πιέζοντας CTRL και X.

Εκτελέστε το σενάριο πληκτρολογώντας τα εξής:

sh rssget.sh

Το σενάριο θα επιστρέψει μια λίστα τίτλων από τη ροή RSS του linux.about.com.

Δεν είναι ένα υπερβολικά χρήσιμο σενάριο επειδή απλά ανακτά τους τίτλους από μια ροή RSS αλλά εξοικονομεί την ανάγκη να θυμάται κανείς τη διαδρομή προς τη ροή RSS του Linux.about.com.

Ανοίξτε ξανά το script rssget.sh στο nano και επεξεργαστείτε το αρχείο ώστε να φαίνεται ως εξής:

#! / bin / bash

αν [$ 1 = "verbose"]
έπειτα
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Εκτελέστε ξανά το σενάριο πληκτρολογώντας τα εξής:

sh rssget.sh verbose

Αυτή τη φορά η ροή RSS επιστρέφει με τον τίτλο, τον σύνδεσμο και την περιγραφή.

Ας αναλύσουμε το σενάριο με λίγη λεπτομέρεια:

Το #! / Bin / bash εμφανίζεται σε κάθε σενάριο που γράφουμε. Η επόμενη γραμμή βασικά εξετάζει την πρώτη παράμετρο εισόδου που παρέχεται από το χρήστη και τη συγκρίνει με τη λέξη "verbose". Εάν η παράμετρος εισαγωγής και η λέξη "verbose" ταιριάζουν με τις γραμμές μεταξύ τότε και fi run.

Το παραπάνω σενάριο είναι προφανώς εσφαλμένο. Τι συμβαίνει εάν δεν παρέχετε καθόλου παραμέτρους εισόδου; Η απάντηση είναι ότι έχετε ένα σφάλμα κατά μήκος των γραμμών του απροσδόκητου φορέα εκμετάλλευσης.

Το άλλο σημαντικό μειονέκτημα είναι ότι εάν δεν δώσετε τη λέξη "verbose" τότε δεν συμβαίνει τίποτα. Στην ιδανική περίπτωση, εάν δεν παρέχετε τη λέξη verbose, το σενάριο θα επιστρέψει μια λίστα τίτλων.

Χρησιμοποιήστε ξανά το nano για να επεξεργαστείτε το αρχείο rssget.sh και να τροποποιήσετε τον κώδικα ως εξής:

#! / bin / bash

αν [$ 1 = "verbose"]
έπειτα
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Αποθηκεύστε το αρχείο και εκτελέστε το πληκτρολογώντας τα εξής:

sh rssget.sh verbose

Θα εμφανιστεί μια λίστα με τίτλους, περιγραφές και συνδέσμους. Τώρα εκτελέστε ξανά ως εξής:

sh rssget.sh τίτλοι

Αυτή τη φορά εμφανίζεται μόνο ένας κατάλογος τίτλων.

Το επιπλέον μέρος του σεναρίου είναι στη γραμμή 4 και εισάγει τη δήλωση else . Βασικά το σενάριο λέει τώρα, αν η πρώτη παράμετρος είναι η λέξη "verbose" πάρτε την περιγραφή, τους συνδέσμους και τους τίτλους για την τροφοδοσία RSS, αλλά αν η πρώτη παράμετρος είναι οτιδήποτε άλλο πάρει απλά μια λίστα τίτλων.

Το σενάριο βελτιώθηκε ελαφρώς, αλλά εξακολουθεί να είναι ελαττωματικό. Εάν αποτύχετε να εισαγάγετε μια παράμετρο, θα λάβετε ένα σφάλμα. Ακόμα κι αν παράσχετε μια παράμετρο, απλώς λέγοντας ότι δεν θέλετε περιληπτικά δεν σημαίνει ότι θέλετε τίτλους μόνο. Μπορεί να έχετε γράψει ακριβώς verbose λάθος για παράδειγμα ή μπορεί να έχετε πληκτρολογήσει περιστέρια που είναι βέβαια χωρίς νόημα.

Πριν προσπαθήσουμε να ξεκαθαρίσουμε αυτά τα θέματα, θέλω να σας δείξω μια ακόμη εντολή που συνοδεύει τη δήλωση IF.

Επεξεργαστείτε τη δέσμη ενεργειών rssget.sh για να δείτε τα εξής:

#! / bin / bash

αν [$ 1 = "all"]
έπειτα
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "περιγραφή"]
έπειτα
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml.

αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Αποφάσισα να ξεφορτωθώ τη λέξη verbose και να την αντικαταστήσω με όλους. Αυτό δεν είναι το σημαντικό κομμάτι. Το σενάριο παραπάνω εισάγει elif που είναι ένας σύντομος τρόπος να λέτε ELSE IF.

Τώρα το σενάριο λειτουργεί ως εξής. Εάν τρέχετε sh rssget.sh όλα τότε θα έχετε περιγραφές, συνδέσμους και τίτλους. Εάν αντ 'αυτού απλώς τρέχετε sh shssget.sh περιγραφή θα πάρετε μόνο τίτλους και περιγραφές. Εάν παρέχετε οποιαδήποτε άλλη λέξη, θα πάρετε μια λίστα τίτλων.

Αυτό εισάγει έναν τρόπο να καταλήξουμε γρήγορα σε μια λίστα από δηλώσεις υπό όρους. Ένας εναλλακτικός τρόπος για να κάνετε το ELIF είναι να χρησιμοποιήσετε τα γνωστά ως ένθετα IF statements.

Το παρακάτω είναι ένα παράδειγμα που δείχνει πώς λειτουργούν οι ένθετες εντολές IF:

#! / bin / bash

αν [$ 2 = "aboutdotcom"]
έπειτα
αν [$ 1 = "all"]
έπειτα
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "περιγραφή"]
έπειτα
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml.

αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
αλλού
αν [$ 1 = "all"]
έπειτα
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "περιγραφή"]
έπειτα
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Μη διστάσετε να πληκτρολογήσετε όλα αυτά αν θέλετε ή να τα αντιγράψετε και να τα επικολλήσετε στο αρχείο rssget.sh.

Η παραπάνω δέσμη ενεργειών εισάγει μια δεύτερη παράμετρο που σας επιτρέπει να επιλέξετε είτε "about.com" είτε "lxer.com" ένα RSS feed.

Για να το εκτελέσετε πληκτρολογείτε τα εξής:

sh rssget.sh όλα σχετικά με το dotcom

ή

sh rssget.sh όλα τα lxer

Μπορείτε φυσικά να αντικαταστήσετε όλα με περιγραφές ή τίτλους για να δώσετε μόνο περιγραφές ή μόνο τίτλους.

Βασικά ο παραπάνω κώδικας λέει εάν η δεύτερη παράμετρος είναι aboutdotcom τότε εξετάστε τη δεύτερη εντολή if, η οποία είναι η ίδια από την προηγούμενη δέσμη, αν η δεύτερη παράμετρος είναι lxer, τότε κοιτάξτε ξανά την εσωτερική εντολή if για να αποφασίσετε αν θα εμφανιστούν τίτλοι, περιγραφές ή οτιδήποτε άλλο.

Αυτό το σενάριο παρέχεται καθαρά ως παράδειγμα μιας ένθετης εντολής IF και υπάρχουν τόσα πολλά πράγματα στραβά με το σενάριο αυτό θα χρειαζόταν ένα άλλο άρθρο για να τα εξηγήσει όλα. Το κύριο ζήτημα είναι ότι δεν είναι επεκτάσιμο.

Φανταστείτε ότι ήθελε να προσθέσετε μια άλλη τροφοδοσία RSS όπως καθημερινός χρήστης Linux ή Linux σήμερα; Το σενάριο θα γίνει τεράστιο και αν αποφασίσατε ότι θέλετε να αλλάξει η εσωτερική δήλωση IF θα πρέπει να το αλλάξετε σε πολλά σημεία.

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

Ας εξετάσουμε τώρα τον καθορισμό του θέματος των ατόμων που εισάγουν παραμέτρους duff. Για παράδειγμα, στην παραπάνω δέσμη ενεργειών, εάν ο χρήστης εισάγει κάτι διαφορετικό από το "aboutdotcom" ως 2η παράμετρο, τότε εμφανίζεται μια λίστα άρθρων από τη ροή RSS από το LXER ανεξάρτητα από το αν ο χρήστης εισάγει lxer ή όχι.

Επιπλέον, αν ο χρήστης δεν εισάγει "όλα" ή "περιγραφή" ως την 1η παράμετρο, τότε η προεπιλογή είναι μια λίστα τίτλων που μπορεί ή όχι να είναι ο σκοπός του χρήστη.

Ελέγξτε την ακόλουθη δέσμη ενεργειών (ή αντιγράψτε και επικολλήστε την στο αρχείο rssget.sh.

#! / bin / bash

αν [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
έπειτα
αν [$ 1 = "all"] || [$ 1 = "περιγραφή"] || [$ 1 = "τίτλος"]
έπειτα
αν [$ 2 = "aboutdotcom"]
έπειτα

αν [$ 1 = "all"]
έπειτα
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "περιγραφή"]
έπειτα
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml.

αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
αλλού
αν [$ 1 = "all"]
έπειτα
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "περιγραφή"]
έπειτα
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

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

Το bit που είναι σημαντικό σε αυτό το σενάριο είναι η εντολή IF || δήλωση σχετικά με τη γραμμή 2 και τη γραμμή 4.

Το || σημαίνει OR. Έτσι, η γραμμή αν [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] ελέγχει αν η 2η παράμετρος είναι ίση με "aboutdotcom" ή "lxer". Αν δεν είναι τότε η δήλωση IF είναι πλήρης επειδή δεν υπάρχει άλλη δήλωση για την εξωτερική IF.

Ομοίως στη γραμμή 4 η γραμμή αν [$ 1 = "all"] || [$ 1 = "περιγραφή"] || [$ 1 = "title"] ελέγχει εάν η 1η παράμετρος είναι ίση είτε με "όλα" είτε "περιγραφή" ή "τίτλο".

Τώρα, αν ο χρήστης τρέξει sh rssget.sh το τυρί πατάτας δεν επιστρέφει τίποτα, ενώ προτού να λάβει μια λίστα τίτλων από την LXER.

Το αντίθετο του || είναι &&. Ο && χειριστής σημαίνει AND.

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

#! / bin / bash

εάν [$ # -eq 2]
έπειτα

αν [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
έπειτα
αν [$ 1 = "all"] || [$ 1 = "περιγραφή"] || [$ 1 = "τίτλος"]
έπειτα
αν [$ 2 = "aboutdotcom"]
έπειτα

αν [$ 1 = "all"]
έπειτα
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "περιγραφή"]
έπειτα
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml.

αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
αλλού
αν [$ 1 = "all"]
έπειτα
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "περιγραφή"]
έπειτα
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
αλλού
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Το μόνο bit που είναι επιπλέον σε αυτό το σενάριο είναι μια άλλη εξωτερική εντολή IF ως εξής: αν [$ # -eq 2] . Εάν διαβάσετε το άρθρο σχετικά με τις παραμέτρους εισαγωγής θα γνωρίζετε ότι το $ # επιστρέφει έναν αριθμό του αριθμού παραμέτρων εισόδου. Το -eq σημαίνει ίσους. Επομένως, η δήλωση IF ελέγχει ότι ο χρήστης εισήγαγε 2 παραμέτρους και αν δεν έβγαινε απλά χωρίς να κάνει τίποτα. (Δεν είναι ιδιαίτερα φιλικό).

Γνωρίζω ότι αυτό το σεμινάριο γίνεται αρκετά μεγάλο. Δεν υπάρχει πολύ περισσότερο να καλύψω αυτήν την εβδομάδα, αλλά θέλω να βοηθήσω να τακτοποιήσω το σενάριο πριν τελειώσουμε.

Η τελευταία εντολή που πρέπει να μάθετε για τις δηλώσεις υπό όρους είναι η δήλωση CASE.

#! / bin / bash


εάν [$ # -eq 2]
έπειτα
περίπτωση $ 2 το
aboutdotcom)
περίπτωση $ 1 το
όλα)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
· ·
περιγραφή)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
· ·
τίτλος)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
· ·
esac
· ·
lxer)
περίπτωση $ 1 το
όλα)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
· ·
περιγραφή)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
· ·
τίτλος)
rsstail -u http://lxer.com/module/newswire/headlines.rss
· ·
esac
· ·
esac
fi

Η δήλωση περίπτωσης είναι ένας καλύτερος τρόπος για να γράψετε ΕΑΝ ΑΛΛΑ ΟΤΙ ΑΛΛΑ ΟΤΙ ΕΝΑΝΤΙ ΕΧΕΙ.

Για παράδειγμα αυτή η λογική

IF φρούτα = μπανάνες
Τότε αυτό
ELSE IF fruit = πορτοκάλια
Τότε αυτό
ELSE IF φρούτα = σταφύλια
Τότε αυτό
ΤΕΛΟΣ ΕΑΝ

μπορεί να ξαναγραφεί ως εξής:

φρούτα περίπτωση σε
μπανάνες)
Κάνε αυτό
· ·
πορτοκάλια)
Κάνε αυτό
· ·
σταφύλια)
Κάνε αυτό
· ·
esac

Βασικά το πρώτο στοιχείο μετά την υπόθεση είναι το πράγμα που πρόκειται να συγκρίνετε (δηλαδή φρούτα). Στη συνέχεια, κάθε στοιχείο πριν τις αγκύλες είναι το πράγμα που συγκρίνετε και αν ταιριάζει με τις γραμμές που προηγούνται ;; θα έτρεξε. Μια δήλωση υποθέσεως τερματίζεται με το αντίστροφο esac (το οποίο συμβαίνει προς τα πίσω).

Στο script rssget.sh, η δήλωση της υπόθεσης αφαιρεί μερικά από αυτά τα φοβερά φωλιά, αν και δεν την βελτιώνουν αρκετά.

Για να βελτιώσω πραγματικά το σενάριο πρέπει να σας παρουσιάσω μεταβλητές.

Κοιτάξτε τον ακόλουθο κώδικα:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
display = ""
url = ""

αν [$ # -lt 2] || [$ # -gt 2]
έπειτα
echo "χρήση: rssget.sh [όλα | περιγραφή | τίτλος] [aboutdotcom | lxer]";
έξοδος;
fi

περίπτωση $ 1 το
όλα)
εμφάνιση = "- d-1 -u"
· ·
περιγραφή)
εμφάνιση = "- d -u"
· ·
τίτλος)
εμφάνιση = "- u"
· ·
esac

περίπτωση $ 2 το
aboutdotcom)
url = $ aboutdotcom;
· ·
lxer)
url = $ lxer;
· ·
esac
rsstail $ εμφάνιση $ url;

Μια μεταβλητή ορίζεται με το να της δοθεί ένα όνομα και στη συνέχεια να της δοθεί μια τιμή. Στο παραπάνω παράδειγμα, οι ακόλουθες είναι οι μεταβλητές:

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
display = ""
url = ""

Το σενάριο είναι άμεσα πιο εύχρηστο με τη χρήση μεταβλητών. Για παράδειγμα, κάθε παράμετρος χειρίζεται ξεχωριστά και έτσι δεν υπάρχουν ένθετες εντολές IF.

Η μεταβλητή εμφάνισης έχει ρυθμιστεί τώρα ανάλογα με το αν επιλέξατε όλα, περιγραφή ή τίτλο και η μεταβλητή url έχει οριστεί στην τιμή της μεταβλητής aboutdotcom ή στην τιμή της μεταβλητής lxer ανάλογα με το αν επιλέξατε aboutdotcom ή lxer.

Η εντολή rsstail πρέπει τώρα να χρησιμοποιήσει την τιμή της εμφάνισης και της url για να τρέξει σωστά.

Ενώ οι μεταβλητές ορίζονται μόνο δίνοντάς τους ένα όνομα, για να τους χρησιμοποιήσετε πραγματικά πρέπει να τοποθετήσετε ένα σημάδι $ μπροστά τους. Με άλλα λόγια η μεταβλητή = τιμή μεταβάλλει την τιμή σε μια τιμή ενώ η μεταβλητή $ σημαίνει ότι μου δίνεται το περιεχόμενο της μεταβλητής.

Το παρακάτω είναι το τελικό σενάριο για αυτό το σεμινάριο.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
use = "χρήση: rssget.sh [όλα | περιγραφή | τίτλος] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
display = ""
url = ""

αν [$ # -lt 2] || [$ # -gt 2]
έπειτα
echo $ usage;
έξοδος;
fi

περίπτωση $ 1 το
όλα)
εμφάνιση = "- d-1 -u"
· ·
περιγραφή)
εμφάνιση = "- d -u"
· ·
τίτλος)
εμφάνιση = "- u"
· ·
*)
echo $ usage;
έξοδος;
· ·
esac

περίπτωση $ 2 το
aboutdotcom)
url = $ aboutdotcom;
· ·
lxer)
url = $ lxer;
· ·
linuxtoday)
url = $ linuxtoday;
· ·
everydaylinuxuser)
url = $ everydaylinuxuser;
· ·
*)
echo $ usage;
έξοδος;
esac

rsstail $ εμφάνιση $ url;

Το παραπάνω σενάριο εισάγει περισσότερες ροές RSS και υπάρχει μια μεταβλητή χρήσης που λέει στον χρήστη πώς να χρησιμοποιήσει τη δέσμη ενεργειών εάν είτε δεν εισαγάγουν 2 μεταβλητές είτε εισάγουν λανθασμένες επιλογές για τις μεταβλητές.

Περίληψη

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

Υπάρχουν επίσης πολλά που μπορούν να γίνουν για να βελτιωθεί το παραπάνω σενάριο και αυτό θα καλυφθεί στους μελλοντικούς οδηγούς, καθώς θα εξερευνήσουμε τους βρόχους, τους grep και τις κανονικές εκφράσεις.

Ανατρέξτε στην ενότητα Πώς να κάνετε πιο κάτω τις κατηγορίες για να δείτε μια λίστα άρθρων του l inux.about.com για να βρείτε πιο χρήσιμους οδηγούς από τα διπλά booting Windows και το Ubuntu για τη δημιουργία μιας εικονικής μηχανής χρησιμοποιώντας κιβώτια GNOME .