Αυτό το commit περιλαμβάνεται σε:
infl00p 2022-03-23 20:14:33 +02:00
commit 8ec8e9bee2
451 αρχεία άλλαξαν με 46736 προσθήκες και 0 διαγραφές

60
content/articles/29/01_editorial.md Κανονικό αρχείο

@ -0,0 +1,60 @@
+++
title = 'Editorial'
date = '2000-12-01T00:00:00Z'
description = ''
author = 'Βαγγέλης Παπαδογιαννάκης(mailto:papas@hellug.gr)'
issue = ['Magaz 29']
issue_weight = 1
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Και καλές γιορτές\...*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Φτάσαμε στο Δεκέμβρη και βροχές δεν έχουμε δει ακόμα\... Μόνο 2-3 πλημμύρες, που ήταν και αναμενόμενες μια και έχουμε κάψει ό,τι καιγεται. Και το χώμα δε
συγκρατεί το νερό και το βουνό δε συγκρατεί το χώμα και γενικώς δε συγκρατείται τίποτα. Μόνο η ψυχραιμία μας, αλλά **μέχρι πότε**;
Και με αυτήν τη μελαγχολική εισαγωγή, ξεκινάει αυτό το **Editorial**. Ένα Editorial που κανονικά θα έπρεπε να είναι χαρωπό, **Χριστούγεννα πλησιάζουν!**. Και
όλοι μαζεύονται δίπλα στο τζάκι και όλοι είναι κοντά στο **Χριστουγεννιάτικο δέντρο** και όλοι κοιτάνε τις **κάλτσες** που έχουν κρεμάσει στο **τζάκι**
περιμένοντας το δώρο του **'ϊ Βασίλη**. **ΟΧΙ**, κάτι τέτοια γίνονται μόνο στη Αμερική. Εκεί που περιμένουν τα Χριστούγεννα για να βρεθούν όλοι μαζι, εκεί που ο
θεσμός της οικογένειας δεν είναι τόσο δυνατός (γιατί άραγε να υπάρχουν τόσοι άστεγοι;) ασχέτως πώς την παρουσιάζουν τα media και ο κάθε υποψήφιος προεδράρας,
που προς άγραν ψήφων βάζει και τη γυναίκα του δίπλα στο φακό.\
Δεν έχει σημασία ότι κάτω από το γραφέιο του περιμένει μια \`\`Μόνικα\'\'.
Μα τι είναι όλα αυτά και τι σχέση έχουν με το Linux και το Magaz ειδικότερα;
**Καμία\...**
\`Αντε λοιπόν καλές γιορτές, καλά φαγοπότια, και μην ξεχνάτε ότι έχουν πλέον απαγορευτεί τα κοκορέτσια και τα κεφαλάκια και τα λοιπά εδέσματα. ΧΑ, ας έρθουν
στην Κρήτη να μας το πουν\...\
(DISCLAIMER: Εγώ δεν τρώω τέτοια, για τους άλλους λέω (γλύψιμο, ο Αρτέμης ε;;;)).
Ένας τρελός επιστήμονας, ονόματι **Φώτης Γιαννούλας**, που οι φήμες τον τοποθετούν στο **Βόλο**, μου έστειλε ένα email για ένα Project, το **LCP (Linux
Classification Project)**, την κατηγοριοποίηση των HOW-TOs. Χαιρετίζουμε την προσπάθειά του και του υποσχόμαστε (εμείς, οι Παπαδογιαννάκηδες Βαγγέληδες) ότι
έχει μια θέση στο **magaz**, αλλά στο επόμενο τεύχος, γιατί δεν πρόλαβα να τα μεταφράσω σε **SGML**. Το Project είναι σε **Beta** φάση και, απ\' όσο το είδα,
είναι \*ήδη\* σε πολύ καλή κατάσταση.\
Να σημειώσω εδώ ότι είναι μια πολύ καλή δουλειά και πραγματικά χρειάζεται βοήθεια. Και αν όχι βοήθεια, στήριξη. Σύντομα αυτό το project θα μεγαλώσει πολύ. Η
κοινότητα του linux πραγματικά το είχε ανάγκη.\
Περισσότερες πληροφορίες από τον ίδιο, στο mail <photis_the_great@vol.forthnet.gr>
Στα άρθρα του magaz τώρα, το τεύχος, αν και θα έπρεπε να είναι εορταστικό, δεν είναι και τόσο, αφου δεν έχει **bonus άρθρο**. Αυτό γιατί δεν προσφέρονται και
τόσοι να γράψουν καμιά γραμμή. Ευτυχώς που ο [Παπακώστας ο Ευρυπίδης](mailto:evris@hellug.gr) μου έχει αφήσει παρακαταθήκη κάτι άρθρα που θα δημοσιεύονταν στο
DILIMA, αλλά τελικά αποφάσισε ότι το **magaz** είναι καλύτερο (γιατί άραγε;). Ευτυχώς που υπάρχει ο [Καμπριάνης ο Μιχάλης](mailto:kabrianis@hellug.gr), και
ξελασπώνει λίγο την κατάσταση\... Φυσικά και θα αναφέρω το μεγάλο μας ευεργέτη, τον [Κώστα Τσακάλογλου](mailto:tsakf@hellug.gr), που ουκ ολίγες φορές μας έχει
ξελασπώσει με την XBASIC. Όσο για εμένα, ε, γράφω κάνα editorial, γράφω και κάνα άλλο άρθρο που πότε - πότε βάζω, ε φτιάχνω και το νέο site του magaz, ε,
αυτά\...
Με χαρά (και ανησυχία για το τι θα βάλω στο επόμενο τεύχος) λοιπόν σας παραπέμπω στα άρθρα αυτού του μήνα:
- [XBASIC](04_xbasic.html) και οι συναρτήσεις της, από τον Τσακάλογλου.
- [Hellenic Status](03_hellenic-status.html)από τον Ευρυπίδη Παπακώστα.
- [Bash\...](05_bash.html)από τον Καμπριάνη Μιχάλη
- [Ελληνικοί ISPs](02_erevna.html)από το Βραχνάκη το Γιώργο. Αυτόν τον καλωσορίζουμε ιδιαιτέρως στην παρέα του magaz, μια και κατάγεται από το Linuxοχώρι!\
Τιιιιιι;;;;; Δεν ξέρετε το linuxοχώρι;;;;;;;;; Ντροπή σας! για πηγαίνετετε [εδώ](http://www.eeea.gr/article.php3?sid=20000607113131) εδώ να διαβάσετε\...
και μετά [εδώ](http://www.eeea.gr/article.php3?sid=20000613081716). Για να θυμούνται οι παλιοί και να μαθαίνουν οι νεότεροι\...
ΑΑΑΑ, να μην ξεχάσω να αναφέρω ότι δε νομίζω το επόμενο magaz να βγεί νωρίς το Γενάρη του νέου έτους. Αυτό πιστεύω ότι είναι κατανοητό και χωρίς να χρειάζεται
να το εξηγήσω\...
Καλή ανάγνωση mages και υπομονή, το νέο magaz έρχεται!\

248
content/articles/29/02_erevna.md Κανονικό αρχείο

@ -0,0 +1,248 @@
+++
title = 'Τα Operating Systems Τών Ελληνικών I.S.P\s'
date = '2000-09-01T00:00:00Z'
description = ''
author = 'Γιώργος Βραχνάκης(mailto:gi0rgos@pathfinder.gr)'
issue = ['Magaz 29']
issue_weight = 2
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Αυτό το άρθρο επιχειρεί μια έρευνα για τους internet service providers της Ελλάδας. Σε καμία περίπτωση δεν είναι πλήρης, και δεν μπορεί να γίνει. Παρόλα αυτά,
μια βασική ιδέα την πέρνουμε για τα τεκταινόμενα του Internet εν Ελλάδι. Όσοι λοιπόν έχετε αναρωτηθεί τι O/S τρέχει ο Internet Provider που έχετε Account τώρα
μπορείτε να μάθετε.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Γενικά περί της έρευνας**
-------------------------------------------------------
**2. Απαντήσεις**
------------------------------------------
- [2.1 HellasNet](#ss2.1)
- [2.2 Otenet](#ss2.2)
- [2.3 SparkNet](#ss2.3)
- [2.4 Panafonet](#ss2.4)
- [2.5 GroovyNet](#ss2.5)
**3. Οι μη απαντήσαντες\...**
------------------------------------------------------
**4. Servers (προγράμματα) στους servers**
-------------------------------------------------------------------
- [4.1 HTTP](#ss4.1)
- [4.2 MAIL](#ss4.2)
- [4.3 NEWS](#ss4.3)
**5. Αναλύσεις\...**
---------------------------------------------
**6. Ευχαριστίες.**
--------------------------------------------
### [1. Γενικά περί της έρευνας]{#s1}
Οι αναφορές γίνονται σε κάθε Internet Provider και τι λειτουργικό σύστημα τρέχουν oι διάφοροι Servers του (web, ftp, dial up, etc)
Σε όλους είχε σταλεί το παρακάτω email:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Κύριε/Κυρία,
Τους θερμούς χαιρετισμούς μου, και μπαίνω κατευθείαν στο θέμα.
Ονομάζομαι Παπαδογιαννάκης Ευάγγελος, και είμαι ο αρχισυντάκτης του magaz, του επίσιμου online περιοδικού για το linux στην Ελλάδα, της HELLUG (Hellenic Linux Users Group, http://www.hellug.gr). To περιοδικό μας βρίσκεται στο http://magaz.hellug.gr. Στα πλαίσια ενός άρθρου που συντάσσω με τον Βραχνάκη Γεώργιο, θα ήθελα να με ενημερώσετε για τα παρακατω στοιχεία όσον αφορά στο τι τρέχουν οι server σας.
Operating system of Mail Servers:
Operating system of DNS Servers:
Operating system of FTP Servers:
Operating system of Dial Up Servers:
Operating system of Web Servers:
software of Mail Servers: (πχ Sendmail 8.9.3/8.9.3)
software of DNS Servers: (πχ bind)
software of FTP Servers: (πχ wuftp)
software of News Servers: (πχ NNTPcache server)
software of Web Servers: (πχ IIS)
Θα το εκτιμούσα αν απαντήσετε μέχρι τις 2 Σεπτεμβρίου, πράγμα που το θεωρώ αρκετά εύκολο.
Το άρθρο θα παρουσιαστεί στο magaz (http://magaz.hellug.gr) στο τεύχος Σεπτεμβρίου, που θα βγει στη δημοσιότητα στις 3 του ίδιου μήνα.
Για οποιαδήποτε απορία - διευκρίνιση, παρακαλώ μη διστάσετε να επικοινωνήσετε μαζί μου.
Ευχαριστώ εκ των προτέρων,
Ο Αρχισυντάκτης και Συντονιστής Αρθρογραφίας του Μagaz,
Παπαδογιαννάκης Ευάγγελος.
papas@hellug.gr
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Το mail αυτό στάλθηκε στις παρακάτω διευθύνσεις.
- <cgian@eexi.gr>
- <support@forthnet.gr>
- <support@hol.gr>
- <info@mbn.gr>
- <noc@otenet.gr>
- <support@compulink.gr>
- <root@stsnet.gr>
- <helpdesk@spark.net.gr>
- <support@groovy.gr>
- <Support@panafonet.gr>
- <webmaster@tee.gr>
- <webmaster@internet.gr>
### [2. Απαντήσεις]{#s2}
Φυσικό και αναμενόμενο, δεν πήραμε και πολλές απαντήσεις. Οι λίγοι όμως που μας έστειλαν, πρέπει να τιμηθούν αφού μας αφιέρωσαν λίγο από το χρόνο τους.
Παρακάτω λοιπόν, είναι όσοι απάντησαν και οι απαντήσεις τους όσον αφορά στο θέμα μας
### [2.1 HellasNet]{#ss2.1}
**Mail Servers**: Solaris\
**DNS Servers**: Solaris & Linux RedHat\
**FTP Servers**: Linux RedHat\
**Dial Up Servers**: Solaris\
**Web Servers**: Linux RedHat, Solaris και WinNT
### [2.2 Otenet]{#ss2.2}
**Mail Servers**: Solaris\
**DNS Servers**: Solaris\
**FTP Servers**: Solaris\
**Dial Up Servers**: Solaris\
**Web Servers**: Solaris
Εδώ, όπως φυσικά οι περισσότεροι ξέρετε, υπάρχει μια αντίθεση. Για τους web servers τους, οι της OteNet μας έστειλαν πληροφορίες ότι τρέχουν **Solaris**. Σε
αυτή την περίπτωση εγώ σηκώνω τα χέρια ψηλά, γιατί από τη μια στο site τους μας λένε ότι τρέχουν Windows 2000, και από την άλλη γιατί και το
**[NetCraft](http://www.netcraft.com)** μου δίνει επίσις ότι τρέχουν Windows 2000 με Microsoft-IIS/5.0.
Επίσης, στο email απάντηση της OteNet, υπήρχε (μεταξύ άλλων) το
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Υπόψιν ότι όλα τα παραπάνω στοιχεία μπορούσατε να τα πάρετε με νόμιμο τρόπο.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Δηλαδή εμείς τώρα τα πήραμε με παράνομο τρόπο; Τέλος πάντων\...
### [2.3 SparkNet]{#ss2.3}
**Mail Servers**: Solaris\
**DNS Servers**: Solaris\
**FTP Servers**: Solaris\
**Dial Up Servers**: Solaris\
**Web Servers**: Solaris
### [2.4 Panafonet]{#ss2.4}
**Mail Servers**: Solaris\
**DNS Servers**: Solaris\
**FTP Servers**: Solaris\
**Dial Up Servers**: Solaris\
**Web Servers**: Solaris
### [2.5 GroovyNet]{#ss2.5}
NetBSD ή OpenBSD
### [3. Οι μη απαντήσαντες\...]{#s3}
Στους παρακάτω Providers έστειλα 2 φορές email (!) με μια διαφορά 6 ημερών, δεν απάντησε κανείς!.
Σημείωση: Οι παρακάτω πληροφορίες έχουν παρθεί απο το [NetCraft](http://www.netcraft.com). Αυτό σημαίνει οτι **\*δεν\* είναι απολύτα αξιόπιστες και είναι
\*μονο\* για το σε τι O/S τρέχουν οι Web Servers**.
\
**Forthnet**: IRIX\
**HOL**: Solaris\
**Compulink**: Win2000\
**TEE**: Solaris\
**StsNet**:Red Hat Linux\
**Mbn**:Windows 2000\
**Internet Hellas**: Linux ('γνωστη Διανομή)\
Η Internet Hellas \*απάντησε\* στο mail μου αλλά με σε UTF-8 με αποτέλεσμα να μην μπορώ να το διαβάσω γι\'αυτό το λόγο δεν γράφω και για τους υπόλοιπους
servers.
### [4. Servers (προγράμματα) στους servers]{#s4}
Ας περάσουμε τώρα στο τι τρέχει ο κάθε provider στις επιμέρους υπηρεσίες. Τα αποτελέσματα προέρχονται από το [NetCraft](http://www.netcraft.com)
### [4.1 HTTP]{#ss4.1}
\
**HellasNet**: Apache/1.3.4\
**OteNet**: Microsoft-IIS/5.0\
**SparkNet**: Apache/1.3.12 (Unix) PHP/3.0.16 mod\_perl/1.21 mod\_ssl/2.6.2 OpenSSL/0.9.5a-beta2\
**PanafoNet**: Netscape-Enterprise/4.0\
**GroovyNet**: Apache/1.3.12 (Unix) mod\_ssl/2.6.2 OpenSSL/0.9.5a\
**ForthNet**: Νetscape-Enterprise/3.6 SP2\
**HOL**: Netscape-Enterprise/3.6 SP2\
**Compulink**: Microsoft-IIS/5.0\
**TEE**: Netscape-Enterprise/4.0\
**Internet Hellas**: Apache/1.3.12\
**stsnet**: Apache/1.3.9 (Unix)\
**mbn**: Microsoft-IIS/5.0
### [4.2 MAIL]{#ss4.2}
Να σημειωθεί, οτι τα αποτελέσματα για τους mail servers eξήχθηκαν με ένα telnet στην πόρτα 25.
**HellasNet**: Sendmail 8.9.1/8.9.1\
**otenet**: Sendmail 8.10.1/8.10.1\
**SparkNet**: Sendmail 8.11.0/8.11.0\
**PanafoNet**: Netscape Messaging Server 4.1\
**GroovyNet**: Sendmail 8.8.8/8.8.8\
**forthnet**: Sendmail 8.8.5/8.8.5\
**HOL**: QMail\
**Compulink**: Sendmail 8.10.2/8.10.2\
**TEE**: -\
**Internet Hellas**:-\
**stsnet**: Sendmail 8.9.3/8.9.3\
**mbn**: Sendmail 8.8.5/8.8.5
### [4.3 NEWS]{#ss4.3}
Αποτελέσματα με telnet στην πόρτα 119.
**HellasNet**: NNTPcache server V2.3.3\
**otenet**: -\
**SparkNet**: -\
**PanafoNet**: -\
**GroovyNet**: -\
**forthnet**: NNTPcache server V2.3.3\
**HOL**: -\
**Compulink**: InterNetNews NNRP server INN 2.2.1\
**TEE**: -\
**Internet Hellas**: -\
**stsnet**: -\
**mbn**: -
### [5. Αναλύσεις\...]{#s5}
Από μια βασική ανάλυση, φαίνεται ότι το **Solaris** έχει τη μερίδα του λέωντος, πράγμα πολύ καλό αν αναλογιστούμε πόσο σταθερό και αξιόπιστο θεωρείται.
Από την άλλη στους εξηπηρετητές web φαίνεται οτι ο **Apache** και ο **Netscape** είναι η πιο χρησιμοποιούμενη λύση.
Όσο για τους **mail servers**, ε εδώ δεν χρειάζεται ανάλυση, το **sendmail** είναι ο αδιαμφισβήτητος (και αναμενόμενος) βασιλιάς. Οπαδοί του **Q**
μαζευτείτεεεεε!
### [6. Ευχαριστίες.]{#s6}
Τέλος να ευχαριστίσω για τιw πληροφορίες που μας έδωσαν:
τον Κύριο Αντώνιο Πετράκη απο την HellasNet,\
τον Κύριο Αχιλλέα Βολίοτη απο την Otenet,\
τον Κύριο Νίκο Ασλανάκη απο την SparkNet,\
την κυρία Ζωή Παπακωνσταντίνου απο την Panafonet,

372
content/articles/29/03_hellenic-status.md Κανονικό αρχείο

@ -0,0 +1,372 @@
+++
title = 'Το Linux στην Ελλάδα'
date = '2000-02-01T00:00:00Z'
description = ''
author = 'Evripidis Papakostas (evris@hellug.gr) Voula Sanida (voulariba@hellug.gr)'
issue = ['Magaz 29']
issue_weight = 3
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Φαίνεται πως κάτι αρχίζει να κινείται στον Ελληνικό χώρο όσον αφορά στο Linux. Η Ελληνική Linux κοινότητα πολλαπλασιάζει τα μέλη της, νέα οργανωμένα sites και
λίστες συζητήσεων εμφανίζονται, πρόοδος σημειώνεται στον χώρο της υποστήριξης και ενσωμάτωσης ελληνικών στο λειτουργικό αυτό. Παράλληλα, το Linux κεντρίζει
πλέον το ενδιαφέρον των ελληνικών περιοδικών, βιβλιοπωλείων, εταιριών, ακόμα και των Κρατικών Οργανισμών που βλέπουν μια πιθανή αγορά να δημιουργείται. Τις
περισσότερες φορές οι διεθνείς εξελίξεις στην Πληροφορική, τελικά υιοθετούνται και από την Ελληνική αγορά (έστω και με μια διαφορά φάσης). Από αυτή την πλευρά,
παρουσιάζει ιδιαίτερο ενδιαφέρον να καταγράψουμε την μέχρι τώρα εικόνα της ελληνικής Linux σκηνής και πως αυτή επηρεάστηκε το τελευταίο διάστημα.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Ελληνική Linux Κοινότητα**
-----------------------------------------------------------------
**2. Linux και Ελληνικά Σχολεία**
-------------------------------------------------------------------
**3. H Εμπορική Πλευρά**
----------------------------------------------------------
- [3.1 Providers - Ένωση Ελλήνων Χρηστών Internet (EEXI)](#ss3.1)
- [3.2 Προεγκατεστημένα Linux - ΥΕΠ και Μακεδονικά Περιφερειακά](#ss3.2)
- [3.3 Πώληση και Υποστήριξη Συστημάτων. Step Computers](#ss3.3)
**4. Έντυπη πληροφόρηση και Linux**
---------------------------------------------------------------------
**5. To Ελληνικό Linux με αριθμούς**
----------------------------------------------------------------------
### [1. Ελληνική Linux Κοινότητα]{#s1}
Μέχρι κάποια εποχή οι Έλληνες Linuxάδες αποτελούσαν μια αμελητέα μειοψηφία ανάμεσα στο σύνολο των υπολοίπων χρηστών Η/Υ. Η πρώτη επίσημη προσπάθεια καταμέτρησης
των Ελλήνων χρηστών Linux έγινε κάπου στα μέσα του 1996 και αυτοί που δηλώθηκαν δεν ξεπερνούσαν τους 50. Σήμερα σε τελευταία καταμέτρησή τους από το ελληνικό
ηλεκτρονικό περιοδικό για Linux, magaz (http://magaz.hellug.gr) ξεπερνούν τους 450 (αύξηση 800%). Αν οι απόλυτοι αριθμοί αυτοί σας φαίνονται μικροί, σκεφτείτε
πόσοι από εσάς έχετε συνδρομή internet και την χρησιμοποιήσατε μάλιστα για να δηλώσετε σε κάποιο δικτυακό τόπο ποιό λειτουργικό σύστημα χρησιμοποιείτε.
Υπήρχαν βέβαια από τότε κάποιες λιγοστές μεμονωμένες σελίδες σχετικά με το Linux, στις οποίες οι τότε γκουρού έδιναν τεχνικές συμβουλές και βοήθεια στους
απεγνωσμένους (υποστήριξη ελληνικών, γραμματοσειρές).
Στα λίγα αυτά χρόνια που πέρασαν η κατάσταση έχει σαφώς καλυτερεύσει. Ενδεικτικά αναφέρουμε μερικά από τα μεγαλύτερα και γνωστότερα sites: http://www.linux.gr
(Φθινόπωρο 1997), του επίσημου site του HELLUG http://www.hellug.gr, το ηλεκτρονικό περιοδικό magaz (http://magaz.hellug.gr), την ΕΕΕΑ (http://www.eeea.gr).
Κάπου τον Φεβρουάριο του 1997 γίνεται το σημαντικότερο ίσως βήμα για την ελληνική Linux κοινότητα. Ο Γιάννης Ιωάννου δημιουργεί την ηλεκτρονική λίστα
linux-greek-users στον κόμβο argeas.argos.hol.gr. Η λίστα αυτή ασχολείται με την επίλυση προβλημάτων χρήσης του Linux και γενικότερα με οποιοδήποτε θέμα που
άπτεται του ενδιαφέροντος των Ελλήνων Linuxάδων. Αποτελεί δε ορόσημο στην πορεία του Linux στην Ελλάδα, καθώς έφερε σε επαφή όλους τους (μέχρι τότε μοναχικούς
και αποκομμένους) Linuxάδες, αναπτέρωσε το ηθικό και τις ελπίδες τους και αποτέλεσε το μέσο για την σύσφιξη των δεσμών τους και την ανάπτυξη της ιδέας της
κοινότητας (μιας ιδέας που είναι στενά συνυφασμένη με το Linux γενικότερα).
Σήμερα, η λίστα αυτή αριθμεί επισήμως περί τα 200 μέλη (300% αύξηση μελών στα δύο χρόνια λειτουργίας της) και αρκετές φορές πολλαπλάσιο αριθμό ατόμων που την
παρακολουθούν χωρίς να είναι εγγεγραμμένοι. Αυτό πρακτικά σημαίνει πως ο νέος χρήστης που αντιμετωπίζει προβλήματα με το Linux (και που δεν μπορεί να λύσει
μόνος του) έχει μεγάλες πιθανότητες να βρει την λύση του αν καταφύγει (με ευγενικό τρόπο) στην βοήθεια του τεράστιου think tunk της ελληνικής Linux κοινότητας.
Παράλληλα, έχει μπει σε λειτουργία η linux-howto. Διαθέτει πάνω από 60 μέλη, στην οποία συζητούνται προβλήματα τεκμηρίωσης, μεταφράσεων, εξελληνισμών
προγραμμάτων και διανομών (60 εθελοντές μεταφραστές και συγγραφείς δεν είναι και λίγοι!).
Η δραστηριοποίηση των ελλήνων Linuxάδων οδήγησε και στο σχηματισμό του επίσημου συλλόγου Linuxάδων HELLUG (Hellenic Linux Users Group) που σήμερα αριθμεί περί
τα 100 μέλη.
Ο σκοπός του συλλόγου είναι η ανάπτυξη εφαρμογών, η σύσφιξη των σχέσεων των Ελλήνων χρηστών Linux, η προώθηση και η διάδοση του λειτουργικού, ο εξελληνισμός
μέρους του και η συνεργασία με αντίστοιχους συλλόγους, οργανισμούς και εταιρίες εντός και εκτός Ελλάδας.
Ανεπίσημα τοπικά LUGs υπάρχουν επίσης στην Θεσ/κη (TheLUG), Πάτρα (PLUG), Αλεξανδρούπολη (ALLUG) και Θράκη (ThraceLUG).
Μέσω του συλλόγου, μπόρεσαν να οργανωθούν, συστηματοποιηθούν και συνεχιστούν οι ανεξάρτητες συνεισφορές των διαφόρων Linuxάδων και έτσι πλέον στον κόμβο του θα
βρείτε λύση για χρόνια προβλήματα που ταλαιπωρούσαν τον κόσμο: ελληνικά πληκτρολόγια, γραμματοσειρές, εκτυπώσεις με ελληνικά, μεταφρασμένη τεκμηρίωση και
εφαρμογές, ελληνικοποιημένες διανομές (π.χ. SuSE), διορθωτές ορθογραφίας, ερωταπαντήσεις (FAQ), οδηγίες κλπ. Πλέον περιβάλλοντα όπως το KDE, Gnome έχουν σχεδόν
ολικά εξελληνιστεί.
Στις δραστηριότητες του HELLUG περιλαμβάνονται happenings (όπως αυτό στην Στουρνάρη, όπου μοιράστηκαν δωρεάν διανομές Linux και ενημερωτικό υλικό, το
παρακολούθησαν περί τα 2000 άτομα), παρουσία σε εκθέσεις (περίπτερο στην INFOSYSTEM 99) κλπ.
Σημαντική εξέλιξη του χώρου αποτέλεσε και η κυκλοφορία (Ιανουάριος 1998) του ηλεκτρονικού περιοδικού για Linux, magaz (http://magaz.hellug.gr) με άνω των 2500
hits μηνιαίως και με συντακτική ομάδα άνω των 10 αρθρογράφων.
Βλέπουμε πως η δουλειά που έχει γίνει και η πληροφόρηση που προσφέρεται γύρω από το Linux στον ελληνικό χώρο είναι δυσανάλογα μεγάλη σε σχέση με την διάδοση
του. Δεν είμαστε ενήμεροι για αντίστοιχους αφιλοκερδείς συλλόγους, λίστες βοηθείας και δωρεάν ηλεκτρονικά περιοδικά και τόπους στην Ελλάδα για άλλα λειτουργικά.
### [2. Linux και Ελληνικά Σχολεία]{#s2}
Στις 22 Απριλίου 1999, το Υπουργείο Εθνικής Παιδείας και Θρησκευμάτων προκυρήσει διαγωνισμό για την προμήθεια αρκετών χιλιάδων Η/Υ για τα Ενιαία Λύκεια με
προεγκατάσταση 2 Λ.Σ. εκ των οποίων το ένα θα πρέπει να είναι \"τύπου Linux\". Λίγους μήνες πριν, η Αγγλία, η Γαλλία και το Μεξικό είχαν προβεί σε αντίστοιχες
ενέργειες. Ο διαγωνισμός αυτός αναγκαστικά κινεί το ενδιαφέρον των μεγάλων εταιριών γύρω από το λειτουργικό αυτό. Να σημειωθεί πως μέχρι σήμερα ο διαγωνισμός
δεν έχει κριθεί.
![](/29/img/ypepth1.gif)
![](/29/img/ypepth2.gif)
Τέτοιοι διαγωνισμοί προκυρήχτηκαν παράλληλα για όλα τα γεωγραφικά διαμερίσματα της Ελλάδας.
To ΥΠΕΠΘ συνεχίζει να εκπλήσσει ευχάριστα τον κόσμο, παρακολουθώντας από κοντά τις εξελίξεις και αναβαθμίζοντας μέσα σε λίγους μήνες και το πρόγραμμα σπουδών
του, όπως φαίνεται και στο απόκομμα από το μάθημα Λειτουργικά Συστήματα για τα ΤΕΕ.
![](/29/img/ypepth3.gif)
### [3. H Εμπορική Πλευρά]{#s3}
Κατηγορηματικά μπορούμε να πούμε πως αυτή τη στιγμή, το Linux κάθε άλλο παρά πρωταγωνιστεί στις δραστηριότητες των περισσοτέρων εταιριών. Με την ίδια βεβαιότητα
πάντως μπορούμε να ισχυριστούμε πως ο αριθμός των εταιριών που βλέπουν πλέον με άλλο μάτι το λειτουργικό αυτό δεν είναι αμελητέος (ειδικά σε σύγκριση με το
παρελθόν).
Ολοένα και περισσότερες εταιρίες αρχίζουν να ασχολούνται συστηματικά με τον χώρο του Linux, καθώς σιγά σιγά αρχίζουν να βλέπουν να αποτελεί ένα υπολογίσιμο
μέρος της πίτας της αγοράς. Ενδεικτικά αναφέρουμε εταιρίες όπως η Step στον Πειραιά, τα Μακεδονικά Περιφερειακά και την ΥΕΠ (Υπηρεσίες Εφαρμοσμένης
Πληροφορικής) στην Θεσ/κη που ήδη προσφέρουν Η/Υ με προεγκατεστημένο Linux.
Στον χώρο της τεχνικής υποστήριξης, οι πατροπαράδοτα μεγάλες εταιρίες, όπως η Compaq και η HP, έχουν (ή προσπαθούν) να αλλάξουν την πολιτική τους και να
ακολουθήσουν τη γραμμή που υπαγορεύει η μητρική εταιρεία (τεχνική υποστήριξη σε Linux αλλά και πώληση). Από όσο είμαστε ενήμεροι, υπάρχουν σκέψεις από μεγάλες
ελληνικές εταιρίες για κυκλοφορία σειρών Η/Υ με προεγκατεστημένο Linux και από τις αλυσίδες λιανικής διάθεσης που διαθέτουν.
Επίσης, όπως εδώ και καιρό συμβαίνει στο εξωτερικό, υπάρχουν κάποιες εταιρείες που το στηρίζουν επενδύοντας σε μακροπρόθεσμα έμμεσα oφέλη από αυτήν την κίνηση.
Έτσι, δεν είναι λίγοι αυτοί που έχουν βοηθήσει ενεργά την ελληνική Linux κοινότητα με διάφορους τρόπους.
Η Forthnet, για παράδειγμα, χορηγεί στον σύλλογο HELLUG τη γραμμή που εξυπηρετεί το www.hellug.gr, η Internet Hellas το www.linux.gr (και παλαιότερα η HOL), η
ΕΕΧΙ έχει επίσης προσφερθεί να βοηθήσει αναλόγως όπου χρειαστεί.
Κάποιοι άλλοι όπως τα Μακεδονικά Περιφερειακά και η SYSWARE, έχουν δωρίσει τους απολύτως αναγκαίους servers, ενώ υπάρχουν και περιπτώσεις εταιριών που έχουν
εμπλακεί προάγοντας το Linux, χωρίς καν να άπτεται των δραστηριοτήτων τους (όπως π.χ. η Modus Vivendi που ανέλαβε την διακόσμηση και τα έξοδα του περιπτέρου
στην INFOSYSTEM 99).
Μιλήσαμε με μερικούς αντιπροσώπους των χαρακτηριστικότερων κατηγοριών εταιριών που στις εμπορικές τους δραστηριότητες ήδη περιλαμβάνουν το Linux.
### [3.1 Providers - Ένωση Ελλήνων Χρηστών Internet (EEXI)]{#ss3.1}
Ο κ. Αλέξης Κουλουμπής υπεύθυνος για την διαχείριση του δικτύου της ΕΕΧΙ μας αναφέρει:
\"Η EEXI είναι μια Ένωση μη κερδοσκοπικού χαρακτήρα. Από την πρώτη κιόλας μέρα λειτουργίας της, το δίκτυο της βασίζεται εξ\'ολοκλήρου πάνω σε Linux.
Η απόφαση αυτή πάρθηκε λαμβάνοντας υπόψιν την σταθερότητα που επιδείκνυε το εν λόγω λειτουργικό σύστημα, την εμπειρία των system administrators με αυτό, την
πληθώρα εφαρμογών που υπήρχαν διαθέσιμες στο δίκτυο καθώς και το ανύπαρκτο κόστος αρχικής κτήσης του λογισμικού.
Σημαντικό ήταν για εμάς επίσης το γεγονός πως δεν ήμασταν αποκομμένοι από τους \*προμηθευτές\* του λογισμικού. Αυτοί καθώς γνωρίζετε δεν είναι άλλοι από την
Linux κοινότητα, κοινοί άνθρωποι με τους οποίους μπορούμε να έρθουμε άμεσα σε επαφή και να συνεργαστούμε για να διορθώσουμε οποιαδήποτε προβλήματα.
Από την άλλη, η προσφορά του κώδικα των εφαρμογών, κάνει το customization πολύ πιο εύκολο.
Αξίζει να σημειώσουμε πως από το 1993 μέχρι σήμερα, υπάρχουν Linux μηχανήματα που παραμένουν σε λειτουργία, με συνεχείς on-line αναβαθμίσεις, επιδεικνύοντας
άψογη συμπεριφορά.
Η ΕΕΧΙ εξυπηρετεί άνω των 2000 μελών, προσφέροντας τους όλες τις συνήθεις διαδικτυακές υπηρεσίες, καθώς και δυνατότητα χρήσης unix shell.
Μέσα στις δραστηριότητές μας συμπεριλαμβάνονται και Linux specific σεμινάρια σε ιδιώτες και οργανισμούς, καθώς και συνεργασίες με το HELLUG στον οποίο μερικοί
από μας τυγχάνουν και ενεργά μέλη\"
### [3.2 Προεγκατεστημένα Linux - ΥΕΠ και Μακεδονικά Περιφερειακά]{#ss3.2}
\"Διαπιστώνουμε καθημερινά, ότι και ο επιχειρηματικός κόσμος αναγνωρίζει τα πλεονεκτήματα του Linux και προχωράει βαθμιαία στην εφαρμογή του. Αναμένουμε όμως
αντίστοιχη ανταπόκριση και από τους Home users. Οι μέχρι τώρα δραστηριότητές μας, όσον αφορά τον χώρο του Linux, μπορούν να συνοψιστούν στα εξής:
Αντιπροσωπεύουμε την διανομή SuSE και παρέχουμε δωρεάν τηλεφωνική υποστήριξη εγκατάστασης για 60 ημέρες (μόνο για την τρέχουσα έκδοση).
Τα \"Μακεδονικά Περιφερειακά\" με την συνεργασία μας παράγουν την σειρά υπολογιστών XpePPer με λειτουργικό σύστημα Linux (SuSE).
Από την εταιρεία μας ζητείται συνήθως η προμήθεια και εγκατάσταση file και print servers καθώς επίσης FAX servers, DNS, proxy κλπ.
Αντιπροσωπεύουμε στην Ελλάδα το εξελληνισμένο λογισμικό διαχείρισης νοσοκομειακών εργαστηρίων της γερμανικής εταιρείας IMP. Το λογισμικό αυτό τρέχει σε Linux με
αρχιτεκτονική client/server.
Το Υπουργείο Παιδείας σε πρόσφατο μεγάλο διαγωνισμό για τον εξοπλισμό των εργαστηρίων Πληροφορικής και Φυσικής ζήτησε οι προσφορές να περιλαμβάνουν
εγκατεστημένο λειτουργικό σύστημα πλην των Windows και Linux. Η InfoQuest συμμετείχε σ\' αυτόν τον διαγωνισμό συνεργαζόμενη μαζί μας στο μέρος που σχετίζεται με
το Linux.
Στη συνεισφορά μας για την προώθηση του Linux μεταξύ άλλων συγκαταλέγεται μια σειρά ολιγόλεπτων δυστυχώς παρουσιάσεων στην εκπομπή PCTV της ΕΤ3 καθώς και η
προβολή μέσω του δικτυακού τόπου μας www.suse.gr. Επίσης προσπαθούμε να βοηθάμε την εξάπλωση του λειτουργικού αυτού, με όποιον τρόπο μπορούμε. Χαρακτηριστικά
αναφέρω την αρμονική μας συνεργασία με το HELLUG, το οποίο τόσο εμείς όσο και τα Μακεδονικά Περιφερειακά έχουμε ενισχύσει κατά καιρούς, χορηγώντας διανομές
Linux και Η/Υ σε εκθέσεις όπως η INFOSYSTEM και διάφορα happenings που διοργανώθηκαν.\"
Γ. Παπαδόπουλος
Υπηρεσίες Εφαρμοσμένης Πληροφορικής
Δωδεκανήσου 61, 551 31 Θεσσαλονίκη
Τηλ: 031-424512, FAX: 031-417537
### [3.3 Πώληση και Υποστήριξη Συστημάτων. Step Computers]{#ss3.3}
\"Η Step δημιουργήθηκε στα τέλη του 1994 με αντικείμενο την πώληση και συντήρηση εξοπλισμού Η/Υ και την παροχή ολοκληρωμένων λύσεων LAN στις μικρομεσαίες
επιχειρήσεις. Η έδρα μας είναι στον Πειραιά και δραστηριοποιούμαστε σε ολόκληρη την Αττική.
Από τα μέσα του 1996 πειραματιστήκαμε με το Linux και αρκετά αργότερα ξεκινήσαμε μια συνεργασία με την SuSE, της οποίας αποτελέσαμε τον αρχικό distributor στην
Ελλάδα.
Η εταιρία μας έχει πλέον μεγάλη εμπειρία στο Linux και στις εφαρμογές του στον επιχειρηματικό χώρο. Αρκετοί από τους πελάτες μας βασίζονται σε αυτό για τις
καθημερινές τους ανάγκες, σε επίπεδο server βέβαια ακόμα.
Έχουμε συνεργαστεί με το HELLUG για τον εξελληνισμό της διανομής SuSE Linux, και έχουμε στηρίξει σε αρκετές περιστάσεις, με παροχή υλικού, διανομών και άλλες
χορηγίες τις προσπάθειες του συλλόγου.
Η ίδια η εταιρία μας καλύπτει τις δικτυακές της ανάγκες βασισμένη σε σύστημα Linux και την τεχνογνωσία που αποκομμίζουμε από αυτό, θα προσπαθήσουμε να την
περάσουμε και στην αγορά σε συστήματα που θα παρέχουμε. Μια τέτοια συνεργασία με μεγάλη εταιρία πληροφορικής είναι σε εξέλιξη.
Έχουμε συνεργαστεί με το HELLUG για τον εξελληνισμό της διανομής SuSE Linux, και έχουμε στηρίξει σε αρκετές περιστάσεις, με παροχή υλικού, διανομών και άλλες
χορηγίες τις προσπάθειες του συλλόγου.
Επειδή πιστεύουμε πως η ενίσχυση της Linux κοινότητας έμμεσα ή άμεσα ωφελεί και τις επιχειρηματικές μας δραστηριότητες, προσπαθούμε να προσφέρουμε και στον χώρο
αυτό. Στα σχέδια μας συμπεριλαμβάνεται η συγγραφή εγχειριδίου για Linux για τον άπειρο χρήστη με σκοπό να τον ενημερώσει για τις ιδιαιτερότητες των διάφορων
διανομών Linux. \"
Γιώργος Παπαμιχελάκης
Step Computers
### [4. Έντυπη πληροφόρηση και Linux]{#s4}
Αν ξεφυλλίσετε προσεκτικά τα γνωστότερα περιοδικά του χώρου της πληροφορικής θα παρατηρήσετε πως πλέον σταθερά θα βρείτε άρθρα, αφιερώματα, ερωταπαντήσεις, νέα
και προγράμματα για Linux.
Μέχρι κάποιο διάστημα, το ηλεκτρονικό περιοδικό magaz ήταν το μοναδικό βήμα για το, ομολογουμένως ολιγομελές, ελληνικό Linux κοινό.
Στον έντυπο χώρο, οι επιλογές περιορίζονταν σε εξειδικευμένες εκδόσεις του εξωτερικού (βλέπε Linux Journal).
Δειλά δειλά το 1998 αρχίζουν να εμφανίζονται μικρά άρθρα και νέα για Linux, ενώ η τάση αυτή γίνεται ιδιαίτερα αισθητή από τα μέσα του 1999.
Για παράδειγμα, το RAM του Απριλίου (τεύχος 124) κάνει το πρώτο εκτεταμένο αφιέρωμα για Linux, διαθέτοντας πάνω από 40 σελίδες, καθώς και μια ολοκληρωμένη
διανομή SuSE 6.0.
Παρεμφερή πολιτική ακολούθησαν και τα υπόλοιπα περιοδικά όπως το Chip, το Computer Για Όλους κλπ.
Ακόμα και μη τεχνικά περιοδικά ή εφημερίδες έχουν αφιερώσει σελίδες τους στο νέο αυτό λειτουργικό. Ενδεικτικά αναφέρουμε το ΜΕΝ, το ΜΕΤΡΟ, το Βήμα, την
Ελευθεροτυπία.
Ας μην ξεχνάμε και την κυκλοφορία του D.I.Li.Ma που αποτελεί το πρώτο εξειδικευμένο περιοδικό για Unix.
Το γεγονός αυτό μιλάει από μόνο του. Η ύλη των εντύπων θα πρέπει να βρίσκεται σε συμφωνία με το ενδιαφέρον και τις προτιμήσεις του αγοραστικού κοινού.
Περισσότερες λοιπόν σελίδες για Linux/Unix ένα πράγμα μπορεί να σημαίνει: αυξημένη απήχηση του λειτουργικού στους αναγνώστες.
### [5. To Ελληνικό Linux με αριθμούς]{#s5}
Καταμέτρηση Χρηστών Linux Ελλάδας (στοιχεία από το magaz.hellug.gr)
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ Αριθμός Χρηστών
Έτος
1996 50
1999 450
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Αριθμός Λιστών Ηλεκτρονικών Μηνυμάτων
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ Αριθμός Λιστών
Έτος
1996 0
1997 2
1998 4
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Οι λίστες αυτές είναι οι :
linux-greek-users\@hellug.gr για κάθε είδους συζήτηση και τεχνικά προβλήματα σχετικά με Linux.
linux-howto\@hellug.gr για μεταφραστικά ζητήματα και συγγραφή τεκμηρίωσης για Linux.
hellug\@hellug.gr για διαδικαστικά θέματα από τα μέλη του συλλόγου HELLUG
thelug (από newsgroup στο edessa.topo.auth.gr) για την επικοινωνία των μελών του Θεσσαλονικιώτικου LUG
Χρήστες της linux-greek-users (δεν προσμετρούνται οι χρήστες που τη διαβάζουν μέσω newsgroup και που είναι αρκετές φορές πολλαπλάσιοι)
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ Αριθμός Χρηστών
Έτος
1997 50 (3978 Messages)
Μέσα του 1999 200 (9000 Messages)
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Ο διεθνής counter χρηστών Linux (counter.li.org) δίνει:
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ Χρήστες
Χώρα
Κύπρος 70
Ελλάδα 518
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
![](/29/img/linux_counter.jpg)
Ιδιαίτερο ενδιαφέρον παρουσιάζει η πρόβλεψη του Linux Counter για τον πραγματικό αριθμό χρηστών Linux. Με αναγωγή στα δεδομένα της Ελλάδας ο αριθμός των H/Y με
Linux κυμαίνεται μεταξύ των 10360 και 200000 μηχανημάτων!
Αριθμός Linux Users Groups (LUGs)
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ Αριθμός LUGs
Έτος
1996 0
1997 1
1998 3
1999 5
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Επίσημος σύλλογος: HELLUG (http://www.hellug.gr)
Τοπικά LUGs:
TheLUG (http://hal.csd.auth.gr/thelug)
PLUG (http://students.ceid.upatras.gr/ glavas/linux)
ALLUG (http://www.neta.gr/allug)
ThraceLUG (http://www.thracelug.gr)
Αρθρογράφοι του magaz
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ Αριθμός
Έτος
1998 4 (800 hits/month)
1999 10 (3500 hits/month)
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Άρθρα του RAM με εκτεταμένες αναφορές στο Linux
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ Αριθμός
Έτος
1997 0
1998 20 (περίπου)
1999 50 (περίπου)
2000 25 (περίπου - μέχρι Απρίλιο)
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Συνολικά Hits στον κόμβο του HELLUG σε 14 μήνες λειτουργίας: 1894265

336
content/articles/29/04_xbasic.md Κανονικό αρχείο

@ -0,0 +1,336 @@
+++
title = 'Xbasic'
date = '2000-12-01T00:00:00Z'
description = ''
author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)'
issue = ['Magaz 29']
issue_weight = 4
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Συναρτήσεις στην XBASIC.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Οι συναρτήσεις**
----------------------------------------------
**2. Παράδειγμα συνάρτησης.**
------------------------------------------------------
- [2.1 Επεξήγηση του προγράμματος](#ss2.1)
**3. Πως λειτουργούν οι συναρτήσεις**
--------------------------------------------------------------
- [3.1 Συναρτήσεις και δομημένος προγραμματισμός](#ss3.1)
- [3.2 Γιατί το να γράφουμε δομημένα με συναρτήσεις είναι σημαντικό;](#ss3.2)
- [3.3 Σχεδιάζοντας ένα δομημένο πρόγραμμα.](#ss3.3)
- [3.4 Γράφοντας μια συνάρτηση](#ss3.4)
- [3.5 Το εσωτερικό της συνάρτησης](#ss3.5)
- [3.6 Ο κώδικας των συναρτήσεων.](#ss3.6)
### [1. Οι συναρτήσεις]{#s1}
Οι συναρτήσεις είναι βασικό δομικό στοιχείο των προγραμμάτων στην Xbasic. Οι συναρτήσεις είναι ανεξάρτητα κομμάτια κώδικα που εκτελούν μια συγκεκριμένη εργασία
και μπορεί να επιστρέφουν κάποια τιμή στον κώδικα που τις καλεί.
Οι ιδιότητες των συναρτήσεων:
- **Έχουν μοναδικό όνομα.**\
Κάθε συνάρτηση έχει ένα μοναδικό όνομα. Η χρήση του ονόματος σε ένα άλλο μέρος του προγράμματος, επιτρέπει την εκτέλεση των εντολών που περιέχονται σε αυτή.
Αυτό ονομάζεται και κλήση της συνάρτησης. Μια συνάρτηση μπορεί να καλείται και μέσα από μια άλλη συνάρτηση.
- **Ο κώδικας που περιέχουν είναι ανεξάρτητος από το υπόλοιπο πρόγραμμα.**\
Όλες οι μεταβλητές που χρησιμοποιούνται δεν έχουν σχέση με τις μεταβλητές που μπορεί να έχουν το ίδιο όνομα και να υπάρχουν αλλού στο πρόγραμμα. Εξαίρεση
είναι οι μεταβλητές που εμείς ορίζουμε ότι θα έχουν σχέση με το υπόλοιπο πρόγραμμα όπως θα δούμε παρακάτω.
- **Μια συνάρτηση εκτελεί μια συγκεκριμένη εργασία.**\
Οι συναρτήσεις συνήθως χρησιμοποιούνται για να εκτελέσουμε συγκεκριμένες εργασίες που μπορεί να χρειαστεί να εκτελεστούν πολλές φορές μέσα σε ένα πρόγραμμα,
με διαφορετικά δεδομένα κάθε φορά.
- **Μια συνάρτηση μπορεί να επιστρέφει μια τιμή στον κώδικα που την καλεί.**\
Όταν το πρόγραμμά μας καλεί μια συνάρτηση, εκτελείται ο κώδικας της συνάρτησης και μπορούμε να έχουμε κάποια τιμή που επιστρέφει από την συνάρτηση σαν
αποτέλεσμα της εκτέλεσης του κώδικα.
### [2. Παράδειγμα συνάρτησης.]{#s2}
Παρακάτω ακολουθεί ένα παράδειγμα συνάρτησης στην XBASIC.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1.'
2.'
3.' ####################
4.' ##### PROLOG #####
5.' ####################
6.'
7.PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent
8.VERSION "0.0000" ' version number - increment before saving altered program
9.'
10.' You can stop the PDE from inserting the following PROLOG comment lines
11.' by removing them from the prolog.xxx file in your \xb\xxx directory.
12.'
13.' Programs contain: 1: PROLOG - no executable code - see below
14.' 2: Entry function - start execution at 1st declared func
15.' * = optional 3: Other functions - everything else - all other functions
16.'
17.' The PROLOG contains (in this order):
18.' * 1. Program name statement PROGRAM "progname"
19.' * 2. Version number statement VERSION "0.0000"
20.' * 3. Import library statements IMPORT "libName"
21.' * 4. Composite type definitions TYPE <typename> ... END TYPE
22.' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args)
23.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args)
24.' * 7. Shared constant definitions $$ConstantName = literal or constant
25.' * 8. Shared variable declarations SHARED variable
26.'
27.' ****** Comment libraries in/out as needed *****
28.'
29.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT...
30.' IMPORT "xcm" ' Complex library : complex number library (trig, etc)
31.' IMPORT "xst" ' Standard library : required by most programs
32.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs
33.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs
34.'
35.DECLARE FUNCTION Entry ()
36.DECLARE FUNCTION SLONG cube (SLONG x)
37.'
38.'
39.' ######################
40.' ##### Entry () #####
41.' ######################
42.'
43.' Programs contain:
44.' 1. A PROLOG with type/function/constant declarations.
45.' 2. This Entry() function where execution begins.
46.' 3. Zero or more additional functions.
47.'
48.FUNCTION Entry ()
49. SLONG inpu, answer
50. STRING inpus
51.
52. inpus=INLINE$("Enter number :")
53. inpu=SLONG(inpus)
54. answer = cube(inpu)
55. PRINT answer
56.
57.
58.
59.END FUNCTION
60.'
61.'
62.' #####################
63.' ##### cube () #####
64.' #####################
65.'
66.FUNCTION SLONG cube (SLONG x)
67.
68. x_cube = x * x * x
69.
70.END FUNCTION(x_cube)
71.END PROGRAM
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### [2.1 Επεξήγηση του προγράμματος]{#ss2.1}
Ας προσπαθήσουμε όμως να κάνουμε μια ανάλυση του παραπάνω προγράμματος. Έχουμε λοιπόν.
**Γραμμές 1..34**\
Εδώ έχουμε τους αρχικούς ορισμούς και το κομμάτι PROLOG όπως έχουμε αναλύσει και στα προηγούμενα τεύχη.
**Γραμμή 35**\
Εδώ έχουμε το ορισμό της συνάρτησης Entry() όπου αναλύοντας τον βλέπουμε ότι αυτή η συνάρτηση δεν έχει παράμετρο.
**Γραμμή 36**\
Σε αυτή την γραμμή ορίζεται η συνάρτηση cube και από τον ορισμό της βλέπουμε ότι αυτή η συνάρτηση είναι τύπου SLONG που σημαίνει ότι θα μας επιστρέψει κάποια
τιμή SLONG. Στην λίστα παραμέτρων (αυτή που υπάρχει ανάμεσα στις παρενθέσεις) βλέπουμε ότι η cube δέχεται σαν παράμετρο μια SLONG μεταβλητή για να κάνει τον
υπολογισμό. Στο παράδειγμά μας έχουμε ορίσει και την cube και την παράμετρό της ίδιου τύπου. Αυτό δεν είναι δεσμευτικό, μπορούμε να έχουμε μία ή και πολλές
παραμέτρους διαφορετικού τύπου από τον τύπο της οριζόμενης συνάρτησης.
**Γραμμές 48..55**\
Στην γραμμές 49 και 50 ορίζουμε τις μεταβλητές που θα χρησιμοποιηθούν μέσα στην Entry. Στην γραμμή 52 παίρνουμε την πληκτρολόγηση του χρήστη στην μεταβλητή
τύπου string inpus. Στην γραμμή 53 την μετατρέπουμε σε SLONG για να μπορεί να χρησιμοποιηθεί από την cube. Στην γραμμή 54 καλείται η συνάρτηση cube να κάνει τον
υπολογισμό και να επιστρέψει το αποτέλεσμα στην μεταβλητή answer.\
Στην γραμμή 55 εμφανίζουμε το αποτέλεσμα στο console window της Xbasic.
**Γραμμές 66..71**\
Εδώ βρίσκεται ο κώδικας της συνάρτησης cube. Στην γραμμή 66 υπάρχει ο ορισμός των παραμέτρων και στην συνέχεια έχουμε τον κώδικα υπολογισμού. Σε αυτή την
συνάρτηση έχουμε απλά το υπολογισμό του κύβου (ύψωση στην τρίτη δύναμη) της παραμέτρου x, που βρίσκεται στην γραμμή 68. Στην γραμμή 70, η τοποθέτηση του
αποτελέσματος σε παρένθεση κάνει την Xbasic να δώσει την τιμή αυτή σαν αποτέλεσμα υπολογισμού στην συνάρτηση cube και να το επιστρέψει στην μεταβλητή που
χρησιμοποιήσαμε για την κλήση της, την answer.
Με αυτό το απλό παράδειγμα φαίνεται πόσο χρήσιμο είναι να χρησιμοποιούμε συναρτήσεις, εφόσον αν ξαναχρειαστούμε μέσα στο πρόγραμμα να υπολογίσουμε τον κύβο ενός
αριθμού δεν έχουμε παρά να καλέσουμε την συνάρτηση.
Π.χ.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
SLONG x1,x2
x1 = 10
x2 = cube(x1)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### [3. Πως λειτουργούν οι συναρτήσεις]{#s3}
Ένα πρόγραμμα Xbasic δεν εκτελεί τις εντολές που βρίσκονται σε μια συνάρτηση μέχρι η συνάρτηση να κληθεί από ένα άλλο μέρος του προγράμματος. Όταν η συνάρτηση
κληθεί, τότε το πρόγραμμα στέλνει τις παραμέτρους (αν υπάρχουν) στην συνάρτηση. Η παράμετρος είναι κάποια μεταβλητή που περιέχει πληροφορία που είναι απαραίτητη
για την εκτέλεση του κώδικα της συνάρτησης. Στην συνέχεια εκτελούνται οι εντολές που περιέχονται στην συνάρτηση εκτελώντας την επιθυμητή εργασία. Όταν τελειώσει
η εκτέλεση του κώδικα της συνάρτησης η εκτέλεση συνεχίζεται στην αμέσως επόμενη εντολή μετά την κλήση της συνάρτησης. Οι συναρτήσεις μπορεί να επιστρέφουν
κάποια τιμή στο πρόγραμμα που τις κάλεσε.
### [3.1 Συναρτήσεις και δομημένος προγραμματισμός]{#ss3.1}
Χρησιμοποιώντας τις συναρτήσεις δημιουργούμε ένα πρόγραμμα που είναι πολύ πιο εύκολο να αναπτυχθεί και να διορθωθεί εκ των υστέρων. Αυτός ο τρόπος συγγραφής
προγράμματος ονομάζεται δομημένος προγραμματισμός.
### [3.2 Γιατί το να γράφουμε δομημένα με συναρτήσεις είναι σημαντικό;]{#ss3.2}
Είναι πολύ ευκολότερο να προγραμματίζουμε δομημένα γιατί αυτός ο τρόπος προγραμματισμού μας επιτρέπει να αντιμετωπίσουμε το περίπλοκα προβλήματα διαιρώντας τα
σε πολλά απλά μικρά. Κάθε μικρό πρόβλημα αντιμετωπίζεται με την δική του συνάρτηση όπου οι μεταβλητές είναι απομονωμένες από το υπόλοιπα πρόγραμμα εκτός από τις
παραμέτρους και την τιμή επιστροφής. Έτσι η επίλυση μικρών προβλημάτων ένα κάθε φορά μας επιτρέπει να αναπτύξουμε με μεγαλύτερη ευκολία την εφαρμογή μας.
Είναι πολύ ευκολότερο να βρίσκουμε τα λάθη σε ένα δομημένο πρόγραμμα. Αν υπάρχει κάποιο λάθος, αυτό μπορεί να περιοριστεί στην αντίστοιχη συνάρτηση και να
επιλυθεί. Δεν μπορούμε να το συγκρίνουμε με το πόσο επίπονο θα είναι να ψάχνουμε σε ένα κατεβατό από πολλές γραμμές κώδικα για να εντοπίσουμε το λάθος.
Ένα πραγματικό πλεονέκτημα των συναρτήσεων είναι ότι αφού γράψουμε μια συνάρτηση για να λύσουμε ένα επιμέρους πρόβλημα τότε αυτή η συνάρτηση είναι διαθέσιμη να
χρησιμοποιηθεί ξανά, είτε στο τρέχον πρόγραμμα που γράφουμε, είτε σε κάποιο άλλο μεταγενέστερο. Ακόμα και αν οι ανάγκες του επόμενου προγράμματος είναι λίγο
διαφορετικές, είναι πιο απλό να αλλάξουμε λίγο τις εντολές μιας συνάρτησης, παρά να την ξαναγράψουμε από την αρχή.
### [3.3 Σχεδιάζοντας ένα δομημένο πρόγραμμα.]{#ss3.3}
Αν θέλετε να σχεδιάσετε ένα δομημένο πρόγραμμα πρέπει πρώτα να κάνετε ένα σχέδιο των λειτουργιών του προγράμματος. Αυτό πρέπει να γίνει πριν ακόμη αρχίζουμε να
γράφουμε κάποια γραμμή κώδικα. Είναι ανάγκη να ορισθούν οι λειτουργίες του προγράμματος. Παρακάτω θα δούμε ένα παράδειγμα στησίματος ενός δομημένου
προγράμματος. Ας πούμε λοιπό ότι ένα πρόγραμμα θα εκτελεί τις εργασίες:
- Εισαγωγή νέων ονομάτων και διευθύνσεων
- Διόρθωση των στοιχείων που ήδη υπάρχουν
- Ταξινόμηση στοιχείων κατά όνομα
- Εκτύπωση ετικετών
Με αυτόν τον κατάλογο εργασιών μπορούμε τώρα να αναλύσουμε κάθε εργασία στις επιμέρους για να ξεκινήσουμε να γράφουμε τον κώδικα. Ας ξεκινήσουμε με το
\"Εισαγωγή νέων ονομάτων και διευθύνσεων\"
- Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο
- 'νοιγμα πεδίων στην οθόνη για την καταχώρηση νέων στοιχείων
- Προσθήκη νέων στοιχείων στον κατάλογο των ονομάτων
- Φύλαξη όλου του καταλόγου
Το \"Διόρθωση των στοιχείων που ήδη υπάρχουν\" αναλύεται σε:
- Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο
- 'νοιγμα πεδίων στην οθόνη για την διόρθωση των στοιχείων
- Φύλαξη όλου του καταλόγου
Θα παρατηρήσατε ότι και στις δύο περιπτώσεις υπάρχουν δύο κοινές λειτουργίες, η \"Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο\" και η \"Φύλαξη όλου του
καταλόγου\". Εδώ φαίνεται καθαρά η οικονομία χρόνου που μπορεί να έχουμε με την χρήση των συναρτήσεων. Θα γράψουμε δύο συναρτήσεις για αυτές τις δύο λειτουργίες
και θα τις χρησιμοποιήσουμε την κάθε μια, δύο φορές μέσα στο πρόγραμμά μας. Αυτή η μέθοδος δίνει ιεραρχική δομή στον κώδικα του προγράμματός μας.
Αν ακολουθήσουμε την μέθοδο της αντιμετώπισης ενός προβλήματος διαιρώντας το σε περισσότερα μικρότερα δημιουργούμε ευανάγνωστα και εύκολα στην διόρθωση
προγράμματα. Έτσι θα δείτε πολλά προγράμματα Xbasic να έχουν ένα πολύ μικρό κομμάτι εκτελέσιμου κώδικα στην Entry(), και όλες οι λειτουργίες να γίνονται με
συναρτήσεις. Αποφεύγετε να γράφετε μεγάλες συναρτήσεις γιατί χάνονται τα πλεονεκτήματα της χρήσης τους. Επίσης σε ομάδες προγραμματιστών που ο κάθε ένας έχει
αναλάβει να γράψει κώδικα για διαφορετικό κομμάτι της εφαρμογής οι συναρτήσεις επιτρέπουν να μην γράφεται πολλές φορές (κάθε φορά από διαφορετικό
προγραμματιστή) κώδικας, που εκτελεί την ίδια λειτουργία. Συνήθως η συνάρτηση γράφεται από έναν και είναι διαθέσιμη σε όλους.
### [3.4 Γράφοντας μια συνάρτηση]{#ss3.4}
Εδώ θα δούμε λίγο πιο αναλυτικά αυτά που είδαμε παραπάνω στο παράδειγμά μας.
Το πρώτο βήμα για να γράψουμε μια συνάρτηση είναι να έχουμε αποφασίσει τι θα κάνει. Όταν ξέρουμε τι θέλουμε να κάνει η συνάρτηση, είναι σχετικά εύκολο να την
γράψουμε. Στην πρώτη γραμμή της συνάρτησης, ορίζονται:
- Το όνομά της
- Ο τύπος της συνάρτησης
- Η λίστα παραμέτρων (αν χρειάζεται)
Στο παράδειγμά μας, στην γραμμή 66 έχουμε: `FUNCTION SLONG cube (SLONG x)`
Αναλύοντας αυτή την γραμμή έχουμε:
- Την εντολή `FUNCTION` που δηλώνει ότι ξεκινά από εδώ και πέρα κώδικας που ανήκει σε συνάρτηση και οι μεταβλητές που θα βρεθούν δεν έχουν σχέση με τυχόν
ίδιου ονόματος σε άλλα σημεία του προγράμματος.
- Τον τύπο `SLONG` που σημαίνει ότι αυτή η συνάρτηση θα επιστρέψει τιμή τύπου `SLONG`. Ο τύπος της συνάρτησης μπορεί να είναι οποιοσδήποτε από τους τύπους
μεταβλητών της Xbasic που έχουμε αναφέρει σε προηγούμενα άρθρα.\
Ετσι οι ορισμοί:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
FUNCTION STRING retstr ..
FUNCTION SSHORT test .
----------------------------------------------------------------------------------------------------------------------------------------------------------------
ορίζουν συναρτήσεις τύπου `STRING` και `SSHORT` αντίστοιχα.
- Το όνομα της συνάρτησης που είναι το `cube`. Τα ονόματα των συναρτήσεων ακολουθούν του ίδιους κανόνες με τα ονόματα των μεταβλητών που έχουμε αναφέρει.
- Τις παραμέτρους της συνάρτησης.
Πολλές συναρτήσεις χρησιμοποιούν παραμέτρους που οι τιμές τους είναι απαραίτητα στοιχεία για εκτελέσουν κάποιο υπολογισμό. Για κάθε παράμετρο που μεταφέρει
κάποια τιμή στην συνάρτηση η λίστα παραμέτρων πρέπει να έχει έναν ορισμό. Αυτός ο ορισμός δηλώνει τον τύπο της μεταβλητής που φέρνει τα δεδομένα και ένα όνομα
που με αυτό αντιστοιχείται η τιμή αυτή μέσα στην συνάρτηση.
Στην cube έχουμε την λίστα παραμέτρων (`SLONG x`). Με αυτόν τον τρόπο δηλώνουμε ότι, όταν κληθεί αυτή η συνάρτηση, θα μας έρθει
μια τιμή από το πρόγραμμα που την καλεί και από δώ και πέρα μέσα στην συνάρτηση αναφέρεται με το όνομα x. Στο παράδειγμά μας με την κλήση της συνάρτησης cube η
τιμή της μεταβλητής inpu περνάει στην συνάρτηση, και από δω και πέρα η τιμή αυτή εκπροσωπείται από την μεταβλητή x.
Για να δούμε ξεκάθαρα την ευκολία που μας παρέχει η χρήση των συναρτήσεων θα κάνουμε διαδοχική κλήση της ίδιας συνάρτησης με άλλες παραμέτρους κάθε φορά.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
FUNCTION Entry()
SLONG num1
SLONG num2
SLONG z
num1 = 8
num2 = 10
z = cube(num1)
PRINT z
z = cube(num2)
PRINT z
END FUNCTION
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Αν αντικαταστήσουμε την Entry() στο παράδειγμά μας με τις παραπάνω γραμμές, τότε το αποτέλεσμα του προγράμματος στην κονσόλα θα δείξει:
`512`\
`1000`
Έτσι γράφοντας μια φορά την cube μπορούμε να έχουμε τον υπολογισμό του κύβου αριθμού με διαφορετικά δεδομένα κάθε φορά, και το αντίστοιχο αποτέλεσμα.
### [3.5 Το εσωτερικό της συνάρτησης]{#ss3.5}
Μπορούν να ορισθούν μεταβλητές στο εσωτερικό μιας συνάρτησης. Οι μεταβλητές αυτές ονομάζονται τοπικές. Ο όρος τοπικές σημαίνει ότι οι μεταβλητές αυτές ανήκουν
στην συνάρτηση και δεν έχουν καμμία σχέση με μεταβλητές ίδιου ονόματος σε άλλα σημεία του προγράμματος. Εννοείται ότι ακολουθούνται οι κανόνες ονοματολογίας των
μεταβλητών στην Xbasic. Συνοψίζοντας την χρήση των μεταβλητών στις συναρτήσεις της Xbasic έχουμε:
- Τοπικές μεταβλητές\
Ορίζονται στην συνάρτηση και δεν έχουν καμμία σχέση με άλλες μεταβλητές αλλού στο πρόγραμμα.
- Παράμετροι\
Αυτές οι μεταβλητές μεταφέρουν δεδομένα από το πρόγραμμα που τις καλεί, για να χρησιμοποιηθούν σε υπολογισμούς.
- Επιστρεφόμενη τιμή\
Για να μπορεί το πρόγραμμα που καλεί την συνάρτηση να πάρει ένα αποτέλεσμα του υπολογισμού της, πρέπει να ορισθεί μια τιμή επιστροφής. Αυτή ορίζεται είτε με
την τοποθέτηση της μεταβλητής που περιέχει την επιστρεφόμενη τιμή δίπλα στην εντολή END FUNCTION μέσα σε παρένθεση, είτε με τοποθέτηση μέσα στην συνάρτηση
μιας από τις δύο εντολές (RETURN ή EXIT FUNCTION) και δίπλα, σε παρένθεση, την μεταβλητή με την τιμή επιστροφής.
### [3.6 Ο κώδικας των συναρτήσεων.]{#ss3.6}
Συνήθως ο κώδικας των συναρτήσεων ακολουθεί τον κώδικα της συνάρτησης ENTRY () μέσα στο ίδιο αρχείο που περιέχεται όλο το πρόγραμμα. Σε πολύπλοκα προγράμματα
όμως, όπου αρκετοί προγραμματιστές ασχολούνται με το ίδιο θέμα, είναι καλύτερα οι συναρτήσεις να μπαίνουν σε ξεχωριστό αρχείο ή και σε πολλά αρχεία ανάλογα με
τις ανάγκες της εφαρμογής. Έτσι μπορεί να έχουμε σε ένα αρχείο όλες τις συναρτήσεις που έχουν σχέση με την αποθήκευση στον δίσκο, σε άλλο τα γραφικά, σε άλλο οι
μαθηματικοί υπολογισμοί κλπ. Έτσι δημιουργούνται οι βιβλιοθήκες συναρτήσεων, όπου ο κάθε προγραμματιστής μπορεί να τις συντηρεί (διορθώνει, βελτιώνει) και αυτές
να είναι διαθέσιμες σε όλους τους άλλους.
Κλείνοντας το κεφάλαιο των συναρτήσεων θέλω να τονίσω ότι η διαφορά στον τρόπο προγραμματισμού με συναρτήσεις και χωρίς αυτές, είναι τόσο μεγάλη που πια σήμερα
κανείς δεν γράφει προγράμματα που να μην έχουν συναρτήσεις. Όταν εγώ ξεκίνησα να γράφω, οι γλώσσες που χρησιμοποιούσα τότε, δεν είχαν την δυνατότητα δημιουργίας
συναρτήσεων και πάρα πολλά λάθη είχαν εμφανισθεί λόγω της χρήσης ίδιων ονομάτων μεταβλητών σε διαφορετικά σημεία του προγράμματος. Η δε απομόνωση του σημείου
του κώδικα που περιείχε το λάθος ήταν εξαιρετικά επίπονη. Με την χρήση συναρτήσεων ο χρόνος εντοπισμού των σφαλμάτων περιορίστηκε σε κάτω από τον μισό. Στην
συνέχεια θα δούμε τις εντολές ελέγχου της ροής του προγράμματος στην Xbasic.

197
content/articles/29/05_bash.md Κανονικό αρχείο

@ -0,0 +1,197 @@
+++
title = 'Απλός χειρισμός Bash'
date = '2000-09-01T00:00:00Z'
description = ''
author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)'
issue = ['Magaz 29']
issue_weight = 5
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Το standard shell του Linux είναι το bash, γι αυτό, ας μάθουμε μερικά πράγματα για αυτό.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Το Bash είναι ένα shell που χρησιμοποιείται ως standard στο Linux και υπάρχει διαθέσιμο και σαν πηγαίος κώδικας για να προστεθεί σε οποιoδήποτε Unix θέλετε.
Είναι ένα POSIX-compliant shell και βασικά πρόκειται για μια μετεξέλιξη του shell (sh) συνδυάζοντας τα καλύτερα στοιχεία των C-shell (csh) και Korn-shel (ksh).\
Το bash υποστηρίζει command-line editing, substitution, filename completion, προχωρημένες δυνατότητες scripting κλπ. Το bash υποστηρίζει βέβαια και
wildcharacters ή χαρακτήρες-μπαλαντέρ (? για αντικατάσταση ενός χαρακτήρα και \* για αντικατάσταση απεριόριστων χαρακτήρων, `[ ]`
για καθορισμό εύρους τιμών κλπ. Σε κάθε περίπτωση, αυτό το κείμενο δεν μπορεί παρά να κάνει μία απλή εισαγωγή, και για περισσότερες πληροφορίες που θα οδηγούσαν
στην πλήρη εκμετάλλευση των δυνατοτήτων του bash, ο αναγνώστης πρέπει να διαβάσει το manual του bash (man bash).
**1. Μεταβλητές**
----------------------------------------
**2. Ανακατεύθυνση**
-------------------------------------------
**3. Έξοδος λογικής έκφρασης: test**
-----------------------------------------------------------
**4. Έλεγχοι ροής**
------------------------------------------
**5. Επαναληπτικοί βρόγχοι**
---------------------------------------------------
### [1. Μεταβλητές]{#s1}
Οι μεταβλητές (βασικό στοιχείο σε κάθε πρόγραμμα) στο bash δεν είναι προκαθορισμένου τύπου, μπορεί δηλαδή η ίδια μεταβλητή να έχει αριθμητική τιμή, ή τιμή
κειμένου (string) κλπ χωρίς να το προδηλώσουμε πουθενά (αν και για το bash όλες οι μεταβλητές είναι strings, με την χρήση της eval μπορούμε να κάνουμε και
αριθμητικές πράξεις αν τα strings αποτελούνται μόνο από αριθμούς). Οι μεταβλητές ορίζονται με απλή τοποθέτηση (assignment, π.χ. var=1) και προσπελαύνονται
βάζοντας μπροστά από το όνομά τους το σύμβολο \$. Αν η τιμή μίας μεταβλητής εσωκλείεται σε διπλά εισαγωγικά \"\", τότε το bash αγνοεί οποιαδήποτε κενά
βρίσκονται εκεί. Αν δεν τα αγνοούσε, η τιμή της μεταβλητής θα ήταν οτιδήποτε υπάρχει μέχρι το πρώτο κενό. Ότι ήταν μετά το κενό θα θεωρούνταν ως τιμή της
δεύτερης μεταβλητής, κάτι το οποίο έχει ιδιαίτερο νόημα για παραμέτρους που δίνονται από την γραμμή εντολών κατά την κλήση του προγράμματος. Αν εσωκλείεται σε
ανάποδα μονά εισαγωγικά \`, τότε εννοείται ότι πρόκειται περί εντολής, η οποία θα εκτελεστεί και το αποτέλεσμα της εντολής θα αποτελεί την τιμή της μεταβλητής.
Το bash χρησιμοποιεί κάποιες προκαθορισμένες μεταβλητές για τα διάφορα \"προγραμματάκια\" που μπορούμε να φτιάξουμε. Αυτές είναι οι:
- \$\# Ο αριθμός των παραμέτρων που δώσαμε στην γραμμή εντολών.
- \$0 Η πρώτη λέξη της κληθείσας εντολής (πρακτικά δηλαδή το όνομα του προγράμματος).
- \$1 - \$N Οι παράμετροι που δώσαμε στην γραμμή εντολών (όπου \$1 η πρώτη παράμετρος, και N ίσο με το \$\#).
- \$@ Φυλάσσει το σύνολο των παραμέτρων της γραμμής εντολών (δηλαδή από \$1 μέχρι \$N όπως ακριβώς τις γράψαμε.) σε μορφή πίνακα (array).
- \$\* Φυλάσσει το σύνολο των παραμέτρων της γραμμής εντολών (δηλαδή από \$1 μέχρι \$N όπως ακριβώς τις γράψαμε) σε μία μεταβλητή (μία και μόνη, τύπου
string).
- \$? Σε αυτή τη μεταβλητή φυλάσσεται το αποτέλεσμα εξόδου της προηγούμενης εντολής.
### [2. Ανακατεύθυνση]{#s2}
Το bash υποστηρίζει όπως θα ήταν ίσως αναμενόμενο, ανακατεύθυνση των τριών βασικών file descriptors, δηλαδή των standard input, standard output και standard
error (αντίστοιχα 0, 1 και 2). Η ανακατεύθυνση της εισόδου γίνεται με το σύμβολο \<, και η ανακατεύθυνση εξόδου (και εξόδου λάθους) με το σύμβολο \> γράφοντας
και τον αριθμό του file descriptor. Δηλαδή η έκφραση command 1\> output θα ανακατευθύνει την κανονική έξοδο στο αρχείο output (και είναι ισοδύναμη με την
command \> output) ενώ η έκφραση command 2\> error θα ανακατευθύνει την έξοδο λάθους στο αρχείο error. Για να ανακατευθύνουμε και την κανονική έξοδο, αλλά και
την έξοδο λάθους σε ένα αρχείο, μπορούμε να χρησιμοποιήσουμε οποιαδήποτε από τις ακόλουθες εκφράσεις:
`command &> out, command >& out, command 2>&1 out`
Τέλος, το bash υποστηρίζει και piping, να ανακατευθύνει δηλαδή την έξοδο μίας εντολής, στην είσοδο μίας άλλης εντολής, με το σύμβολο \|.
### [3. Έξοδος λογικής έκφρασης: test]{#s3}
Όποτε θέλουμε να ελέγξουμε το αποτέλεσμα μίας λογικής ή αριθμητικής έκφρασης χρησιμοποιούμε τη συνάρτηση test. Η συνάρτηση test επιστρέφει τιμή \"αληθής\" ή
\"ψευδής\" ανάλογα με το αληθές ή ψευδές της λογικής (ή και αριθμητικής) έκφρασης που ελέγχεται. H συνάρτηση test μπορεί να γραφεί και ώς `[ έλεγχος ]` . Η
έκφραση μπορεί να έχει ένα μόνο στοιχείο και έναν τελεστή (ο οποίος έτσι ονομάζεται unary operator) ή μπορεί να έχει δύο στοιχεία και έναν τελεστή ο οποίος
ονομάζεται binary operator. Πιο πολλές πληροφορίες από το manual page της συνάρτησης test το οποίο μπορείτε να δείτε γράφοντας man test
Οι πιο συνηθισμένοι τελεστές:
- `test [ 1 -eq 2 ]`\
Η ανωτέρω έκφραση είναι ψευδής γιατί ο (αριθμητικός) τελεστής -eq σημαίνει ισότητα (equal). Άλλοι αριθμητικοί τελεστές είναι οι:
1. -gt ο αριθμός αριστερά είναι μεγαλύτερος από τον αριθμό δεξιά (greater than).
2. -lt ο αριθμός δεξιά είναι μικρότερος από τον αριθμό αριστερά (less than).
3. -ne οι δύο αριθμοί δεν είναι ίσοι (not equal).
4. -ge ο αριθμός αριστερά είναι μεγαλύτερος ή ίσος από τον αριθμό δεξιά (greater or equal).
5. -le ο αριθμός αριστερά είναι μικρότερος ή ίσος από τον αριθμό δεξιά (less or equal).
- `test [ like = likme ]`\
Η ανωτέρω έκφραση είναι ψευδής γιατί ο (λογικός) τελεστής = σημαίνει ότι τα δύο strings που συγκρίνουμε είναι ίσα (ίδια). Άλλοι λογικοί τελεστές σχετικοί με
strings είναι οι:
1. != ο οποίος προφανώς επιστρέφει \"αληθές\" όταν τα δύο strings που συγκρίνουμε είναι ανόμοια.
2. -z ο οποίος είναι unary operator (συντάσσεται δηλαδή ως εξής: `test [ -z string ]`) επιστρέφει \"αληθές\" αν το μήκος του string είναι μηδενικό.
3. -n που είναι και αυτός unary operator (συντάσσεται δηλαδή ως εξής: `test [ -n string ]`) επιστρέφει \"αληθές\" αν το μήκος του string δεν είναι
μηδενικό.
- `test [ -e filename ]`\
Η ανωτέρω έκφραση βγαίνει αληθής όταν το αρχείο με όνομα filename υπάρχει. Άλλοι τελεστές ελέγχου της κατάστασης ενός αρχείου είναι οι εξής (όλοι όσοι
αναφέρονται εδώ είναι unary operators):
1. -b αν το αρχείο υπάρχει και είναι block device
2. -c αν το αρχείο υπάρχει και είναι character device
3. -d αν το αρχείο υπάρχει και είναι directory
4. -f αν το αρχείο υπάρχει και είναι κανονικό αρχείο
5. -r αν το αρχείο υπάρχει και μπορεί να διαβαστεί
6. -s αν το αρχείο υπάρχει και το μέγεθος του δεν είναι μηδέν
7. -w αν το αρχείο υπάρχει και μπορεί να γραφτεί
8. -x αν το αρχείο υπάρχει και μπορεί να εκτελεστεί
### [4. Έλεγχοι ροής]{#s4}
- if - then - else
Ένας τρόπος και ο πιο συνηθισμένος ελέγχου ροής ενός προγράμματος είναι ο έλεγχος if-then-else όπου ελέγχουμε το αποτέλεσμα μίας λογικής έκφρασης και
ανάλογα με αυτό το αποτέλεσμα καθορίζουμε τι θα κάνει το πρόγραμμα. Προφανώς ο έλεγχος χρησιμοποιεί το αποτέλεσμα της συνάρτησης test για να καθορίσει την
ροή. Για παράδειγμα
----------------------------------------------------------------------------------------------------------------------------------------------------------------
if [ $i -eq 3 ]; then
echo 'Number is 3';
elif [ $i -eq 2 ]; then
echo 'Number is 2';
else echo 'Number is neither 3 nor 2';
fi
----------------------------------------------------------------------------------------------------------------------------------------------------------------
όπου είναι προφανές ότι κάπου στο πρόγραμμά μας έχουμε δώσει τιμή στην παράμετρο \$i. Μπορούμε να έχουμε όσα elif θέλουμε, αρκεί στο τέλος να υπάρχει και
ένα else. Αν δεν υπάρχει κανέναν elif δεν είναι υποχρεωτικό και το else, είναι όμως σε κάθε περίπτωση υποχρεωτικό το fi.
- select
Η συνάρτηση select δουλεύει (και συντάσσεται) όπως η if αλλά δίνει τη δυνατότητα να δημιουργήσουμε menu. Για παράδειγμα
----------------------------------------------------------------------------------------------------------------------------------------------------------------
select i in a.txt b.txt c.txt; do
cat $i;
done
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Το ανωτέρω παράδειγμα παρουσιάζει στον χρήστη ένα menu με τρεις επιλογές και ανάλογα με την επιλογή του χρήστη, του εμφανίζει το αντίστοιχο αρχείο στην
οθόνη.
- case
Η συνάρτηση case τέλος, προσομοιάζει στην αντίστοιχη συνάρτηση της C και σαν σύνταξη, αλλά και σαν αποτέλεσμα, και συγκεκριμένα εκτελεί προκαθορισμένες
εντολές για προκαθορισμένες τιμές μίας μεταβλητής, έχοντας ταυτόχρονα και μία γενική περίπτωση που δεν εμπίπτει στις υπόλοιπες. Για παράδειγμα
----------------------------------------------------------------------------------------------------------------------------------------------------------------
case $i in
1 | 3 | 5 | 7 | 9) echo -n "Odd one-digit number";;
0 | 2 | 4 | 6 | 8) echo -n "Even one-digit number";;
*) echo -n "It definitely is not a one-digit nummber";;
esac
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Το ανωτέρω παράδειγμα ελέχει την μεταβλητή \$i που υποτίθεται ότι κάπου πιο πριν την έχουμε δώσει, και μας απαντάει αν είναι μονός ή ζυγός μονοψήφιος
αριθμός, ή όχι.
### [5. Επαναληπτικοί βρόγχοι]{#s5}
- for - do
Ο βρόγχος for - do είναι ο πιο συνηθισμένος σε όλες τις γλώσσες προγραμματισμού. Η χρήση του είναι απλούστατη ειδικά στο bash όπου \\textbf{δεν μπορούμε να
ορίσουμε πεδίο τιμών, αντ\' αυτού είμαστε υποχρεωμένοι να ορίζουμε τις τιμές μία μία, ακόμα και αν αυτές είναι κατά κάποια έννοια συνεχόμενες. Ένα
παράδειγμα είναι το απλούστατο:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
for i in 1 3 5 ; do
echo $i;
done
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Το πεδίο τιμών της μεταβλητής \$i δεν αποτελείται υποχρεωτικά από αριθμούς αλλά μπορεί να είναι και λέξεις ή γράμματα, ή ακόμα και wildcharacters (\* και ?)
κάνοντας έτσι αυτό τον βρόγχο ένα πανίσχυρο εργαλείο.
- while - do Η συνάρτηση while εκτελεί κάποιες εντολές όσο μία λογική έκφραση είναι αληθής. Το κλασικότερο παράδειγμα είναι η δημιουργία ενός επαναληπτικού
βρόγχου, ως εξής:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
while [ $i -lt 10 ]; do
read i;
echo $i;
done
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Προφανώς το παράδειγμα αυτό θα μας εμφανίζει συνέχεια ότι του γράφουμε μέχρι να δώσουμε ένα αριθμό μεγαλύτερο (ή ίσο) του 10. Προσοχή χρειάζεται εδώ, γιατί
στο πρόγραμμά μας η μεταβλητή \$i πρέπει να έχει τιμή πριν κληθεί η while.