0% found this document useful (0 votes)
17 views

Lecture 04

The document discusses bash scripting and command line tools. It covers topics like writing bash scripts, variables, error checking, file transfer tools like tar and scp, stream redirection, and piping. The lecture also demonstrates commands like grep, stream redirection, and piping input/output.

Uploaded by

dire
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views

Lecture 04

The document discusses bash scripting and command line tools. It covers topics like writing bash scripts, variables, error checking, file transfer tools like tar and scp, stream redirection, and piping. The lecture also demonstrates commands like grep, stream redirection, and piping input/output.

Uploaded by

dire
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 18

Lecture Participation Poll #4

Log onto pollev.com/cse374


Or
Text CSE374 to 22333

Lecture 4: Bash Scripts


CSE 374: Intermediate
Programming Concepts and
Tools

1
Administrivia
▪Course webpage live!
▪HW1 actually posted
- after this lecture you now have everything you need
- klaatu accounts created
- set up SSH
- ssh [email protected]
- password: tempPassword
- passwd #will let you change your password
- issues fill out this form: https://forms.gle/sFojyRU4eC8kJT4T9
- Grading scripts are still being adjusted

CSE 374 AU 20 - KASEY CHAMPION 2


Terminal Text Editing
▪While working with the text interface for the OS often it is helpful to use the text interface editors
- You do not have to use any of these in this course
- Editors are a matter of preference

PICO EMACS VIM

CSE 374 AU 20 - KASEY CHAMPION 3


Working in VS Code
1. Install VS Code
a. it’s free!
2. ctrl + shift + P or F1 to
open SSH dialog
a. enter in klaatu account info
3. open folder to see your
files
4. use terminal on bottom

4
Transferring files between local and remote
▪tar – tape archive – compresses directory of files for easy transfer (like zip or archive)
- tar -c <directory to compress>
- tar –c –v –f myTarFile.tar /home/champk/
- -c – creates new .tar archive file
- -v - Verbosely show the tar process
- -f - to decide name of tar file
- tar –x <file to extract>
- tar –x –v myTarFile.tar

▪wget – non-interactive download of files from the web supporting http, https and FTP
- Non interactive means it can work in the background (helpful if the files take a while)
- wget http://website.come/files/file.zip

▪scp – secure copy – uses ssh protocol to transfer files between different hosts
- scp [email protected]:file.txt /local/directory copies file.txt from remote host to local directory
- scp file.txt [email protected]:/remote/directory/ copies file.txt from local host to remote directory

▪You can always use a file transfer GUI like FileZilla uses FTP or SFTP, available for all platforms

CSE 374 AU 20 - KASEY CHAMPION 5


Writing Scripts
▪Instead of writing commands directly into terminal save them in a file
- Use file extension “.sh”

▪Bash can run these files as executables


- Add line at top of file to tell computer this should be run using bash
#! /bin/sh
▪# by itself makes a comment
- Always include header comment with usage instructions

▪Give the file execution permissions


chmod u+x myscript.sh
▪Stop bash script on first failure by adding set –e at top of script

CSE 374 AU 20 - KASEY CHAMPION 6


Bash Script Variables
▪When writing scripts you can use the following default variables
$# - stores number of parameters entered
Ex: if [$# -lt 1] tests if script was passed less than 1 argument
$N - returns Nth argument passed to script
Ex: sort $1 passes first string passed into script into sort command
$0 – command name
Ex: echo “$0 needs 1 argument” prints “<name of script> needs 1 argument”
$* returns all arguments
$@ returns a space separated string containing all arguments
”$@” prevents args originally quoted from being read as multiple args

CSE 374 AU 20 - KASEY CHAMPION 7


Script Error Checking
▪If incorrect number of arguments passed
if [ $# -ne 2 ]; then
echo “$0 requires 2 arguments” >&2
exit 1
fi
- Check if file exists
if [ ! -f $1 ]; then
echo "File does not exist" <& 1
exit 1
fi

8
Exit Codes
The command “exit” exits a shell and ends a shell-script program
ctrl+c aborts a process

When a process exits you can use a number to indicate either a success or failure
0 = success
1 or any non-zero positive number = error

9
grep
▪Search for a given string within a given file
- grep [options] pattern [files]
- EX: grep “computer” /usr/share/dict/words

▪Helpful Options
- -c : prints count of lines with given pattern
- -h : display matched lines (without filenames)
- -i : ignore case when matching
- -l : display list of filenames with matches

https://www.geeksforgeeks.org/grep-command-in-unixlinux/ CSE 374 AU 20 - KASEY CHAMPION 10


Demo: Grep
CSE 374 AU 20 - KASEY CHAMPION 11
12
Input / Output Streams
▪stdin – Standard in (File Descriptor = 0)
- Keyboard input typed into the terminal

▪stdout – Standard out (File Descriptor = 1)


- Results of a process after it has completed printed to the
screen of the terminal

▪stderr – Standard error (File Descriptor = 2)


- Results of a process if it exits in error printed to the screen of
the terminal

CSE 374 AU 20 - KASEY CHAMPION 13


Redirecting Streams
Redirection Syntax:
- < yourInput
- > yourOutput
- >> appendYourOutput
- 2> yourError
- &> yourOutputAndError
- Stdout & stderr default to terminal

Examples
- cmd > file sends stdout to file
- cmd 2> file sends stderr to file
- cmd 1> output.txt 2> error.txt redirects both stdout and stderr to files
- cmd < file accepts input from file
- Instead of directly putting arg in command, pass args in from given file
- cat file1.txt file2.txt file3.txt or cat < fileList.txt

https://www.gnu.org/software/bash/manual/html_node/Redirections.html CSE 374 AU 20 - KASEY CHAMPION 14


Redirection Syntax

15
I/O Piping
We can feed the stdout of one process to the stdin of
another using a pipe (“|”)
- Data flows from process to the other through multiple
transformations seamlessly
- Similar to redirection, but specifically passes streams into other
programs instead of their defaults

Example:
- Instead of:
- du –h –d 1 . > sizes.txt
- grep ‘M’ sizes.txt
- We can use piping
- du – h –d 1 . | grep ‘M’

▪Piping is effective when you have one set of data that


needs to be transformed multiple times
- Cmd1 | cmd2 – pipe output of cmd1 into input of cmd2

Video: The Magic of Piping CSE 374 AU 20 - KASEY CHAMPION 16


What is the difference between | and >?
▪What is the difference between | and >?
- Pipe is used to pass output to another program or utility
- Redirect is used to pass output to either a file or stream
- thing1 > thing2 runs thing1 and then sends the stdout stream to thing2, if these are files thing2 will be overwritten
- thing1 > tempFile && thing2 <tempFile sends stdout of thing1 to stdin of thing2 without overwriting files
- Equivalent to thing1 | thing2 much more elegant!

https://askubuntu.com/questions/172982/what-is-the-difference-between-redirection-and-pipe CSE 374 AU 20 - KASEY CHAMPION 17


Demo: Stream Redirection
CSE 374 AU 20 - KASEY CHAMPION 18

You might also like