bash

Z Wikibooks, biblioteki wolnych podręczników.
(Przekierowano z BASH)
Skocz do: nawigacji, wyszukiwania


Dokumentacja[edytuj]

Za pomocą komendy :[1]

man bash

uzyskamy wersję dokumentacji:

  • aktualną ( odpowiedną dla zainstalowanej wersji Basha)
  • nie wymagającą dostępu do sieci (ang. offline )

Sposoby pracy[edytuj]

Ręczne wpisywanie poleceń[edytuj]

W konsoli wpisujemy :

which bash

otrzymujemy odpowiedź gdzie jest program obsługujący wiersz poleceń naszej powłoki :

/bin/bash

Sprawdzamy wersję BASH'a :

 /bin/bash --version
 GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)
 Copyright (C) 2011 Free Software Foundation, Inc.
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

 This is free software; you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.

Skrypty[edytuj]

Polecenia możemy

  • zapisać do pliku tekstowego zwanego skryptem , np. g
  • plik powinien rozpoczynać się od magicznych znaków [2]) :
#!/bin/bash
  • nadać mu atrybut wykonywalności :
chmod +x g
  • uruchomić plik znajdujący się w aktualnym katalogu :
./g


Shebang jest dwu bajtową magiczną liczbą ( ang. magic number) oznaczającą typ pliku. Więcej o magicznej liczbie :

man magic

Po Shebangu następuje ścieżka do programu wykonującego komendy skryptu.

Skróty klawiaturowe[edytuj]

Polecenia BASH'a Skrót klawiszowy Opis polecenia
SIGTSTP Ctrl-Z zatrzymuje ( kończy) proces
SIGINT Ctrl-C zawiesza proces ( pauza)

Opcje[edytuj]

Opcje Basha [3].

Dodanie flagę "-x" pozwala zobaczyć co dokładnie skrypt robi :

   #!/bin/bash -x


Zmienne środowiskowe[edytuj]

Opis w wikipedii [4]

PATH[edytuj]

Wyświetlamy wartość zmiennej PATH:

echo $PATH

Zmieniamy czasowo wartość zmiennej PATH :

PATH="$HOME/.cabal/bin:$PATH"

W celu stałej zmiany wartości zmiennej PATH dla danego użytkownika należy powyższą instrukcję dodać do swojego pliku

~/.profile 

lub

~/.bash_profile 

lub

~/.bash_login 

Edycja pliku jest możliwa po otwarciu go w trybie administratora.



Położenie pliku w zależności od klasy użytkowników [5]
Klasa użytkowników plik
aktualny $HOME/.bash_profile
wszyscy oprócz su /etc/profile
su (root) /root/.bash_profile

Pliki[edytuj]

Tworzenie animowanego gifa[edytuj]

Przykładowy skrypt uruchamiający komendy z biblioteki ImageMagic tworzące z plików pgm animowany gif :


#!/bin/bash
 
# script file for BASH 
# which bash
# save this file as g
# chmod +x g
# ./g
 
i=0
# for all pgm files in this directory
for file in *.pgm ; do
  # b is name of file without extension
  b=$(basename $file .pgm)
  # change file name to integers and count files
  ((i= i+1))
  # convert from pgm to gif and add text ( level ) using ImageMagic
  convert $file -pointsize 50 -annotate +10+100 $b ${i}.gif
  echo $file
done
 
echo convert all gif files to one animated gif_file
convert -delay 50   -loop 1 %d.gif[1-$i] aa${i}.gif
# convert -delay 50 -loop 0 %d.gif[1-$i] b${i}.mpg # it needs ffmpeg
# ffmpeg2theora %d.gif --framerate 12 --videoquality 9  -o output129.ogv
 
 
echo b${i} OK
# end

Zmiana nazwy plików[edytuj]

Możemy wykorzystać komendy :

lub skrypt :


#!/bin/bash
 
# script file for BASH
# which bash
# save this file as r
# chmod +x r
# ./r
# for all pgm files in this directory
# for all pgm files in this directory
for file in *.pgm ; do
  # remove first 3 chars from old file name
  newfile=${file:3}
  # change name of file
  mv $file $newfile
  echo $newfile
done
 
echo OK
# end

Kopiowanie plików[edytuj]

Chcemy skopiować : [6][7]

  • tylko pliki z rozszerzeniem c
  • z katalogu ~/c
  • do katalogu ~/temp
  • tak aby zachować podkatalogi

Możemy użyć :

find  ~/c -maxdepth 7 -name "*.c" -exec cp {} -R ~/temp \;

ale w katalogu docelowym nie ma podkatalogów

Inna opcja :

cp -R ~/c  ~/temp

Kopiuje z podkatalogami ale wszystkie pliki.

Działające polecenia :

  • z użyciem find i tar
(cd ~/c ; find  -maxdepth 7 -name "*.c" |tar -T - -c) |tar -C ~/temp -x 
  • z użyciem rsync :
rsync -a --include='*.c' --include='*/' --exclude='*' ~/c/ ~/temp/


Łaty[edytuj]

Łata ( ang. patch)[8]


Różnice[edytuj]

Tekst[edytuj]

Mamy 2 pliki tekstowe old.txt i new.txt. Różnice między nimi znajdziemy za pomocą programu diff :[9]

diff -a old.txt new.txt >r.txt

Wynik będzie zapisany do pliku tekstowego r.txt za pomocą potoku

kod źródłowy[edytuj]

Łata jest plik zawierający różnicę pomiędzy nowym i starym plikiem. Tworzymy ją za pomocą komendy :

diff -u oryginalny.c nowy.c > oryginalny.patch


Dokumentacja[edytuj]

Dokumentacja offline :[10]

man diff


lub

diff --help.


Strony manuala ( man) zamykamy Ctrl-c

Matematyka[edytuj]

Rozkład na liczby pierwsze : ( zobacz man factor) :

factor 27417
27417: 3 13 19 37

ale już :

time factor 237142198758023568227473377297792835283496928595231875152809132048206089502588927
factor: „237142198758023568227473377297792835283496928595231875152809132048206089502588927” jest za duża
real       0m0.001s
user    0m0.000s
sys     0m0.000s

System[edytuj]

Informacje o procesorze :

cat /proc/cpuinfo

Zobacz również[edytuj]

Przypisy[edytuj]

  1. man - polecenie systemu Unix uruchomiane z wiersza poleceń powłoki systemowej
  2. Shebang w wikipedii
  3. Bash options
  4. Zmienna środowiskowa w wikipedii
  5. [Troubleshooters.Com and T.C Linux Library Present : Adding a Directory to the Path by Steve Litt]
  6. Archiwum grupy pl.comp.os.linux.programowanie : Bash : kopiowanie wybranych plików z podkatalogami
  7. [http://ubuntu.pl/forum/viewtopic.php?f=170&t=160739%7Cpoprawne wywołanie rsync w bash w forum ubuntu.pl
  8. 10 minut z diff i patch - Bartłomiej Piotrowski
  9. Comparing and Merging Files - GNU doc
  10. Manual diff online