User Tools

Site Tools


Sidebar

projects

wcp1 (due 20230125)
ntr0 (due 20230126)
pct0 (bonus; due 20230129)
pct1 (bonus; due 20230129)
wcp2 (due 20230201)
dap0 (due 20230202)
pct2 (due 20230202)
ngf0 (due 20230208)
pct3 (bonus; due 20230208)
wcp3 (due 20230208)
adm0 (due 20230215)
wcp4 (due 20230215)
pct4 (due 20230216)
bwp1 (bonus; due 20230301)
ngf1 (due 20230301)
pct5 (bonus; due 20230301)
wcp5 (due 20230301)
gfo0 (due 20230308)
pbx0 (due 20230308)
wcp6 (due 20230308)
pct6 (due 20230309)
ngf2 (due 20230315)
pct7 (bonus; due 20230315)
wcp7 (due 20230315)
pct8 (due 20230322)
wcp8 (due 20230322)
cnv0 (due 20230323)
ngf3 (due 20230329)
pct9 (bonus; due 20230329)
wcp9 (due 20230329)
bwp2 (bonus; due 20230412)
gfo1 (due 20230412)
pctA (due 20230412)
usr0 (due 20230412)
wcpA (due 20230412)
pbx1 (due 20230419)
pctB (bonus; due 20230419)
wcpB (due 20230419)
ngf4 (due 20230426)
pctC (due 20230426)
wcpC (due 20230426)
pbx2 (due 20230503)
pctD (bonus; due 20230503)
wcpD (bonus; due 20230503)
gfo2 (due 20230510)
pctE (bonus; due 20230510)
wcpE (bonus; due 20230510)
EoCE (due 20230518)
haas:spring2023:unix:ipkahints

IPKA HINTS

bc

The bc(1) tool is very useful for performing math on numbers. We've used it extensively on various projects throughout the semester.

Usage Example 1

Simplest usage, displaying a number:

$ echo "12" | bc -q
12

Usage Example 2

Using a variable:

$ value="12"
$ echo "${value}" | bc -q
12

Usage Example 3

Changing the base:

$ value="12"
$ echo "obase=2; ${value}" | bc -q
1100

Usage Example 4

Variable-izing the base:

$ base="2"
$ value="12"
$ echo "obase=${base}; ${value}" | bc -q
1100

file

The file(1) utility is useful for identifying file types, especially when the files themselves may not be properly named.

example

$ file /etc/motd
/etc/motd: ASCII text

grep

The grep(1) utility can be used to search through text files for patterns, of the literal or Regular Expression variety, by default outputting lines matching the search pattern. It is quite useful in command-line pipelines, to filter the output of a previous command's output.

example 1

Here, we use grep to filter the output of file, to display only the lines of output pertaining to Ruby scripts:

$ file /usr/local/bin/* | grep 'Ruby'
/usr/local/bin/autospec:                 Ruby script, ASCII text executable
/usr/local/bin/bundle:                   Ruby script, ASCII text executable
/usr/local/bin/bundler:                  Ruby script, ASCII text executable
/usr/local/bin/erubis:                   Ruby script, ASCII text executable
/usr/local/bin/httparty:                 Ruby script, ASCII text executable
/usr/local/bin/rackup:                   Ruby script, ASCII text executable
/usr/local/bin/rake:                     Ruby script, ASCII text executable
/usr/local/bin/rspec:                    Ruby script, ASCII text executable
/usr/local/bin/tilt:                     Ruby script, ASCII text executable

example 2

Counting the resulting output by line can result in a nice 'present' or 'not present' status (true, false):

$ file /usr/local/bin/wcp | grep 'Ruby' | wc -l
0
$ file /usr/local/bin/bundle | grep 'Ruby' | wc -l
1

This could provide a nice means of making a decision on whether or not to perform some processing on a given file.

ls

The ls(1) command can be used to list all files in a given directory. The -1 (one) argument will force a listing of one entry per line. Providing a path to ls will cause it to list the files in that directory versus the default behavior of the current directory.

Providing an absolute path to commands when you run them disables any shell aliases that may be in place.

For example

/bin/ls -1 ${DATAPATH}

Will list all the files currently located in ${DATAPATH}, one entry per line.

Command Expansions

Command expansions are a form of UNIX quotes that allow you to capture the output of any enclosed commands, very useful for capturing into a variable or providing an in-line list of information to things that can utilize them.

Example 1

If you are in the Public Directory's ipka/files/ directory:

cat $(/bin/ls -1 ${DATAPATH})

Will concatenate to STDOUT the contents of all the files.

Example 2

And we can capture that expanded result (the listing of all the files) into a variable:

value=$(/bin/ls -1 ${DATAPATH})

list-based for loop

The numeric for loop is one variety of for loop. Bash also provides another, the “list-based” for loop (also known as a “for each” loop). While it can still be used to process numbers, it can also take in non-numeric data, processing each item of the list in turn.

syntax

The syntax is:

for value in LIST; do
    # commands in loop
done

selection

The [(1) utility allows for the evaluation of a logical or relational condition, resulting in a true or false value. Combined with an 'if' statement, this can be used to conditionally execute code based on the results of that evaluation.

if [ 17 -lt 43 ]; then
    MESSAGE="LESS THAN"
else
    MESSAGE="NOT LESS THAN"
fi
echo "${MESSAGE}"
haas/spring2023/unix/ipkahints.txt · Last modified: 2019/04/25 16:12 by 127.0.0.1