Bash 101

Bash 101

16 Mayıs 2015, Istanbul PHP Meetup #008'de yaptığım sunum.

033485f7e18823d4ccabb24e5cb4935f?s=128

Uğur Özyılmazel

May 16, 2015
Tweet

Transcript

  1. BASH 101 Geliştiriciler İçin

  2. Uğur "vigo" Özyılmazel vigobronx vigo

  3. bash Bourne Again SHell

  4. Brian J. Fox

  5. None
  6. shell Komutları çalıştıran Makro işlemci 1

  7. shell Komut yorumlayıcısı 2

  8. shell Programlama Dili 3

  9. Mac OS X (BSD) komutları ile Ubuntu / Linux komutları

    farklılık gösterir
  10. $ help # help <KOMUT> $ help pwd help

  11. None
  12. konfigürasyon ~/.profile ~/.bashrc Kullancı Bazında } /etc/profile /etc/bashrc Sistem Bazında

    }
  13. konfigürasyon 1 ~/.profile 2 ~/.bashrc

  14. #!/usr/bin/env bash source "$HOME/.bashrc" ~/.profile

  15. # non interactive shell [ -z "$PS1" ] && return

    export DOTFILES_PATH="$HOME/Dotfiles" source $DOTFILES_PATH/shell/env source $DOTFILES_PATH/shell/alias source $DOTFILES_PATH/shell/ls_colors # Load private files # ------------------------------------------------------ # Loads every file under private/ folder! if [[ -d $DOTFILES_PATH/private ]]; then if [ "$(ls -A $DOTFILES_PATH/private)" ]; then ~/.bashrc
  16. Environment Variables env

  17. TERM_PROGRAM=Apple_Terminal COMP_WORDBREAKS= "'><;|&(: TERM=xterm-256color SHELL=/bin/bash HISTSIZE=30000 TMPDIR=/var/folders/gz/hvbfjmnx5z3bl6k05bp4w04h0000gn/T/ DOCKER_HOST=tcp://192.168.59.103:2376 Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.PyiyHWlqqs/ Render

    TERM_PROGRAM_VERSION=343.7 TERM_SESSION_ID=59036979-ACF9-409F-9141-9AAA2941844E CDPATH=.:..:../..:/Users/vigo/Desktop/Dropbox SVN_EDITOR=mate -w HISTFILESIZE=30000 USER=vigo DOCKER_TLS_VERIFY=1 PATH=/Users/vigo/.rbenv/shims:/Users/vigo/.rbenv/bin:/usr/local/heroku bin:/usr/local/heroku/bin:/Users/vigo/bin:/usr/local/sbin:/usr/local/ bin:/usr/bin:/bin:/usr/sbin:/sbin PWD=/Users/vigo/Development/Source/sinatra EDITOR=mate -w
  18. Prompt Shell $PS1

  19. PS1='\h:\W \u\$ ' \h Ugurs-MacBook-Air \W ~ \u vigo

  20. None
  21. https://github.com/vigo/dotfiles-universal http://linuxconfig.org/bash-prompt-basics

  22. gündelik komutlar curl touch mkdir alias man sudo history grep

    xargs less pwd ls cd cp mv rm chown ln find awk cat git ps more chmod
  23. komut ? $ man <KOMUT> $ man ls $ man

    pwd $ man -k "kelime"
  24. None
  25. h

  26. None
  27. man help (less) / <kelime ara> n sonraki bulunan kelime

    N önceki bulunan kelime f 1 ekran ileri git b 1 ekran geri git g ilk satıra git G son satıra git q çık
  28. None
  29. alt man sayfaları $ man <NUMARA> <KOMUT> $ man 3

    getcwd $ man 2 chdir
  30. alias $ alias # hepsini göster $ alias XX='<KOMUTLAR>' $

    alias la='ls -al' $ alias la # göster
  31. alias $ alias ls='ls -al' $ \ls # orijinal ls

    ile Ezdiğiniz orijinal komutları \ ön eki ile çağırabilirsiniz!
  32. Unix Felsefesi Birbiriyle konuşan küçük küçük programcılar!

  33. pipe $ <KOMUT> | <KOMUT> | <KOMUT> | ...

  34. pipe $ man 5 -t nanorc | open -f -a

    preview nano'nun konfigürasyon dosyası ile ilgili 5.dökümanı pdf haline getirmek. Mac OS X için geçerlidir.
  35. $ find . -iname '*1*.jpg' pipe ./file_1.jpg ./file_10.jpg ./file_11.jpg ./file_12.jpg

    ./file_13.jpg ./file_14.jpg ./file_15.jpg ./file_16.jpg ./file_17.jpg ./file_18.jpg ./file_19.jpg
  36. $ find . -iname '*1*.jpg' | xargs -n 1 echo

    "Bulunan:" pipe Bulunan: ./file_1.jpg Bulunan: ./file_10.jpg Bulunan: ./file_11.jpg Bulunan: ./file_12.jpg Bulunan: ./file_13.jpg Bulunan: ./file_14.jpg Bulunan: ./file_15.jpg Bulunan: ./file_16.jpg Bulunan: ./file_17.jpg Bulunan: ./file_18.jpg Bulunan: ./file_19.jpg
  37. $ find . -iname '*1*.jpg' | xargs -n 1 rm

    pipe
  38. redirection $ ls tmp/ file_1.jpg file_12.jpg file_15.jpg file_18.jpg file_20.jpg file_5.jpg

    file_8.jpg file_10.jpg file_13.jpg file_16.jpg file_19.jpg file_3.jpg file_6.jpg file_9.jpg file_11.jpg file_14.jpg file_17.jpg file_2.jpg file_4.jpg file_7.jpg $ ls tmp/ > dir_list.txt
  39. redirection $ <KOMUT> > dosya
 # yoksa oluştur ya da

    üzerine yaz $ <KOMUT> >> dosya
 # ek yap (append) $ <KOMUT> < dosya
 $ sort -r < dir_list.txt 
 # dosyayı komuta yönlendir
  40. komut kombinasyonu $ <KOMUT> ; <KOMUT> ; <KOMUT>
 # herhangibiri

    hata verse bile diğeri devam eder. $ <KOMUT> && <KOMUT> && <KOMUT>
 # herhangibiri hata verirse diğer işlemler çalışmaz. $ <KOMUT> || <KOMUT> || <KOMUT>
 # komutlar bitince sekans durur.
  41. BASH Programlama Dilidir!

  42. standart • Değişken tanımlamaları • Fonksiyon tanımlamaları • Kontrol mekanizmaları

    • Döngü mekanizmaları • Hata yakalama mekanizmaları • Regular Expression
  43. değişken A=5 # = ile değişken arası A="5" # bitişik

    olmalı! A=$(date) # date komutunun değeri A=`date` # date komutunun değeri export A="Hello" Default: Global Scope
  44. fonksiyon function <Fonksiyon ADI>(){ # buraya kod } function md()

    { mkdir -p "$@" && cd "$@" }
  45. fonksiyon deneme(){ echo "$@" } deneme2(){ echo "$1" } deneme

    1 2 3 4 # => 1 2 3 4 deneme2 1 2 3 4 # => 1
  46. fonksiyon A=5 B="lego" deneme(){ local A="vigo" echo "\$A: ${A} \$B:

    ${B}" } deneme # => $A: vigo $B: lego
  47. kontrol if [[ durum ]]; then # kod fi if

    [[ durum ]]; then # kod elif [[ durum ]]; then # kod fi
  48. kontrol # Ubuntu ? if [[ `which lsb_release` ]]; then

    if [[ `lsb_release -i | awk '{print $3}'` == "Ubuntu" ]]; then source $DOTFILES_PATH/shell/ubuntu_specific fi fi # Mac ? if [[ `uname` == "Darwin" ]]; then source $DOTFILES_PATH/shell/mac_specific fi
  49. döngü export DOTFILES_PATH="$HOME/Dotfiles" for file in $DOTFILES_PATH/private/*; do source $file

    done x=0 read_file="/Users/vigo/Desktop/bash101-demo/dummy_text" cat $read_file | while read line; do x=$(($x+1)) echo "Satır: ${x}, ${line}" done
  50. döngü typeset -a test_array test_array=( "username" "vigo" "password" "secret" )

    test_array_count=${#test_array[*]} for ((i=0; i<=$((($test_array_count/2)-1)); i++)); do key="${test_array[(0+($i*2))]}" value="${test_array[(1+($i*2))]}" echo "${i} : ${key} ${value}" done
  51. Teşekkürler, Sorular ?