Part 1: Basic Commands/Utilities
Final Exam May 17th 3:00~4:00pm S-3-143 Same types of questions as in mid-term
Basic Utilities ls, cat, echo ls -l ls -a cat file1 file2 file3 … e.g., regular file or directory, permissions, file size ls -a cat file1 file2 file3 … echo “hello world” > file echo $VAR, echo hello* echo –n “hello world”
Basic Utilities more, less, head, tail pwd, cd head -5 file tail -f file pwd, cd cp, mv, rm, mkdir, rmdir ‘-i’ option ‘-r’ option: rm –r dir1, cp –r dir1 dir2 rmdir an empty directory
Basic Utilities sort, wc, grep, |(pipe) wc -l file, wc –c file grep “keyword” file grep -v sort linux | head -5 command1 | command2 command1 > temp command2 < temp rm temp
Part 2: File Systems
Filename and Path Hierarchical tree structure Absolute path name ls /home/it244/it244 Relative path name cd /home/it244 ls it244 ‘.’ ‘..’ ‘~’ ‘*’ ‘?’ echo hello*, echo ./.?a*
Access Permissions r, w, x (chmod) Execute permission of a directory chmod a+rw file chmod a=rx file chmod 644 file Execute permission of a directory A directory is a table of files (filename:meta) Executable means searchable
Access Permissions Operations on book/book1 ls book/book1 book ( x ) cat book/book1 book1 ( r ), book ( x ) rm book/book1 book ( xw ), book1 ( w )
Links Hard link and soft link Hard link cannot refer to a directory Soft link can point to a nonexistent file $ ln -s hello hello.sl $ rm hello $ echo “new” > hello $ cat hello.sl new
Part 3: Bash/Shell Scripting
Execute Commands Foreground and background jobs Group commands command &, CTRL+Z difference between a suspended job and a background job, PID jobs, ps, kill, bg, fg Group commands (cmd1; cmd2; cmd3)
Redirection Standard input, output, error output cat file1 file2 > out 2>err cat file1 file2 &> out cat file1 file2 > out 2>&1 Redirected output will not be displayed on the screen.
Variables System variables User defined variables $PATH, $PWD, $HOME VAR=hello export VAR=hello declare; declare -x
Variables New shell for executing a script $cat script1 echo $VAR VAR=new $VAR=old;./script1;echo $VAR $VAR=new ./script1;echo $VAR $export VAR=old;./script1;echo $VAR
Expansion/ Quote Types Single quote suspends all expansions echo hello*; echo ~ echo $VAR echo $(pwd) echo $((1+1)) VAR=hello* Single quote suspends all expansions
Control Flow if..then..fi, if..then..else..fi, while test-command do commands done for loop-index in argument-list
Control Flow Conditions test $# -eq 0 [ -f “$1” ] [ condition1 –a condition2 ], -o [[ && ]], (( || )) Exit status $? if [ read <file $line ] …
Expressions Arithmetic Logic a=5;b=3;echo $((a%b)) echo $((a+++3)) cat abc && ls echo $?
Control Flow Boolean operators cond1 cond2 cond1 && cond2 True False false
Control Flow Boolean operators Short circuiting $((a=2, b=2)) $echo $a $b $((--a>2 || b++))
Control Flow Boolean operators Short circuiting (($#==2)) || echo "Usage:require two arguments” mkdir $1 && cp file1 $1
Variables Arguments $$, $? $1-$n, $0, $#, $@ set shift set a 123 hello echo $1 $2 $3 set $(date) shift echo $@ $$, $?
File I/O exec read exec 3 < infile Write to a file exec 4 > outfile read read -p “Enter sth: ” input1 input2 read <&3 line, read –u3 line Determine the end of a file $line has no value ‘read’ returns false Write to a file echo “abc” >&4
Expressions Arithmetic Logic a=5;b=3;echo $((a%b)) echo $((a+++3)) cat abc && ls echo $?
Part 4: Perl/AWK/SED
Run a Program Perl AWK SED perl simple.pl perl –e ‘print “hi\n”’ gawk -f simple file gawk ‘/chevy/ {print}’ file SED sed -f simple file sed ‘/line/ p’ file Stand-alone scripts #!/usr/bin/perl #!/usr/bin/gawk -f #!/bin/sed -f
Patterns AWK SED awk ‘/chevy/ {print}’ cars gawk ‘$1 ~ /h/’ cars gawk ‘$5 > 2000 && $5<6000’ cars SED sed -n ‘3,6 p’ lines sed –n ‘s/line/sentence/w temp’ lines
File I/O in perl Read Write open ($infile, '<', “filename”); while ($line=<$infile>){ print $line; } $line=<> Write $filename="./log"; open($outfile,'>',$filename); print $outfile "Hello world!\n";
Questions If we execute the following sequence of commands in order, what are the values of variables a, b and the output AFTER executing each line? $((a=1, b=2)) $echo $((a-- + b++)) a=_0_, b=_3_, output=_3_ $echo $((a++ + ++b)) a=_1_, b=_4_, output=_4_
Questions Read the following shell script and explain its function. $ cat script1 #!/bin/bash count=0 for i in * then ((count++)) fi echo $count
Questions Read the following shell script and answer the questions $cat script1 #!/bin/bash exec 3<$1 exec 4<$2 exec 5>$3 while read line <&3 do echo “$line” >&5 done while read line <&4 Q1. The script requires 3 filenames as arguments, e.g., ./script1 file1 file2 file3 Which files are input files and which are output files? Q2. Inside the while-loop, why variable “$line” has to be enclosed by double quotes?