the bash shell and younmjxv3/articles/shell.pdf · 2020-06-10 · i linux has a bunch of shells:...

46
The Bash Shell and You Nathan Jarus I Slides: http://web.mst.edu/ ~ nmjxv3/articles/shell.pdf I Files: http://web.mst.edu/ ~ nmjxv3/articles/shell/ October 3, 2017 1 / 22

Upload: others

Post on 28-Jun-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

The Bash Shell and You

Nathan Jarus

I Slides: http://web.mst.edu/~nmjxv3/articles/shell.pdf

I Files: http://web.mst.edu/~nmjxv3/articles/shell/

October 3, 2017

1 / 22

Page 2: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

What’s so cool about shells?

Introduction 2 / 22

Page 3: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

What’s so cool about shells?

I You can find ‘em on the beach

I They look nice

I Cool ocean sounds

I Sometimes have crabs inside!

Introduction 2 / 22

Page 4: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

What’s so cool about shells?

I Pretty fast for some tasks

I Works well over a slow internet connection

I Can construct complex tools out of simple ones

I Easy to automate tasks!

Introduction 2 / 22

Page 5: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

What is a shell, anyway?

I A shell takes commands, runs them, and shows you the output

I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, . . .

I Shells usually provide some tools for connecting programstogether, running multiple programs, &c.

Is PuTTY a shell? Nope, it’s a terminal!

I Terminals connect your keyboard and screen to your shellI They run on your machine and connect to a shell (either on

your machine or somewhere else)I Linux: xterm, gnome-terminal, &c.I Mac: Terminal.appI Windows: PuTTY

I Can connect to remote shells via ssh (secure shell)

Introduction 3 / 22

Page 6: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

What is a shell, anyway?

I A shell takes commands, runs them, and shows you the output

I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, . . .

I Shells usually provide some tools for connecting programstogether, running multiple programs, &c.

Is PuTTY a shell?

Nope, it’s a terminal!

I Terminals connect your keyboard and screen to your shellI They run on your machine and connect to a shell (either on

your machine or somewhere else)I Linux: xterm, gnome-terminal, &c.I Mac: Terminal.appI Windows: PuTTY

I Can connect to remote shells via ssh (secure shell)

Introduction 3 / 22

Page 7: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

What is a shell, anyway?

I A shell takes commands, runs them, and shows you the output

I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, . . .

I Shells usually provide some tools for connecting programstogether, running multiple programs, &c.

Is PuTTY a shell? Nope, it’s a terminal!

I Terminals connect your keyboard and screen to your shellI They run on your machine and connect to a shell (either on

your machine or somewhere else)I Linux: xterm, gnome-terminal, &c.I Mac: Terminal.appI Windows: PuTTY

I Can connect to remote shells via ssh (secure shell)

Introduction 3 / 22

Page 8: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Navigating your filesystem

I pwd: Print Working Directory

I cd: Change DirectoriesI cd with no arguments takes you to your home directoryI cd - takes you to the last directory you were in

I ls: List (files and directories)I -l Display a detailed list of information about each fileI -h Display human-readable file sizesI -a Display all files, even hidden ones (files that start with a .)

Some neat tricks:

I ls *.txt

I ls **/*.cpp

Files ‘n whatnot 4 / 22

Page 9: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Navigating your filesystem

I pwd: Print Working DirectoryI cd: Change Directories

I cd with no arguments takes you to your home directoryI cd - takes you to the last directory you were in

I ls: List (files and directories)I -l Display a detailed list of information about each fileI -h Display human-readable file sizesI -a Display all files, even hidden ones (files that start with a .)

Some neat tricks:

I ls *.txt

I ls **/*.cpp

Files ‘n whatnot 4 / 22

Page 10: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Navigating your filesystem

I pwd: Print Working DirectoryI cd: Change Directories

I cd with no arguments takes you to your home directoryI cd - takes you to the last directory you were in

I ls: List (files and directories)I -l Display a detailed list of information about each fileI -h Display human-readable file sizesI -a Display all files, even hidden ones (files that start with a .)

Some neat tricks:

I ls *.txt

I ls **/*.cpp

Files ‘n whatnot 4 / 22

Page 11: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Navigating your filesystem

I pwd: Print Working DirectoryI cd: Change Directories

I cd with no arguments takes you to your home directoryI cd - takes you to the last directory you were in

I ls: List (files and directories)I -l Display a detailed list of information about each fileI -h Display human-readable file sizesI -a Display all files, even hidden ones (files that start with a .)

Some neat tricks:

I ls *.txt

I ls **/*.cpp

Files ‘n whatnot 4 / 22

Page 12: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Scooting files around

WARNING: These programs will happily destroy all your files ifyou ask them to

I mv: Move (or rename) filesI -i: Interactively ask before overwriting files

I cpI -r: Recursively copy directoriesI -i: Interactively ask before overwriting files

I rmI -f: Forcibly remove files (even if write-protected)I -r: Recursively remove directoriesI -i: Interactively ask before overwriting files

Another neat trick: mv bob.{coo,cpp}

Files ‘n whatnot 5 / 22

Page 13: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Scooting files around

WARNING: These programs will happily destroy all your files ifyou ask them to

I mv: Move (or rename) filesI -i: Interactively ask before overwriting files

I cpI -r: Recursively copy directoriesI -i: Interactively ask before overwriting files

I rmI -f: Forcibly remove files (even if write-protected)I -r: Recursively remove directoriesI -i: Interactively ask before overwriting files

Another neat trick: mv bob.{coo,cpp}

Files ‘n whatnot 5 / 22

Page 14: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Scooting files around

WARNING: These programs will happily destroy all your files ifyou ask them to

I mv: Move (or rename) filesI -i: Interactively ask before overwriting files

I cpI -r: Recursively copy directoriesI -i: Interactively ask before overwriting files

I rmI -f: Forcibly remove files (even if write-protected)I -r: Recursively remove directoriesI -i: Interactively ask before overwriting files

Another neat trick: mv bob.{coo,cpp}

Files ‘n whatnot 5 / 22

Page 15: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Scooting files around

WARNING: These programs will happily destroy all your files ifyou ask them to

I mv: Move (or rename) filesI -i: Interactively ask before overwriting files

I cpI -r: Recursively copy directoriesI -i: Interactively ask before overwriting files

I rmI -f: Forcibly remove files (even if write-protected)I -r: Recursively remove directoriesI -i: Interactively ask before overwriting files

Another neat trick: mv bob.{coo,cpp}

Files ‘n whatnot 5 / 22

Page 16: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Scooting files around

WARNING: These programs will happily destroy all your files ifyou ask them to

I mv: Move (or rename) filesI -i: Interactively ask before overwriting files

I cpI -r: Recursively copy directoriesI -i: Interactively ask before overwriting files

I rmI -f: Forcibly remove files (even if write-protected)I -r: Recursively remove directoriesI -i: Interactively ask before overwriting files

Another neat trick: mv bob.{coo,cpp}

Files ‘n whatnot 5 / 22

Page 17: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Help!

I help: Help with built-in Bash commands and featuresI man: Help with E V E R Y T H I N G

I Scroll with arrow keys, j / k , or PgUp and PgDn

I q quitsI To search for something: /search-term Enter

I n goes to next match; N goes to previous matchI h shows more navigation hints

Files ‘n whatnot 6 / 22

Page 18: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Looking at stuff

I cat: Put the contents of one or more files on the screen

I less: Display the contents of a file one page at a time

I head and tail: Display the first or last ten lines of a file

Look around you 7 / 22

Page 19: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Looking at stuff

I cat: Put the contents of one or more files on the screen

I less: Display the contents of a file one page at a time

I head and tail: Display the first or last ten lines of a file

Look around you 7 / 22

Page 20: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Looking for stuff

I find: Find files in a directory (and do stuff to them)I The first argument is a directory to search inI After that you can specify things to search for:

I -name: Search by name or globI -type: Search for files or directories

I After that you can specify an action:I -ls: Show file output like ls -l doesI -delete: Delete files!I -exec: Execute a command

I grep: Search for stuff inside filesI -i: Perform case-insensitive matchI -v: Invert the match (print lines that don’t match)I -C 5: Show 5 lines of context around matches

Just look around you 8 / 22

Page 21: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Looking for stuff

I find: Find files in a directory (and do stuff to them)I The first argument is a directory to search inI After that you can specify things to search for:

I -name: Search by name or globI -type: Search for files or directories

I After that you can specify an action:I -ls: Show file output like ls -l doesI -delete: Delete files!I -exec: Execute a command

I grep: Search for stuff inside filesI -i: Perform case-insensitive matchI -v: Invert the match (print lines that don’t match)I -C 5: Show 5 lines of context around matches

Just look around you 8 / 22

Page 22: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Standard input and output

Every program has one “input stream” (called STDIN) and two“output streams” (called STDOUT and STDERR). In C++, STDIN isconnected to cin, STDOUT to cout, and STDERR to cerr.

my programSTDIN

STDOUT

STDERR

Typically STDIN reads from your keyboard and STDOUT (andSTDERR) write to the screen.

Plumbing 9 / 22

Page 23: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Writing output to files

You can use > and >> to redirect a command’s output to a fileinstead!

echo "Hello there" > hello.txt

echo "Hello there" > hello.txtSTDOUT

Plumbing 10 / 22

Page 24: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Writing output to files

You can use > and >> to redirect a command’s output to a fileinstead!

echo "Hello there" > hello.txt

echo "Hello there" > hello.txtSTDOUT

Plumbing 10 / 22

Page 25: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Capturing STDERR

Typically, you want to capture BOTH standard output andstandard error. To do this, redirect standard error into standardoutput with the incantation 2>&1.

g++ errors.cpp > errors.txt 2>&1

g++ errors.cpp2>&1

> errors.txt1

2

Plumbing 11 / 22

Page 26: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Capturing STDERR

Typically, you want to capture BOTH standard output andstandard error. To do this, redirect standard error into standardoutput with the incantation 2>&1.

g++ errors.cpp > errors.txt 2>&1

g++ errors.cpp2>&1

> errors.txt1

2

Plumbing 11 / 22

Page 27: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Writing output to other programs

You can also redirect one program’s STDOUT to another program’sSTDIN! This is done with the pipe (|) character.

echo "I love to program" | less

echo "I love to program" lessSTDOUT

Plumbing 12 / 22

Page 28: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Writing output to other programs

You can also redirect one program’s STDOUT to another program’sSTDIN! This is done with the pipe (|) character.

echo "I love to program" | less

echo "I love to program" lessSTDOUT

Plumbing 12 / 22

Page 29: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Shell script anatomy

#!/bin/bash

g++ *.cpp -o program

./program

A shell script is comprised of two things:

1. A “shebang” line: starts with #!; contains the command thatexecutes the script

2. A bunch of bash commands

Scripting 13 / 22

Page 30: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Variables and Arguments

I To assign a value to a variable: num cows=5 (note: NOSPACES)

I To use a variable: $num cows

Command-line arguments live in numbered variables:

I $0: The name of the program

I $1: The first argument

I $2: The second argument (and so on and so forth)

#! /bin/bash

g++ *.cpp -o $1

./$1

Scripting 14 / 22

Page 31: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Variables and Arguments

I To assign a value to a variable: num cows=5 (note: NOSPACES)

I To use a variable: $num cows

Command-line arguments live in numbered variables:

I $0: The name of the program

I $1: The first argument

I $2: The second argument (and so on and so forth)

#! /bin/bash

g++ *.cpp -o $1

./$1

Scripting 14 / 22

Page 32: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Variables and Arguments

I To assign a value to a variable: num cows=5 (note: NOSPACES)

I To use a variable: $num cows

Command-line arguments live in numbered variables:

I $0: The name of the program

I $1: The first argument

I $2: The second argument (and so on and so forth)

#! /bin/bash

g++ *.cpp -o $1

./$1

Scripting 14 / 22

Page 33: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Checking for failures

Our script has two problems right now:

1. If our code doesn’t compile, we probably don’t want it to run!

2. If the user doesn’t offer a program name, the error message isnot very nice

More special variables:

I $?: The return value of the last program run

I $#: The number of command-line arguments passed

Scripting 15 / 22

Page 34: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Checking for failures

Our script has two problems right now:

1. If our code doesn’t compile, we probably don’t want it to run!

2. If the user doesn’t offer a program name, the error message isnot very nice

More special variables:

I $?: The return value of the last program run

I $#: The number of command-line arguments passed

Scripting 15 / 22

Page 35: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Checking for failures

#! /bin/bash

progname="program"

if [[ $# -ge 1 ]]; then

progname=$1

fi

g++ *.cpp -o $progname

if [[ $? -eq 0 ]]; then

./$progname

fi

Scripting 16 / 22

Page 36: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Doing stuff to a bunch of files

Let’s pretend we don’t know about find for a second. How wouldwe make a backup copy of every one of our shell scripts?

With a for loop!

#! /bin/bash

for file in *.sh; do

echo "Copying $file to $file.bak"

cp $file $file.bak

done

Scripting 17 / 22

Page 37: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Doing stuff to a bunch of files

Let’s pretend we don’t know about find for a second. How wouldwe make a backup copy of every one of our shell scripts?

With a for loop!

#! /bin/bash

for file in *.sh; do

echo "Copying $file to $file.bak"

cp $file $file.bak

done

Scripting 17 / 22

Page 38: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Looping over command-line arguments

Let’s print out each command line argument on its own line:

#! /bin/bash

for arg in $@; do

echo $arg

done

Scripting 18 / 22

Page 39: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Running commands from anywhere

These shell scripts are great, but we always have to give bash theexact path to the script so it knows what to run. How can we fixthis?

When you ask it to run a command, bash looks through all thedirectories listed in a special variable named PATH. We can add ourown directory to this!

PATH=~/bin:$PATH

To get this modification to stick, we need to run this commandevery time we start our shell. Fortunately, bash runs the/.bashrc script every time you start a new bash shell!

For more variables that control how bash works, see help

variables.

Customization 19 / 22

Page 40: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Running commands from anywhere

These shell scripts are great, but we always have to give bash theexact path to the script so it knows what to run. How can we fixthis?

When you ask it to run a command, bash looks through all thedirectories listed in a special variable named PATH. We can add ourown directory to this!

PATH=~/bin:$PATH

To get this modification to stick, we need to run this commandevery time we start our shell. Fortunately, bash runs the/.bashrc script every time you start a new bash shell!

For more variables that control how bash works, see help

variables.

Customization 19 / 22

Page 41: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Running commands from anywhere

These shell scripts are great, but we always have to give bash theexact path to the script so it knows what to run. How can we fixthis?

When you ask it to run a command, bash looks through all thedirectories listed in a special variable named PATH. We can add ourown directory to this!

PATH=~/bin:$PATH

To get this modification to stick, we need to run this commandevery time we start our shell. Fortunately, bash runs the/.bashrc script every time you start a new bash shell!

For more variables that control how bash works, see help

variables.

Customization 19 / 22

Page 42: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Running commands from anywhere

These shell scripts are great, but we always have to give bash theexact path to the script so it knows what to run. How can we fixthis?

When you ask it to run a command, bash looks through all thedirectories listed in a special variable named PATH. We can add ourown directory to this!

PATH=~/bin:$PATH

To get this modification to stick, we need to run this commandevery time we start our shell. Fortunately, bash runs the/.bashrc script every time you start a new bash shell!

For more variables that control how bash works, see help

variables.

Customization 19 / 22

Page 43: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Making new commands the quick ‘n easy way

I alias name=command: Make a shorthand name for anexisting command

I Bash functions: function-name() { commands }

rungcc() {

progname="program"

if [[ $# -ge 1 ]]; then

progname=$1

fi

g++ *.cpp -o $progname

if [[ $? -eq 0 ]]; then

./$progname

fi

}

Customization 20 / 22

Page 44: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Making new commands the quick ‘n easy way

I alias name=command: Make a shorthand name for anexisting command

I Bash functions: function-name() { commands }rungcc() {

progname="program"

if [[ $# -ge 1 ]]; then

progname=$1

fi

g++ *.cpp -o $progname

if [[ $? -eq 0 ]]; then

./$progname

fi

}

Customization 20 / 22

Page 45: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Where to from here?

Take CS 1585! http://web.mst.edu/~nmjxv3/cs1001/

I List of Bash Commands:https://ss64.com/bash/

I Bash Reference Manual:https://www.gnu.org/software/bash/manual/

I All About Pipes:http://www.linfo.org/pipe.html

I Software Carpentry Shell Tutorial:http://swcarpentry.github.io/shell-novice/

I Bash Tutorial:http://tldp.org/LDP/Bash-Beginners-Guide/html/

Conclusion 21 / 22

Page 46: The Bash Shell and Younmjxv3/articles/shell.pdf · 2020-06-10 · I Linux has a bunch of shells: bash, zsh, dash, csh, tcsh, ... I Shells usually provide some tools for connecting

Pictured: Annie (left) and Lion (right)

Conclusion 22 / 22