Προς το περιεχόμενο

Script σε Linux


Net@kii

Προτεινόμενες αναρτήσεις

Είναι η πρωτη χρονια που κάνω linux και μπορς να πω πως με εχει δυσκολεψει. Έχω να παραδωσω μια εργασία στην οποία πρεπει να σχολιασω ένα script και δεν καταλαβαίνω τι κανει...Το μόνο πού έπιασα είναι ότι διαβάζει ASCII και τα ματατρέπει σε HTML.Το script είναι το παρακάτω:

 

 

PN=`basename "$0"` # Program name

VER='1.2'

 

Usage () {

echo >&2 "$PN - fmtlinks - create HTML links, $VER

usage: $PN [file ...]"

exit 1

}

 

Msg () {

for MsgLine

do echo "$PN: $MsgLine" >&2

done

}

 

Fatal () { Msg "$@"; exit 1; }

 

set -- `getopt h "$@"` || Usage

[ $# -lt 1 ] && Usage # "getopt" detected an error

 

while [ $# -gt 0 ]

do

case "$1" in

# your flags here

--) shift; break;;

-h) Usage;;

-*) Usage;;

*) break;; # First file name

esac

shift

done

 

exec sed -e 's|\(http:[^ <>()][^ <>()]*\)|<a href="\1">\1</a>|g' \

-e 's|\(ftp:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|\(telnet:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|\(gopher:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|\(news:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|\(nntp:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|\(wais:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|\(file:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|\(prospero:\([^ <>()][^ <>()]*\)\)|<a href="\1">\2</a>|g' \

-e 's|mailto:||g' \

-e 's|\([^ @:][^ @:]*@[^ @:][^ @:]*\)|<a href="mailto:\1">\1</a>|g' \

"$@"

 

Θα εκτιμούσα πολύ τη βοηθειά σας...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για να καταλάβεις το script χρειάζεται να διαβάσεις:

 

  • Τι κάνουν και τι παραμέτρους δέχονται οι εντολές:
     
    >basename, echo, exit, set, shift, sed, exec


     

  • Πώς ορίζονται και καλούνται μεταβλητές και συναρτήσεις
  • Πώς συντάσσονται (και τι κάνουν) οι for και οι while loops
  • Κάποιους ειδικούς συμβολισμούς, operators και μεταβλητές, που υπάρχουν στο shell π.χ.:
    • $1 : μεταβλητή που κρατά αυτόματα την τιμή της πρώτης παραμέτρου που δίνεται κατά την εκτέλεση από την γραμμή εντολών
    • > : operator ανακατεύθυνσης της εξόδου
    • &2 : έτσι συμβολίζεται ο file descriptor του stderr
    • -gt / -lt: operators σύγκρισης (greater/less than)

    [*] τις έννοιες του exit status και των standard streams

    [*] Regular expressions

 

Δες τις man pages των εντολών, κάνε μια αναζήτηση για παραδείγματα, πειραματίσου λίγο για να καταλάβεις τη χρήση τους και ό,τι σε δυσκολέψει εδώ είμαστε :)

 

Επίσης κάποιες εξηγήσεις και χρήσιμες παραπομπές θα βρεις στα παρακάτω:

http://foss.ntua.gr/wiki/index.php/Linux_Basics#Documentation

http://foss.ntua.gr/wiki/index.php/Linux_Basics#.CE.97_.CE.B4.CE.BF.CE.BC.CE.AE_.CF.84.CE.BF.CF.85_Shell

 

Hint: Όλη η ουσιαστική δουλειά γίνεται από την sed, η οποία αντικαθιστά κάποια strings με κάποια άλλα strings, τα οποία περιέχουν HTML tags.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισης παιξε μαζι του...

 

πχ

>
oneiro:~/tst> ./txt2html.sh -h
txt2html.sh - fmtlinks - create HTML links, 1.2
usage: txt2html.sh [file ...]

 

>
oneiro:~/tst> cat input.txt 
http://www.insomnia.gr
mailto:[email protected]
ftp://my.ftp.net

 

>oneiro:~/tst> ./txt2html.sh input.txt 
<a href="http://www.insomnia.gr">http://www.insomnia.gr</a>
<a href="mailto:[email protected]">[email protected]</a>
<a href="ftp://my.ftp.net">//my.ftp.net</a>

 

οπως βλεπεις παιρνει τα περιεχομενα του input.txt και τα μετατρεπει σε html links... (οπως λεει!!!)

 

easy...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters

 

Δηλαδή:

 

$#: μεταβλητή που έχει για τιμή τον αριθμό των παραμέτρων που δίνει ο χρήστης κατά την εκτέλεση του script από command line (π.χ. αν τρέξεις "./script ena 2 tre", θα έχει την τιμή "3").

 

$@: επίσης μεταβλητή, που έχει για τιμή όλες τις παραμέτρους με τη σειρά (π.χ. αν τρέξεις "./script ena 2 tre", θα έχει την τιμή "ena 2 tre")

 

$1: επίσης μεταβλητή, που έχει για τιμή την πρώτη παράμετρο (π.χ. αν τρέξεις "./script ena 2 tre", θα έχει την τιμή "ena")

 

Αυτό μπορείς να το δεις στην πράξη φτιάχνοντας ένα απλό script test.sh με περιεχόμενο:

 

>#!/bin/sh

echo $#
echo $@
echo $1

 

$ chmod a+x test.sh

$ ./test.sh ena 2 tre

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

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

  • Δημιουργία νέου...