Τα πάντα για το Bash...

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό lepidas » 14 Δεκ 2014, 20:56

fkol k4 έγραψε:Οκ.

Tότε θα μπορούσες να χρησιμοποιήσεις 2 μεταβλητές τύπου array. Στην πρώτη θα υπάρχουν οι γραμμές προς αλλαγή και στη 2η οι μεταβλητές που θέλεις. Μετά, μπορείς να χρησιμοποιήσεις μαι λούπα που να κάνει indexing και στις δύο και να καλεί τη sed Πχ:
Μορφοποιημένος Κώδικας: Επιλογή όλων
array_1=("21i" "24i" "25i" ... "42i")
array_2=(a b c ... z)

for i in ${array_1[@]}; do
sed -i "${array_1[i]} ${array_2[i]}" height.html
done


Σε python ίσως να ήταν πιο απλό μιας και μπορείς να χρησιμοποιήσεις ένα dictionary αντί δύο arrays, αλλά πάνω κάτω θα ήταν η ίδια ιδέα.
ναι arrays. :) σας ευχαριστώ όλους :)
Άβαταρ μέλους
lepidas
superbTUX
superbTUX
 
Δημοσιεύσεις: 3326
Εγγραφή: 11 Μάιος 2011, 11:10
Εκτύπωση

Re: Χρήσιμες Εντολές (bash)

Δημοσίευσηαπό giwrgosatma » 29 Αύγ 2015, 00:07

Ποιο ειναι το διαφορο <> δηλαδη το ΝΟΤ αυτης της εντολης ?
Κώδικας: Επιλογή όλων
while [ "$epilogh" != "1" ]

(δοκιμασα αντι για != να βαλω <> ή και !<> και δεν τρεχει)
1 Linux: Μέτριο┃ Προγρ: Visual Basic,Java,CSS 3,HTML 5 ┃ Αγγλ: Καλά
2 Operating System:||Lubuntu 15.04|| CPU: Intel Core 2 Duo E7400 @ 2.80GHz, RAM: 4,00GB Dual-Channel DDR2 @ 333MHz, Motherboard: ASRock G41C-GS (CPUSocket),Graphics:2047MB NVIDIA GeForce GT 610 (Gigabyte)
Άβαταρ μέλους
giwrgosatma
punkTUX
punkTUX
 
Δημοσιεύσεις: 201
Εγγραφή: 10 Ιαν 2014, 16:46
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό eliasps » 29 Αύγ 2015, 19:02

giwrgosatma έγραψε:Ποιο ειναι το διαφορο <> δηλαδη το ΝΟΤ αυτης της εντολης ?
Κώδικας: Επιλογή όλων
while [ "$epilogh" != "1" ]

(δοκιμασα αντι για != να βαλω <> ή και !<> και δεν τρεχει)

Για δοκίμασε:
Κώδικας: Επιλογή όλων
while ! [ "$epilogh" == "1" ]
Άβαταρ μέλους
eliasps
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4017
Εγγραφή: 16 Δεκ 2011, 22:25
Τοποθεσία: Αθήνα, Αττική
Launchpad: eliasps
IRC: eliasps
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Learner » 29 Αύγ 2015, 19:23

giwrgosatma έγραψε:Ποιο ειναι το διαφορο <> δηλαδη το ΝΟΤ αυτης της εντολης ?
Κώδικας: Επιλογή όλων
while [ "$epilogh" != "1" ]

(δοκιμασα αντι για != να βαλω <> ή και !<> και δεν τρεχει)


Integer comparison για την test: http://www.tldp.org/LDP/abs/html/comparison-ops.html
Νομίζω το -ne είναι αυτό που θες.
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9751
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTh
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό giwrgosatma » 29 Αύγ 2015, 20:19

Learner έγραψε:
giwrgosatma έγραψε:Ποιο ειναι το διαφορο <> δηλαδη το ΝΟΤ αυτης της εντολης ?
Κώδικας: Επιλογή όλων
while [ "$epilogh" != "1" ]

(δοκιμασα αντι για != να βαλω <> ή και !<> και δεν τρεχει)


Integer comparison για την test: http://www.tldp.org/LDP/abs/html/comparison-ops.html
Νομίζω το -ne είναι αυτό που θες.

το βαζω αλλα υπαρχει προβλημα..στον ελεγχο εδω ειναι ενα script που φτιαχνω
Κώδικας: Επιλογή όλων
#!/bin/sh
# Author: Giwrgos Atmatsidis
#First Run of Script
epilogh="0"
echo "-----MENU-----"
echo ""
echo "Xαίρεται $USER τι θα θέλατε να κάνετε ; [πατήστε το πλήκτρο της επιλογής σας]."
echo ""
echo "1.Eνημέρωση - Aναβάθμιση"
echo "2.Θέλω να καθαρίσω το λειτουργικό μου σύστημα Ubuntu."
echo "3.Θέλω να καθαρίσω τους παλιούς πυρήνες."
echo "4.Έχω πρόβλημα στο Τερματικό καθώς εκτελώ 'apt-get update' 'apt-get upgrade'"
echo "0.Έξοδος"
echo "Πατήστε την επιλογή σας παρακάτω"
  read epilogh
#cheak for correct entry
while [ "$epilogh" -ne "0" ] || [ "$epilogh" -ne "1" ] || [ "$epilogh" -ne "2" ]
do
   if [ "$epilogh" = "0" ] ; then
      echo "Bye"
      exit
   else   
      echo "Έχετε δώσει λάθος εντολή.Παρακαλώ πληκτρολογήστε την σωστή επιλογή ή το 0 για έξοδο"
      read epilogh
   fi
done
#end of cheak correct entry


if [ "$epilogh" = "1" ] ; then
#update
   echo "Έχετε πραγματοποιήση ενημέρωση και αναβάθμιση του συστήματος στις">logfile #create and write on logfile
    date >>logfile #create and write on logfile
    sudo apt-get update #run command
    echo "Παρακαλώ αναμένεται καθώς η διαδικασία καταγράφετε στο αρχείο"
    echo "" >>logfile
    echo "" >>logfile
    sudo apt-get update >>logfile #create and write on logfile the command output
    echo "" >>logfile
    echo "" >>logfile
#upgrade
sudo apt-get upgrade
    echo "Παρακαλώ αναμένεται καθώς η διαδικασία καταγράφετε στο αρχείο"
    echo "" >>logfile
    echo "" >>logfile
    sudo apt-get upgrade >>logfile
    echo ""
    echo "Σας παροτρύνει το Τερματικό να χρησιμοποιήσετε την εντολη 'apt-get autoremove' ? εάν ναι τότε υπάρχουν πακέτα που δεν χρειάζονται πλέον πατήστε ΕΝΤΕR για να την εκτελέσετε.H οποιοδήποτε άλλο πλήκτρο για να συνεχίσετε "
    read term   
fi   
#cheak users answer about autoremove
if [ "$term" = "" ] ; then
   sudo apt-get autoremove
    echo "Παρακαλώ αναμένεται καθώς η διαδικασία καταγράφετε στο αρχείο"
    echo "" >>logfile
    echo "" >>logfile
    sudo apt-get autoremove >>logfile
    echo ""
fi
  #clean
  if [ "$epilogh" = "2" ] ; then
   echo "Έχετε πραγματοποιήση τακτοποίηση πακέτων του συστήματος στις">logfile #create and write on logfile
    date >>logfile #create and write on logfile
    sudo apt-get --purge autoremove #run command
    sudo apt-get autoremove #run command
    sudo apt-get autoclean #run command
    sudo apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }') aptitude search '~c' -F '%p' | xargs -n 30 sudo aptitude -y purge
    echo "Παρακαλώ αναμένεται καθώς η διαδικασία καταγράφετε στο αρχείο"
    echo "" >>logfile
    echo "" >>logfile
    sudo apt-get --purge autoremove >>logfile #Write on logfile the command output
    sudo apt-get autoremove>>logfile #Write on logfile the command output
    sudo apt-get autoclean>>logfile #Write on logfile the command output
    sudo apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }') aptitude search '~c' -F '%p' | xargs -n 30 sudo aptitude -y purge>>logfile #Write on logfile the command output
    echo "" >>logfile
    echo "" >>logfile
fi 

Αυτο εδω το κομματι δεν λειτουργει σωστα...Γνωριζω πως η while εκτελει τις εντολες ΜΟΝΟ οταν ειναι True..σε αυτο εδω το κομματι θελω να κανω ελεγχο ορθοτητας τιμων και δεν λειτουργει.
Κώδικας: Επιλογή όλων
#cheak for correct entry
while [ "$epilogh" -ne "0" ] || [ "$epilogh" -ne "1" ] || [ "$epilogh" -ne "2" ]
do
   if [ "$epilogh" = "0" ] ; then
      echo "Bye"
      exit
   else   
      echo "Έχετε δώσει λάθος εντολή.Παρακαλώ πληκτρολογήστε την σωστή επιλογή ή το 0 για έξοδο"
      read epilogh
   fi
done
#end of cheak correct entry

μονο στο
Κώδικας: Επιλογή όλων
while [ "$epilogh" -ne "0" ]
λειτουργει σωστα και αν δεν δωσω το 0 με βγαζει το μηνυμα οτι εχω δωσει λαθος τιμη..Τι κανω λαθος..(οι τελεστες ειναι διαφορετικη απο οσο νομιζα ) θα πρεπει να υπαρχει καποια θεωρια με τις παρενθεσεις που δεν ξερω στο Shell.
1 Linux: Μέτριο┃ Προγρ: Visual Basic,Java,CSS 3,HTML 5 ┃ Αγγλ: Καλά
2 Operating System:||Lubuntu 15.04|| CPU: Intel Core 2 Duo E7400 @ 2.80GHz, RAM: 4,00GB Dual-Channel DDR2 @ 333MHz, Motherboard: ASRock G41C-GS (CPUSocket),Graphics:2047MB NVIDIA GeForce GT 610 (Gigabyte)
Άβαταρ μέλους
giwrgosatma
punkTUX
punkTUX
 
Δημοσιεύσεις: 201
Εγγραφή: 10 Ιαν 2014, 16:46
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Learner » 29 Αύγ 2015, 21:42

Αυτό με τους πυρήνες καλό θα είναι να το αφαιρέσεις, μπορεί να προκαλέσει ζημιά σε όποιον το εκτελέσει. Επίσης, δεν βλέπω να είναι σωστή η εντολή. Την δοκίμασες πριν την προσθέσεις στο script ;

Κώδικας: Επιλογή όλων
sudo apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }') aptitude search '~c' -F '%p' | xargs -n 30 sudo aptitude -y purge


Γιατί θες να χρησιμοποιήσεις λούπα; Έχω την εντύπωση ότι με 4-5 if else θα έκανες τη δουλειά σου.
Επίσης, απ' όσο έχω διαβάσει, πλέον χρησιμοποιούν διπλές αγκύλες για την τεστ [[ ]] , οι μονές θεωρούνται deprecated (όχι ότι δεν δουλεύουν).
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9751
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTh
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό giwrgosatma » 29 Αύγ 2015, 22:16

Learner έγραψε:Αυτό με τους πυρήνες καλό θα είναι να το αφαιρέσεις, μπορεί να προκαλέσει ζημιά σε όποιον το εκτελέσει. Επίσης, δεν βλέπω να είναι σωστή η εντολή. Την δοκίμασες πριν την προσθέσεις στο script ;

Κώδικας: Επιλογή όλων
sudo apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }') aptitude search '~c' -F '%p' | xargs -n 30 sudo aptitude -y purge

Γεια σου Learner :) Δουλευει ναι..(Ομως θα την αφαιρεσω)
Learner έγραψε:Γιατί θες να χρησιμοποιήσεις λούπα; Έχω την εντύπωση ότι με 4-5 if else θα έκανες τη δουλειά σου.
Επίσης, απ' όσο έχω διαβάσει, πλέον χρησιμοποιούν διπλές αγκύλες για την τεστ [[ ]] , οι μονές θεωρούνται deprecated (όχι ότι δεν δουλεύουν).

θελω να χρησιμοποιησω Loop για να κανει ελεγχο..να μην πατησει κανενας λαθος επιλογη.(παντα το κανω αυτο στους αλγοριθμους μου)Τωρα θα μου πεις οτι δεν χρειαζεται ιδιαιτερα αλλα ειναι τροπος συνηθειας.
Learner έγραψε:πλέον χρησιμοποιούν διπλές αγκύλες για την τεστ [[ ]] , οι μονές θεωρούνται deprecated (όχι ότι δεν δουλεύουν).

Κώδικας: Επιλογή όλων
while [[ "$epilogh" < "0" ]] && [[ "$epilogh" > "4" ]]

αποτελεσμα
Κώδικας: Επιλογή όλων
./unix*.sh
-----MENU-----

Xαίρεται atmatsidis τι θα θέλατε να κάνετε ; [πατήστε το πλήκτρο της επιλογής σας].

1.Eνημέρωση - Aναβάθμιση
2.Θέλω να καθαρίσω το λειτουργικό μου σύστημα Ubuntu.
3.Θέλω να καθαρίσω τους παλιούς πυρήνες.
4.Έχω πρόβλημα στο Τερματικό καθώς εκτελώ 'apt-get update' 'apt-get upgrade'
0.Έξοδος
Πατήστε την επιλογή σας παρακάτω
5
./unix script.sh: 16: ./unix script.sh: cannot open 0: No such file
./unix script.sh: 16: ./unix script.sh: [[: not found

Η εκφραση ειναι σωστη...Αλλα κατι δεν παει καλα
1 Linux: Μέτριο┃ Προγρ: Visual Basic,Java,CSS 3,HTML 5 ┃ Αγγλ: Καλά
2 Operating System:||Lubuntu 15.04|| CPU: Intel Core 2 Duo E7400 @ 2.80GHz, RAM: 4,00GB Dual-Channel DDR2 @ 333MHz, Motherboard: ASRock G41C-GS (CPUSocket),Graphics:2047MB NVIDIA GeForce GT 610 (Gigabyte)
Άβαταρ μέλους
giwrgosatma
punkTUX
punkTUX
 
Δημοσιεύσεις: 201
Εγγραφή: 10 Ιαν 2014, 16:46
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Learner » 29 Αύγ 2015, 22:32

giwrgosatma έγραψε:Δουλευει ναι.

Έχω την εντύπωση ότι σου λείπει κάπου ένα && ή ;
Επίσης, το aptitude δεν είναι στάνταρ πακέτο του Ubuntu, χρησιμοποίησε καλύτερα apt-get.
Προσωπικά θα άφηνα μόνον αυτή
Κώδικας: Επιλογή όλων
sudo apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }')

είναι μια χαρά για καθαρισμό και αφαιρεί και παλιούς πυρήνες (αν υπάρχουν).

Φυσικά το sh δεν γνωρίζει από τέτοια, γι' αυτό χρησιμοποιούμε συνήθως
#!/bin/bash
τώρα είδα ότι έχεις
#!/bin/sh
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9751
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTh
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό giwrgosatma » 29 Αύγ 2015, 22:40

Learner έγραψε:Φυσικά το sh δεν γνωρίζει από τέτοια, γι' αυτό χρησιμοποιούμε συνήθως
#!/bin/bash
τώρα είδα ότι έχεις
#!/bin/sh

το αλλαξα αλλα παλι κανει λαθη..θα το αποθηκευσω ως .bash να δω
To δοκιμασα τωρα δεν κανει ελεγχο..σαν να μην υπαρχει loop και αρχικος ελεχγος while..
1 Linux: Μέτριο┃ Προγρ: Visual Basic,Java,CSS 3,HTML 5 ┃ Αγγλ: Καλά
2 Operating System:||Lubuntu 15.04|| CPU: Intel Core 2 Duo E7400 @ 2.80GHz, RAM: 4,00GB Dual-Channel DDR2 @ 333MHz, Motherboard: ASRock G41C-GS (CPUSocket),Graphics:2047MB NVIDIA GeForce GT 610 (Gigabyte)
Άβαταρ μέλους
giwrgosatma
punkTUX
punkTUX
 
Δημοσιεύσεις: 201
Εγγραφή: 10 Ιαν 2014, 16:46
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Learner » 30 Αύγ 2015, 00:25

Μήπως σε βολεύει καλύτερα , στην περίπτωσή σου, κάτι τέτοιο ; (φυσικά διαμόρφωσε το κατάλληλα, απλά δίνω τον κορμό).
Αποθήκευσε το και τρέξε το όπως είναι να δεις τι κάνει.
Μορφοποιημένος Κώδικας: Επιλογή όλων
#!/bin/bash
# Author: Giwrgos Atmatsidis
#First Run of Script
echo "-----MENU-----"
echo ""
echo "Xαίρεται $USER τι θα θέλατε να κάνετε ;"
echo ""
echo ""
PS3='Πατήστε το πλήκτρο της επιλογής σας: '
options=("Eνημέρωση - Aναβάθμιση" "Θέλω να καθαρίσω το λειτουργικό μου σύστημα Ubuntu." "Θέλω να καθαρίσω τους παλιούς πυρήνες." "Έχω πρόβλημα στο Τερματικό καθώς εκτελώ 'apt-get update' 'apt-get upgrade'" "Έξοδος")
select opt in "${options[@]}"
do
case $opt in
"Eνημέρωση - Aναβάθμιση")
echo "epilogh 1"
;;
"Θέλω να καθαρίσω το λειτουργικό μου σύστημα Ubuntu.")
echo "epilogh 2"
;;
"Θέλω να καθαρίσω τους παλιούς πυρήνες.")
echo "epilogh 3"
;;
"Έχω πρόβλημα στο Τερματικό καθώς εκτελώ 'apt-get update' 'apt-get upgrade'")
echo "epilogh 4"
;;
"Έξοδος")
break
;;
*) echo "Λάθος επιλογή";;
esac
done
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9751
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTh
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι