insomniaK Δημοσ. 24 Οκτωβρίου 2008 Share Δημοσ. 24 Οκτωβρίου 2008 Χαίρεται, Πρέπει να γράψω ένα σχετικά μεγάλο script για bash, που περιλαμβάνει πολλά βήματα. Έχω κατεβάσει αυτό, αλλά έχω πρακτικές απορίες (Σημείωση: από προγραμματισμό ξέρω, η σύνταξη στο bash με δυσκολεύει). Απορία νο 1. Θέλω να έχω 2 nested loops, το πρώτο από 1 ως 100 και το δεύτερο από 200 ως 1000. Η απορία πως πρέπει να δηλώσω αυτό το "ως" στη for χωρίς να χρειαστεί να γράψω όλα τα νούμερα, όπως πχ στο επόμενο παράδειγμα. > for i in 1 2 3 4 do echo number $i done Ουσιαστικά ψάχνω κάτι σαν for i=1:100 Απορία νο 2 Γενικά, την απορία νο 1 την αντιμετώπισα με την while, αλλά και πάλι έχω πρόβλημα διότι δεν είναι δυνατόν να κάνω nested loop. >#!/bin/bash day=1 hour=200 while [ $day -lt 100 ] ; do while [ $hour -lt 1000 ]; do [...] let day=day+1 let hour=hour+1 done done Μήπως ξέρετε κάποιον τρόπο ώστε να τρέχει για day = 1 όλα τα hour και μετά να πηγαίνει στο day = 2 κοκ; Όλες οι συμβουλές καλοδεχούμενες και αν έχετε κάποιο βιβλίο που θεωρείτε καλό, αναφέρετε το. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
capthookb Δημοσ. 24 Οκτωβρίου 2008 Share Δημοσ. 24 Οκτωβρίου 2008 Ένας τρόπος να το κάνεις είναι με χρήση της εντολής seq (man seq) Δηλαδή: > #!/bin/bash for i in `seq 1 2` do for j in `seq 0 1` do echo "$i - $j" done done Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
insomniaK Δημοσ. 24 Οκτωβρίου 2008 Μέλος Share Δημοσ. 24 Οκτωβρίου 2008 Ευχαριστώ πάρα πολύ. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 24 Οκτωβρίου 2008 Share Δημοσ. 24 Οκτωβρίου 2008 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html http://www.linuxconfig.org/Bash_scripting_Tutorial http://tldp.org/LDP/abs/html/nestedloops.html http://www.faqs.org/docs/abs/HTML/nestedloops.html . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
insomniaK Δημοσ. 24 Οκτωβρίου 2008 Μέλος Share Δημοσ. 24 Οκτωβρίου 2008 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.htmlhttp://www.linuxconfig.org/Bash_scripting_Tutorial http://tldp.org/LDP/abs/html/nestedloops.html http://www.faqs.org/docs/abs/HTML/nestedloops.html Το 1 βγαίνει από το google, αλλά τα html howto, δεν τα βρίσκω βολικά. Το 2 έχει μόνο παραδείγματα και δεν εξηγεί, τα οποία είναι copy paste από το 1 ή από αυτό που προτείνω στο πρώτο post. Τα 3 και 4, είναι αυτά που χρησιμοποίησα για να δείξω το πρόβλημα που είχα. Ευχαριστώ πάντως για τα λινκς. Γενικά, ψάχνοντας κατέληξα πως to μεγαλύτερο ποσοστό των tutorials, αντιγράφει ο ένας τον άλλον... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 24 Οκτωβρίου 2008 Share Δημοσ. 24 Οκτωβρίου 2008 έχεις δίκιο δεν είχα δει το link έγινες κατανοητός καλή συνέχεια ! . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 25 Οκτωβρίου 2008 Share Δημοσ. 25 Οκτωβρίου 2008 > #!/bin/bash for (( i=1; $i<10; i++ )); do for (( j=1; $j<10; j++ )); do echo "$i - $j" done done Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 25 Οκτωβρίου 2008 Share Δημοσ. 25 Οκτωβρίου 2008 καλημέρα κύριε alkisg . <τελεία Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 25 Οκτωβρίου 2008 Share Δημοσ. 25 Οκτωβρίου 2008 Καλό μεσημέρι... θρανίο! (το απέναντι θρανίο εννοώ, μην αρχίσει να ζηλεύει ο firewalker! ) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
insomniaK Δημοσ. 27 Οκτωβρίου 2008 Μέλος Share Δημοσ. 27 Οκτωβρίου 2008 > #!/bin/bash for (( i=1; $i<10; i++ )); do for (( j=1; $j<10; j++ )); do echo "$i - $j" done done Ευχαριστώ, πόσο δύσκολο είναι να υπάρχει σε κάποιο tutorial αυτό το παράδειγμα; Απορία νο 3 Οι δύο counters είναι κομμάτι του ονόματος κάποιων αρχείων της μορφής: lsPd_M4_4_2_2008_0_48_8.dat. Ουσιαστικά επειδή δε με απασχολούν όλα αυτά τα νούμερα που υφίστανται στο όνομα του αρχείου και για να μη βαρύνω περαιτέρω το σύστημα (υπάρχει πρόβλημα μνήμης), αναζητώ αν υπάρχει το αρχείο της μορφής 'lsPd_M*_'+date_cnt'+'*_'+hour_cnt'+_*.dat' > set filename = 'lspd_M',*,"$day",'_2008_',"$hour", * echo ${filename} if [ ! -f "$filename" ] then echo "$filename does not exists in the current directory" else echo "$filename does exists in the current directory" fi Το οποίο και δε δουλεύει. Είμαι σχεδόν σίγουρος πως φταίει ο τρόπος που φτιάχνω το filename. 1. Τι κάνω λάθος; 2. Είναι δυνατόν σε bash να set filename με wildcards? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
capthookb Δημοσ. 27 Οκτωβρίου 2008 Share Δημοσ. 27 Οκτωβρίου 2008 Αυτό ζητάς; > for (( date=1; $date<10; date++ )); do for (( hour=1; $hour<50; hour++ )); do filename=("lsPd_M?_"$date"_?_2008_?_"$hour"_?.dat") if [ ! -f "$filename" ] then echo "$filename does not exists in the current directory" else echo "$filename does exists in the current directory" fi done done Το αστεράκι επειδή περιλαμβάνει οποιοδήποτε αριθμό χαρακτήρων μπορεί να σου βγάλει λάθος αποτελέσματα. Δοκίμασέ το όμως. Τι ακριβώς θέλεις να κάνεις; Μήπως θα σε βόλευε αυτό; > for fname in `ls lsPd_M*.dat`; do date=$(echo $fname | awk -F "_" '{print $4}') hour=$(echo $fname | awk -F "_" '{print $7}') echo "$fname hour:$hour date:$date" done Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 27 Οκτωβρίου 2008 Share Δημοσ. 27 Οκτωβρίου 2008 o apoikos είχε απαντήσει σε κάτι παρόμοιο http://www.insomnia.gr/forum/showpost.php?p=2282116&postcount=73 επίσης alkisg! . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
insomniaK Δημοσ. 27 Οκτωβρίου 2008 Μέλος Share Δημοσ. 27 Οκτωβρίου 2008 Οπ, ξαναευχαριστώ και τους 2 σας. Δεν έχω βρει τίποτα με το search, για αυτό και ρωτάω. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 27 Οκτωβρίου 2008 Share Δημοσ. 27 Οκτωβρίου 2008 http://bashscripts.org/ τυχαία το βρήκα . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.