SHELL Programming


Various command interpreters under UNIX:

- sh (Bourne shell)
- csh (C shell)
- ash (Almquist shell)
- ksh (Korn shell)
- zsh (Z shell)
- bash (Bourne-again shell)


Configuration

/etc/profile
~/.profile
~/.bash_profile
~/.bash_login
~/.bashrc


Shell is a FILTER,
- reads from standard input, writes to standard output and error


# comment

\ escaping:

$ echo \#

$ echo *
 arch Asztal bin books Calibre Library dell_hspa_config.pdf Dokumentumok d.txt ftp ICAClient Képek Kőzettan.pdf Letöltések Nyilvános public_html Sablonok Videók work Zenék

$ echo \*
*

$ echo '**'
**

$ echo "**"



Structure of commands:
=====================


Command with arguments:


$ echo hello world
hello world
$ echo hello      world
hello world
$ echo 'hello      world'
hello      world



Pipeline:


$ echo hello world | grep 'o w'
hello world

$ ls -l
összesen 2440
drwxr-xr-x 10 gsd users    4096 jan 16 21.31 arch
drwxr-xr-x  4 gsd users    4096 jan 29 21.52 Asztal
drwxr-xr-x  2 gsd users    4096 szept 22 02.09 bin
drwxr-xr-x  3 gsd users    4096 jan 23 23.14 books
drwxr-xr-x  2 gsd users    4096 jan 23 23.17 Calibre Library
-rw-r--r--  1 gsd users 2083012 jan 11 00.50 dell_hspa_config.pdf
drwxr-xr-x  3 gsd users    4096 febr 20 18.54 Dokumentumok
-rw-r--r--  1 gsd users     550 jan 30 19.19 d.txt
drwxr-xr-x  7 gsd users    4096 febr 18 23.41 ftp
drwxr-xr-x  3 gsd users    4096 2007 jún 21 ICAClient
drwxr-xr-x  4 gsd users    4096 jan 29 22.37 Képek
-rw-r--r--  1 gsd users  341213 febr  6 14.32 Kőzettan.pdf
drwxr-xr-x  2 671 users    4096 okt  3 21.20 Letöltések
drwxr-xr-x  2 gsd users    4096 szept 22 02.17 Nyilvános
drwxr-xr-x  2 gsd users    4096 szept 22 02.09 public_html
drwxr-xr-x  2 gsd users    4096 szept 22 02.17 Sablonok
drwxr-xr-x  6 gsd users    4096 febr 13 20.38 Videók
drwxr-xr-x  5 gsd users    4096 jan 26 23.08 work
drwxr-xr-x  3 gsd users    4096 okt  1 23.46 Zenék


$ ls -l | grep '^d' | wc -l
16

$ ls -l | grep '^d' | grep ftp | wc -l
1



Exit code:


$ echo $?
0

$ ls -l | grep '^d' | grep  xftp

$ echo $?
1



Logical operations  ||   &&


$ ls -l | grep '^d' | grep  xftp || echo false
false

$ ls -l | grep '^d' | grep  ftp && echo true
true

$ test -d zz || mkdir zz




Sequence and backgrounding


$ sleep 10; echo kesz
kesz


$ sleep 10 & echo kesz
[1] 7802
kesz

$ sleep 10 & echo kesz; ps
[2] 7805
kesz
 PID TTY          TIME CMD
4237 pts/0    00:00:00 bash
7805 pts/0    00:00:00 sleep
7806 pts/0    00:00:00 ps


$ (sleep 10 ; echo kesz)& ps
[3] 7809
 PID TTY          TIME CMD
4237 pts/0    00:00:00 bash
7809 pts/0    00:00:00 bash
7810 pts/0    00:00:00 ps
7811 pts/0    00:00:00 sleep


$ (sleep 10 ; echo kesz)& ps >out

$ ((sleep 10 ; echo kesz)& ps) >out


Shell variables:


$?  exit code

$!  last background process pid

$0 ... $9  shell parameters

$#  number of parameters

$*  all parameters
 
"$@" all parameters

$x  x variable (PATH, HOME, etc...)



Quoting:

$ i=0
$ echo expr $i + 1
expr 0 + 1

$echo i=expr $i + 1
i=expr 0 + 1

echo i=`expr $i + 1`
i=1


$ echo `ls -l`
összesen 2440 drwxr-xr-x 10 gsd users 4096 jan 16 21.31 arch drwxr-xr-x 4 gsd users 4096 jan 29 21.52 Asztal drwxr-xr-x 2 gsd users 4096 szept 22 02.09 bin drwxr-xr-x 3 gsd users 4096 jan 23 23.14 books drwxr-xr-x 2 gsd users 4096 jan 23 23.17 Calibre Library -rw-r--r-- 1 gsd users 2083012 jan 11 00.50 dell_hspa_config.pdf drwxr-xr-x 3 gsd users 4096 febr 20 18.54 Dokumentumok -rw-r--r-- 1 gsd users 550 jan 30 19.19 d.txt drwxr-xr-x 7 gsd users 4096 febr 18 23.41 ftp drwxr-xr-x 3 gsd users 4096 2007 jún 21 ICAClient drwxr-xr-x 4 gsd users 4096 jan 29 22.37 Képek -rw-r--r-- 1 gsd users 341213 febr 6 14.32 Kőzettan.pdf drwxr-xr-x 2 671 users 4096 okt 3 21.20 Letöltések drwxr-xr-x 2 gsd users 4096 szept 22 02.17 Nyilvános drwxr-xr-x 2 gsd users 4096 szept 22 02.09 public_html drwxr-xr-x 2 gsd users 4096 szept 22 02.17 Sablonok drwxr-xr-x 6 gsd users 4096 febr 13 20.38 Videók drwxr-xr-x 5 gsd users 4096 jan 26 23.08 work drwxr-xr-x 3 gsd users 4096 okt 1 23.46 Zenék