From 5a265a0ce6b1793a879bd227fa9b24ebd08fd15c Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Sun, 01 Apr 2012 03:42:44 -0400 Subject: Move UNIX shell workshop files under guides. --- (limited to 'shell-workshop/session.html') diff --git a/shell-workshop/session.html b/shell-workshop/session.html deleted file mode 100644 index 1a5da6e..0000000 --- a/shell-workshop/session.html +++ /dev/null @@ -1,381 +0,0 @@ -

Shell Input

- -
sh@sleipnir1:~$ vim hello.sh
-sh@sleipnir1:~$ cat hello.sh
-echo Hello world
-sh@sleipnir1:~$ sh hello.sh
-Hello world
-sh@sleipnir1:~$ sh -c 'echo Hello world'
-Hello world
-sh@sleipnir1:~$ echo Hello world
-Hello world
-
- -

Comments, Magic Number Behavior, and File Modes

- -
sh@sleipnir1:~$ vim hello.sh
-sh@sleipnir1:~$ cat hello.sh
-#! /bin/sh
-# This is a comment
-echo Hello world
-sh@sleipnir1:~$ ./hello.sh
--su: ./hello.sh: Permission denied
-sh@sleipnir1:~$ ls -l hello.sh
--rw-r--r-- 1 sh sh 48 Mar 30 13:26 hello.sh
-sh@sleipnir1:~$ chmod a+x hello.sh
-sh@sleipnir1:~$ ls -l hello.sh
--rwxr-xr-x 1 sh sh 48 Mar 30 13:26 hello.sh
-sh@sleipnir1:~$ ./hello.sh
-Hello world
-
- -

Field Splitting and Quoting

- -
sh@sleipnir1:~$ mkdir foo bar
-sh@sleipnir1:~$ ls
-bar  foo  hello.sh
-sh@sleipnir1:~$ rmdir foo bar
-sh@sleipnir1:~$ mkdir foo\ bar
-sh@sleipnir1:~$ ls
-foo bar  hello.sh
-sh@sleipnir1:~$ rmdir foo\ bar
-sh@sleipnir1:~$ ls
-hello.sh
-sh@sleipnir1:~$ mkdir 'foo bar
-> baz'
-sh@sleipnir1:~$ ls
-foo bar?baz  hello.sh
-sh@sleipnir1:~$ rmdir 'foo bar
-> baz'
-sh@sleipnir1:~$ ls
-hello.sh
-sh@sleipnir1:~$ mkdir "foo bar baz"
-sh@sleipnir1:~$ ls
-foo bar baz  hello.sh
-
- -

Tilde Expansion

- -
sh@sleipnir1:~$ echo ~
-/home/sh
-sh@sleipnir1:~$ ls ~sh-foo
-another-directory  another-file  bar  baz  foo  some-directory  some-file
-sh@sleipnir1:~$ ls ~sh-foo/some-directory
-Hey, this is a cool file!
-
- -

Pathname Expansion

- -
sh@sleipnir1:~$ echo ~sh-foo/*-file
-/home/sh-foo/another-file /home/sh-foo/some-file
-sh@sleipnir1:~$ echo ~sh-foo/ba*/file
-/home/sh-foo/bar/file /home/sh-foo/baz/file
-sh@sleipnir1:~$ echo ~sh-foo/ba[a-r]/file
-/home/sh-foo/bar/file
-sh@sleipnir1:~$ echo ~sh-foo/ba[p-z]/file
-/home/sh-foo/bar/file /home/sh-foo/baz/file
-
- -

Parameter Assignment

- -
sh@sleipnir1:~$ myparam=foo
-sh@sleipnir1:~$ mynum=1
-
- -

Parameter Expansion

- -
sh@sleipnir1:~$ echo ${myparam}
-foo
-sh@sleipnir1:~$ echo ${nullparam:-default}
-default
-sh@sleipnir1:~$ echo ${#myparam}
-3
-sh@sleipnir1:~$ file=main.c
-sh@sleipnir1:~$ echo ${file%.c}.o
-main.o
-sh@sleipnir1:~$ dir=foo/bar/baz
-sh@sleipnir1:~$ echo ${dir##*/}
-baz
-
- -

Positional Parameters

- -
sh@sleipnir1:~$ vim pos-params.sh
-sh@sleipnir1:~$ cat pos-params.sh
-#! /bin/sh
-echo ${1}
-echo ${2}
-sh@sleipnir1:~$ chmod a+x pos-params.sh
-sh@sleipnir1:~$ ./pos-params.sh foo
-foo
-
-sh@sleipnir1:~$ sh pos-params.sh foo bar baz
-foo
-bar
-
- -

Special Parameters

- -
sh@sleipnir1:~$ vim spec-params.sh
-sh@sleipnir1:~$ cat spec-params.sh
-#! /bin/sh
-
-echo Number of positional parameters: ${#}
-echo Positional parameters: ${@}
-echo Script name: ${0}
-sh@sleipnir1:~$ sh spec-params.sh foo bar baz
-Number of positional parameters: 3
-Positional parameters: foo bar baz
-Script name: spec-params.sh
-
- -

Exit Statuses

- -
sh@sleipnir1:~$ vim spec-params.sh
-sh@sleipnir1:~$ cat spec-params.sh
-#! /bin/sh
-
-echo Number of positional parameters: ${#}
-echo Positional parameters: ${@}
-echo Script name: ${0}
-true
-echo ${?}
-false
-echo ${?}
-sh@sleipnir1:~$ sh spec-params.sh foo bar baz
-Number of positional parameters: 3
-Positional parameters: foo bar baz
-Script name: spec-params.sh
-0
-1
-
- -

Shell Variables and Links . and ..

- -
sh@sleipnir1:~$ echo ${HOME}
-/home/sh
-sh@sleipnir1:~$ echo ${PWD}
-/home/sh
-sh@sleipnir1:~$ ls
-foo bar baz  hello.sh  pos-params.sh  spec-params.sh
-sh@sleipnir1:~$ cd foo\ bar\ baz/
-sh@sleipnir1:~/foo bar baz$ echo ${PWD}
-/home/sh/foo bar baz
-sh@sleipnir1:~/foo bar baz$ ls .
-sh@sleipnir1:~/foo bar baz$ mkdir file1 file2
-sh@sleipnir1:~/foo bar baz$ ls .
-file1  file2
-sh@sleipnir1:~/foo bar baz$ ls ..
-foo bar baz  hello.sh  pos-params.sh  spec-params.sh
-sh@sleipnir1:~/foo bar baz$ cd ..
-sh@sleipnir1:~$ echo ${PWD}
-/home/sh
-sh@sleipnir1:~$ PS1='$ '
-$ PS1='PROMPT> '
-PROMPT> echo Hello
-Hello
-PROMPT> PS1='$ '
-$ echo Hello \
-> World
-Hello World
-
- -

Command Substitution

- -
$ filepath=$(basename ~sh-foo/bar/file)
-$ echo ${filepath}
-file
-
- -

Arithmetic Expansion

- -
$ echo $((2+3))
-5
-$ echo $((0x10 + 4))
-20
-$ i=0
-$ i=$(($i + 1))
-$ echo ${i}
-1
-$ i=$(($i + 1))
-$ echo ${i}
-2
-$ i=$(($i + 1))
-$ echo ${i}
-3
-
- -

Simple Commands

- -
$ i=0 echo Hello
-Hello
-
- -

Command Search and Execution

- -
$ echo ${PATH}
-/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
-$ ./hello.sh
-Hello world
-$ hello.sh
--su: hello.sh: command not found
-$ ls
-foo bar baz  hello.sh  pos-params.sh  spec-params.sh
-$ PATH=${PATH}:${HOME}
-$ echo ${PATH}
-/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/sh
-$ hello.sh
-Hello world
-
- -

Pipelines

- -
$ ! true
-$ echo ${?}
-1
-$ ! false
-$ echo ${?}
-0
-$ true
-$ echo ${?}
-0
-$ false
-$ echo ${?}
-1
-
- -

Lists

- -
$ false && echo foo || echo bar
-bar
-$ true || echo foo && echo bar
-bar
-
- -

test Command and if Construct

- -
$ [ foo = foo ] && echo equal || echo not equal
-equal
-$ if [ foo = foo ]; then echo equal else echo not equal; fi
-equal else echo not equal
-$ if [ foo = foo ]; then echo equal; else echo not equal; fi
-equal
-$ if [ foo = foo ]; then
->     echo equal
-> else
->     echo not equal
-> fi
-equal
-
- -

while Loop

- -
$ i=0
-$ while [ ${i} -lt 5 ]; do
->     echo ${i}
->     i=$(($i + 1))
-> done
-0
-1
-2
-3
-4
-$ vim param-loop.sh
-$ cat param-loop.sh
-while [ ${#} -gt 0 ]; do
-    echo Parameter: ${1}
-    shift
-done
-$ sh param-loop.sh foo bar baz
-Parameter: foo
-Parameter: bar
-Parameter: baz
-
- -

for Loop

- -
$ for param in foo bar baz; do
->     echo ${param}
-> done
-foo
-bar
-baz
-
- -

case Construct

- -
$ param=foo
-$ case ${param} in
->     f*)
->         echo starts with f
->         ;;
->     b*)
->         echo starts with b
->         ;;
-> esac
-starts with f
-
- -

Functions

- -
$ print_hello()
-> {
->     echo Hello world
-> }
-$ print_hello
-Hello world
-$ print_params()
-> {
->     echo ${@}
-> }
-$ print_params 1 2 3
-1 2 3
-
- -

Input/Output Redirection

- -
$ echo Hello world > hello-file
-$ cat hello-file
-Hello world
-$ echo Hello world > hello-file
-$ echo Hello world > hello-file
-$ echo Hello world > hello-file
-$ cat hello-file
-Hello world
-$ echo Hello world >> hello-file
-$ echo Hello world >> hello-file
-$ cat hello-file
-Hello world
-Hello world
-Hello world
-$ vim read-file.sh
-$ cat read-file.sh
-while read line; do
-    echo Line: ${line}
-done < myfile.txt
-$ sh read-file.sh
-Line: line one
-Line: line two
-Line: some other line
-$ vim read-file.sh
-$ cat read-file.sh
-while read field1 field2; do
-    echo Line: ${field1}, ${field2}
-done < myfile.txt
-$ sh read-file.sh
-Line: line, one
-Line: line, two
-Line: some, other line
-$ echo Hello world > /dev/null
-$ sh -c not-a-command
-sh: 1: not-a-command: not found
-$ sh -c not-a-command 2> /dev/null
-$ while read line; do
->     echo Line: ${line}
-> done <<EOF
-> this is input
-> some more input
-> EOF
-Line: this is input
-Line: some more input
-
-- cgit v0.9.1