16. 19.06.2013
03.07.2013 @pvb265 #imolug
shell 1970: runcom (Multics) JCL (s/390)
1975-1978: Steve Bourne, at Bell Labs wrote sh
1978-1979: Bill Joy at BSD wrote csh
1981: tcsh is a fork of csh POSIX compliance
1983: David Korn wrote ksh
1989: Brian Fox wrote bash
1990: Paul Falstad wrote zsh
1997: bash 2.0
2004: bash 3.0
2011: bash 4.2 latest (now) stable
27. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Who said system to invoke bash
UnderWater
[root@www ~]# cat /etc/passwd|head -5
root :x :0 :0 :root :/root :/bin/bash
bin :x :1 :1 :bin :/bin :/sbin/nologin
daemon :x :2 :2 :daemon :/sbin :/sbin/nologin
adm :x :3 :4 :adm :/var/adm :/sbin/nologin
lp :x :4 :7 :lp :/var/spool/lpd :/sbin/nologin
Username Password UID GID Description Home Initialprogram
Linux Users Definitions
28. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Who said system to invoke bash
UnderWater
[root@www ~]# cat /etc/passwd|head -5
root :x :0 :0 :root :/root :/bin/bash
bin :x :1 :1 :bin :/bin :/sbin/nologin
daemon :x :2 :2 :daemon :/sbin :/sbin/nologin
adm :x :3 :4 :adm :/var/adm :/sbin/nologin
lp :x :4 :7 :lp :/var/spool/lpd :/sbin/nologin
Username Password UID GID Description Home Initialprogram
[root@www ~]# ls -l /etc/shells
-rw-r--r-- 1 root root 60 15 feb 2012 /etc/shells
Linux Users Definitions
29. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Who said system to invoke bash
UnderWater
[root@www ~]# cat /etc/passwd|head -5
root :x :0 :0 :root :/root :/bin/bash
bin :x :1 :1 :bin :/bin :/sbin/nologin
daemon :x :2 :2 :daemon :/sbin :/sbin/nologin
adm :x :3 :4 :adm :/var/adm :/sbin/nologin
lp :x :4 :7 :lp :/var/spool/lpd :/sbin/nologin
Username Password UID GID Description Home Initialprogram
[root@www ~]# ls -l /etc/shells
-rw-r--r-- 1 root root 60 15 feb 2012 /etc/shells
[root@www ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
Linux Users Definitions
30. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
what after login?
31. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
what after login?
32. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
33. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
1
2
4
3
5
34. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
1
2
4
3
5
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. $i
else
. $i >/dev/null 2>&1
fi
fi
done
35. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
1
2
4
3
5
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. $i
else
. $i >/dev/null 2>&1
fi
fi
done
36. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
1
2
4
3
5
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
37. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
1
2
4
3
5
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
38. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
1
2
4
3
5
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
39. 19.06.2013
03.07.2013 @pvb265 #imolug
bash the way to suit your bash
UnderWater
[root@www ~]# ls -l /etc/profile
-rw-r--r-- 1 root root 1029 21 set 2009 /etc/profile
[root@www ~]# ls -l /root/.bash_profile
-rw-r--r-- 1 root root 191 6 gen 2007 /root/.bash_profile
[root@www ~]# ls -l /etc/profile.d/
totale 104
-rwxr-xr-x 1 root root 766 21 lug 2011 colorls.csh
-rwxr-xr-x 1 root root 727 21 lug 2011 colorls.sh
-rwxr-xr-x 1 root root 3015 19 ago 2011 lang.csh
-rwxr-xr-x 1 root root 3466 19 ago 2011 lang.sh
…
[root@www ~]# ls -l /root/.bashrc
-rw-r--r-- 1 root root 176 6 gen 2007 /root/.bashrc
[root@www ~]# ls -l /etc/bashrc
-rw-r--r-- 1 root root 1708 21 set 2009 /etc/bashrc
what after login?
1
2
4
3
5
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
41. 19.06.2013
03.07.2013 @pvb265 #imolug
bash POSIX 1003.1 standard (IEEE Std 1003.1)
pazh-ics not poh-six
Command Interpreter
Default 4 Linux and Mac OS X
Bourne Again Shell ( as rebird or another Bourne)
A superset of Bourne shell
Include history and directory stack from C shell
Relative New concepts in the recents versions:
. 3.0 regex like in perl
. 4.0 hash to implement awk
Overview
42. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
43. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
[root@www ~]#set -o vi
Esc-k Esc-j
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
44. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
[root@www ~]#set -o vi
Esc-k Esc-j
beginning-of-line (C-a)
end-of-line (C-e)
forward-char (C-f)
backward-char (C-b)
forward-word (M-f)
backward-word (M-b)
clear-screen (C-l)
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
45. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
[root@www ~]# ls /root/.bash
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
46. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
[root@www ~]# ls /root/.bash +TAB+TAB
.bash_history .bash_profile .bashrc
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
47. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
[root@www ~]# ls /root/.bash +TAB+TAB
.bash_history .bash_profile .bashrc
[root@www ~]# mkfs +TAB+TAB
mkfs mkfs.ext2 mkfs.ext3 mkfs.vfat
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
48. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
export HISTFSIZE=10000
export HISTFILESIZE=10000
shopt -s histappend
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
49. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
$PS1 - primary prompt string, default s-v$ .
$PS2 - secondary, default is >
$PS3 - prompt for the select command
$PS4 - during an execution trace. default is +
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
50. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Overview
$PS1 - primary prompt string, default s-v$ .
$PS2 - secondary, default is >
$PS3 - prompt for the select command
$PS4 - during an execution trace. default is +
d : date "Tue May 26"
h : hostname up to the first '.'
t : current time HH:MM:SS
u : username of the current user
w : current working directory
$ : if UID is 0, a #, otherwise a $
Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
51. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
/etc/profile
/etc/profile.d/*
/root/.bash_profile
/root/.bashrc
/etc/bashrc
52. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
/etc/profile
/etc/profile.d/*
/root/.bash_profile
/root/.bashrc
/etc/bashrc
53. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
[root@www ~]# dirs
~
[root@www ~]# pushd /etc
/etc ~
[root@www etc]# pushd /tmp
/tmp /etc ~
[root@www tmp]# popd
/etc ~
[root@www etc]# dirs
/etc ~
54. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
bash -r
rbash
bash --restricted
55. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
bash -r
rbash
bash --restricted
vi
:set shell=/bin/sh
:shell
~$ rbash
~$ cd /
rbash: cd: restricted
~$ bash
~$ cd /
/$
56. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
bash -r
rbash
bash --restricted
vi
:set shell=/bin/sh
:shell
~$ rbash
~$ cd /
rbash: cd: restricted
~$ bash
~$ cd /
/$
rssh
57. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
- When a command in the hash table no longer
exists, Bash will re-search $PATH to find the
new location. This is also available with
‘shopt -s checkhash’.
- The message printed by the job control code
and builtins when a job exits with a non-zero
status is ‘Done(status)’.
- The message printed by the job control code
and builtins when a job is stopped is
‘Stopped(signame)’, where signame is,
for example, SIGTSTP.
And other 42...
58. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
to test $file
[ -e filepath ] true if file exists.
[ -x filepath ] true if file exists and exec.
[ -d filepath ] true if dir exists.
[ expr1 -a expr2 ] and condition
[ expr1 -o expr2 ] or condition
59. 19.06.2013
03.07.2013 @pvb265 #imolug
bash Function Implemented:
Command line editing
Command line completion
Unlimited size command history
Prompt control
Bash startup files
The Directory Stack
The Restricted Shell
Bash POSIX Mode
Bash conditional expressions
Overview
to test $file
[ -e filepath ] true if file exists.
[ -x filepath ] true if file exists and exec.
[ -d filepath ] true if dir exists.
[ expr1 -a expr2 ] and condition
[ expr1 -o expr2 ] or condition
for arithmetics
[ $VAR1 OP $VAR2 ] true if file exists.
OP := -gt -eq -ne -lt -ge -le