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

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

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

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

Δημοσίευσηαπό medigeek » 05 Μαρ 2011, 20:58

spyroskaftanis έγραψε:ποιο είναι το λάθος;; το done;;;;;

Βάζεις πολλά "do". Πρέπει να χρησιμοποιήσεις ένα select, ένα do και ένα done:

Κώδικας: Επιλογή όλων

#!/bin/bash
PS3='Choose a number: '
select item in \
'a' \
'b' \
'c' \
'd'
do
echo "$REPLY - $item"
break
done


Το PS3 είναι το prompt, το μήνυμα που εμφανίζει στο χρήστη κατά την επιλογή.
Το select δίνει ένα variable με τον αριθμό της επιλογής: $REPLY
Μπορείς να το εκμεταλλευτείς ως ακολούθως:

Κώδικας: Επιλογή όλων
#!/bin/bash
PS3='Επιλέξτε αριθμό: '
select item in \
'Item 1' \
'Item 2' \
'Item 3' \
'Item 4'
do
case $REPLY in
1 ) VARIABLE="first text string" ;;
2 ) VARIABLE="second text string" ;;
3 ) VARIABLE="third text string" ;;
4 ) VARIABLE="fourth text string" ;;
* ) echo 'Invalid choice, try again!' ;;
esac
if [[ -n $item ]]; then
echo "Your variable: $VARIABLE"
break
fi
done


ή χωρίς το case:

Κώδικας: Επιλογή όλων
#!/bin/bash
PS3='Choose a number: '
select item in \
'Item 1' \
'Item 2' \
'Item 3' \
'Item 4'
do
if [[ $REPLY == 1 ]]; then
echo "You chose the 1st item: $item"
break
elif [[ $REPLY == 2 ]]; then
echo "You chose the 2nd item: $item"
break
elif [[ $REPLY == 3 ]]; then
echo "You chose the 3rd item: $item"
break
elif [[ $REPLY == 4 ]]; then
echo "You chose the 4th item: $item"
break
else
echo "Invalid choice. Try again!"
fi
done
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό clepto » 30 Μαρ 2011, 16:22

Κώδικας: Επιλογή όλων
#!/bin/bash
#Define bash global variable
#This variable is global and can be used anywhere in this bash script
VAR="global variable"
function bash {
#Define bash local variable
#This variable is local to bash function only
local VAR="local variable"
echo $VAR
}
echo $VAR
bash
# Note the bash global variable did not change
# "local" is bash reserved word
echo $VAR
θέλω βοήθεια να καταλάβω το παραπάνω...μόλις άρχισα να μαθαίνω bash...
λοιπόν το
Κώδικας: Επιλογή όλων
VAR="global variable"
ορίζει ποια είναι η παγκόσμια μεταβλητή που θα χρησιμοποιήσω;

Κώδικας: Επιλογή όλων
function bash {
τι κάνει;

Κώδικας: Επιλογή όλων
local VAR="local variable"
με αυτό ορίζουμε την τοπική μεταβλητή έτσι;

Κώδικας: Επιλογή όλων
echo $VAR
}
echo $VAR
με αυτά τα 2 μου δείχνει τις μεταβλητές; και ποια είναι η χρήση του "}" ;
υ.γ. ποια είναι η διαφορά ανάμεσα στις παγκόσμιες και στις τοπικές μεταβλητές;
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό ftso » 30 Μαρ 2011, 16:40

global variable μπορεί να χρησιμοποιηθεί σε όλο το σκρίπτ
local variable μπορεί να χρησιμοποιηθεί μόνο μέσα στην function
function bash { : ανοίγει μια συνάρτηση με όνομα bash η οποία μπορεί να καλεστεί και να εκτελεστεί μέσα στο σκριπτ όσες φορές και όπου την καλέσουμε
}: κλείνει την function
Άβαταρ μέλους
ftso
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 6409
Εγγραφή: 12 Μάιος 2008, 13:40
Τοποθεσία: Αθήνα
IRC: ftso
Εκτύπωση

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

Δημοσίευσηαπό clepto » 30 Μαρ 2011, 16:55

εντάξει κατάλαβα!ευχαριστώ πολύ!τώρα που άρχισα να μαθαίνω bash θα πρέπει να με ανεχτείτε... :P
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό clepto » 30 Μαρ 2011, 21:32

να ρωτήσω κάτι θέλω να κάνω μια πλάκα σε ένα φίλο, έφτιαξα ένα script και θα του πω ότι κάνει αναβάθμιση τον πυρήνα, όταν το τρέξει από τερματικό θα του βγάλει τα παρακάτω:
Κώδικας: Επιλογή όλων
#!/bin/bash
# bash trap command
trap bashtrap INT
# bash clear screen command
clear;
# bash trap function is executed when CTRL-C is pressed:
# bash prints message => Executing bash trap subrutine !
bashtrap()
{
echo "CTRL+C Detected !...deleting files -error!"
}
# for loop from 1/20 to 20/20
echo "updating kernel..."
echo "ERROR KERNEL PANIC"
for a in `seq 1 20`; do
echo "$a/20 to DELETE FILES --press CLTR+C to stop the erase!!"
sleep 2;
done
echo "Deletion Completed"
αυτό που θέλω εγώ είναι εκεί που λέω echo "updating kernel" να δείχνει σαν να γεμίζει, το έχω δει μερικές φορές...είναι κάπως έτσι:
=> και καθώς προχωράει γίνεται έτσι =======> και συνεχίζει...πως γίνεται αυτό;
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 30 Μαρ 2011, 22:07

http://manpages.ubuntu.com/manpages/luc ... cho.1.html

Κώδικας: Επιλογή όλων
#!/bin/bash
echo -ne "Αυτό "
echo -ne "το κείμενο "
echo -ne "είναι σε μια "
echo -ne "γραμμή.\n"


Κώδικας: Επιλογή όλων
echo -ne "="; sleep 1; echo -ne "="; sleep 1; echo -ne "="; sleep 1; echo ">"; sleep 1;

;)
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 30 Μαρ 2011, 22:21

Με τον χαρακτήρα \b (backspace) μπορείς να σβήνεις ένα χαρακτήρα και να τον μετατρέψεις σε κάτι άλλο:
Κώδικας: Επιλογή όλων
#!/bin/bash
echo -ne "Preparing: 01"
for x in $(seq -w 2 10); do
sleep 1
echo -ne "\b\b${x}"
done
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό clepto » 30 Μαρ 2011, 22:24

ωραίος medigeek....!
καμία ιδέα για να γίνει πιο πειστικό;
Κώδικας: Επιλογή όλων
#!/bin/bash
# bash trap command
trap bashtrap INT
# bash clear screen command
clear;
# bash trap function is executed when CTRL-C is pressed:
# bash prints message => Executing bash trap subrutine !
bashtrap()
{
echo "CTRL+C Detected !...deleting files -error!"
}
# for loop from 1/10 to 10/10
echo "updating kernel..."
sleep 2;
echo "configuration:"; echo -ne "="; sleep 1; echo -ne "="; sleep 1; echo -ne "="; sleep 1; echo -ne "="; sleep 1; echo -ne "="; sleep 1; echo -ne "====="; sleep 1; echo -ne "="; sleep 1; echo -ne "="; sleep 1; echo ">"; sleep 1;
echo "ERROR KERNEL UPDATE ABORTED - KERNEL PANIC"
for a in `seq 1 20`; do
echo "$a/20 to DELETE FILES --press CLTR+C to stop the erase!!"
sleep 2;
done
echo "Deletion Completed"


εδιτ: πως μπορώ στο τέλος του script να βάλω να κάνει reboot ο υπολογιστής χωρίς sudo; (αν δεν είναι ολοκληρωμένη η πλάκα δεν λέει :P)
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 30 Μαρ 2011, 23:14

clepto έγραψε:πως μπορώ στο τέλος του script να βάλω να κάνει reboot ο υπολογιστής χωρίς sudo;

Αν το έκανες για windows, μπορεί και να σε βοηθούσα περισσότερο, αλλά δε θέλω να φοβίσω καινούργια μέλη... προτίμησε να του δείξεις κάτι άλλο, όπως τα compiz effects στην οθόνη. :)

Τελοσπαντων, χαριν πλάκας, νομίζω ότι μόνο logout μπορείς να κάνεις από command line χωρίς κωδικό (κι αν δεν έχει ρυθμισμένο το sudoers αρχείο).
Κώδικας: Επιλογή όλων
gnome-session-save --force-logout
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό clepto » 30 Μαρ 2011, 23:19

του τα έχω δείξει αυτά...
είναι χρήστης εδώ και κάποιους μήνες...και θέλω να του κάνω πλάκα...ευχαριστώ για την βοήθεια!
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

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