Μερικές ακόμα διευκρινήσεις.
Πράγματι το fi κλείνει κάθε if statement.
Στη δεύτερη απάντηση, όχι το σκριπτάκι θα σου κάνει το το file-01.jpg file035.jpg και αυτό γιατί έχεις βάλει μια παύλα. Προυπόθεση σου είπα είναι να τελιώνουν τα αρχεία σε τριψήφια κατάληξη, μια τελεία και τριψήφιο αριθμό. Γιατί για να κρατήσω ποιο απλό το σκριπτ, δεν ψάχνει να βρει που και πόσο μεγάλη είναι η αρίθμηση, αλλά σβήνει τα τελευταία 7 ψηφία και σε ότι μένει κοτσάρει ένα καινούργιο αριθμό και .jpg . Αν του δώσεις .png πάλι .jpg θα τα μετονομάσει καθότι το έφτιαξα επί της περιπτώσεως.
Μπορούν όμως αρκετά εύκολανα γίνουν μικροαλλαγές για να προσαρμόσεις το σκριπτ στα παραπάνω σενάρια.
Αν στο "${file:0:-7}$i".jpg στην προτελευταία γραμμή του κώδικα αλλάξεις το 7 σε 6 (προσοχή να παραμείνει το - μπροστά) θα σβήνει μόνο τους 6 τελευταίους χαρακτήρες και έτσι θα δουλέυει και με αρχεία αριθμημένα με 2 ψηφεία. Αν τα αρχεία σου αντί για .jpg είναι .png και θα ήθελες να παραμείνουν .png απλά στην ιδια γραμμή αλλάζεις το jpg σε png .
Το σκριπτακι έγινε λίγο ποιο πολύπλοκο γιατί κατα την bash 003 + 002 = 5 και όχι 005 για την ακρίβεια ότι νούμερο δει σε πράξη να έχει μηδενικό στην αρχή το κόβει αυτόματα για νούμερο γραμένο στην οκταδική (μέχρι το 07 όλα κομπλέ... μετα το 8 γράφεται 010 και το 9 011, μια οκτάδα και 0 και μια μονάδα αντίστοιχα). Για αυτό και πριν το $i έχω βάλει το πρόθεμα 10# όταν γίνονται αριθμητικές πράξεις για να 'αναγκάσω' τη bash να το δει ως δεκαδικά γραμμένο αριθμό. Για να μου βγάλει το αποτελεσμα με 'έξτρα μηδενικά' δεν βρήκα τόσο
κομψό τρόπο και αναγκάστικα έχωσα από κάτω να βάλω μια γραμή να 'φουσκώνει' τα νούμερα σε τριψήφια με μηδενικά.
Για το πως τρέχουμε ένα μεγαλούτσικο σκριπτ από αρχείο στο linux:
1) Αντιγράφουμε το σκριπτ σε ένα απλό αρχείο κειμένου, έιτε στο gedit είτε σε όποιον παρόμοιο text editor μας βολέυει. Αν η πρώτη γραμμή δεν είναι ήδη #!/bin/bash την προσθέτουμε εμείς.
Το βασικό είναι να αποθηκεύτει ως απλό αρχείο κειμένου χωρίς μορφοποιήσεις κτλπ. Με το gedit απλα το επικολλείς και το αποθηκεύεις με τις default επιλογές. Το όνομα του αρχείου δεν παίζει ρόλο και οι καταλήξεις δεν παίζουν ρόλο στο linux αν θες πάντως πολλοι χρησιμοποιούν .sh από τον 'πρόγονο' της bash , sh .
2)Αφού έχουμε το σκριπτ (ως αρχείο κειμένου πλέον) όπου μας βολεύει στο τερματικό δίνουμε
- Κώδικας: Επιλογή όλων
chmod +x script
όπου script είναι το όνομα που το αποθηκεύσαμε, μαζί με το path αν δεν είμαστε στον ίδιο φάκελο όταν τρέχουμε την εντολή.
3) Όταν θέλουμε να μετονομάσουμε τα αρχεία, τα μαζεύουμε σε ένα φάκελο ΜΟΝΑ ΤΟΥΣ (γιατί το σκριπτ μετονομάζει ΟΛΑ τα αρχεία σε ένα φάκελο) και ανοίγουμε ένα τερματικό στό οποιό και μεταβαίνουμε σε αυτό τον φάκελο (και όχι στον φάκελο με το σκριπτ)
4) Σε αυτόν το φάκελο λοιπόν τρέχουμε
- Κώδικας: Επιλογή όλων
path/to/script
δηλαδή στο τερματικό γράφου απλά το πλήρες όνομα αρχείου. Δηλαδή αν το έχουμε χώσει σε ένα φάκελο σκριπτάκια μεσα στό home μας
- Κώδικας: Επιλογή όλων
~/σκριπτάκια/script
5)Οποιοδήποτε σκριπτ μπορεί να δουλευτεί με τον ίδιο τρόπο, απλά μερικά όταν τα τρέχεις αφού δώσεις το path τους μπορεί να θέλουν arguments όπως αρκετά προγράμματα γραμμής εντολών. Αν είσαι στον φάκελο με το σκριπτ μπορείς να το τρέξεις απλά με το όνομα του αρχείου (χωρίς το path) απλά το συγκεκριμένο σκριπτ θα μετονομάσει και τον εαυτό του. Βεβαιά αυτό δεν το εμποδίζει να τρέξει οπότε αν φροντίσεις απλά το όνομα το να είναι μετά τα αρχεία σου μπορείς να το βάλεις και να το τρέξεις από τον ίδιο φάκελο και το αρχείο με το μεγαλύτερο νούμερο θα είναι το σκριπτ.
6)Αν φτιάξεις κάποιο σκριπτ και το χρησιμοποιείς σύχνα υπάρχουν αρκετοί τρόποι να το επικαλείσαι με απλά το όνομα του, μετακίνηση σε directory που βρίσκεται στο $PATH (όπως το /bin π.χ.), δημιουργεία νεου directory για τα δικά σου script και προσθήκη αυτού στο $PATH ή aliases (να γράφεις πχ xy και η bash να τρέχει ~/φάκελος/υποφάκελος/xy option1 --me tzatziki )
Ελπίζω να σε βοηθάω και να μη σε μπερδεύω χειρότερα.