program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
$
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
$ ./program
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
$ ./program
The answer to life, the universe, and everything is 42
$
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
$ ./program
The answer to life, the universe, and everything is 42
$
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$ python program.py
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
$ ./program
The answer to life, the universe, and everything is 42
$
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$ python program.py
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
$ ./program
The answer to life, the universe, and everything is 42
$
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$ python program.py
The answer to life, the universe, and everything: 42
program.c program
#include <stdio.h>
int main() {
int a = 36;
int b = 6;
printf("The answer to life, the universe,\
and everything: %d\n", a+b);
return 0;
}
$ gcc program.c -o program
$ ./program
The answer to life, the universe, and everything is 42
$
program.py
a = 36;
b = 6;
print("The answer to life, the universe,\
and everything: {}".format(a+b))
$ python program.py
The answer to life, the universe, and everything: 42
$
$ python
$ python
>>>
$ python
>>> a = 36
$ python
>>> a = 36
>>>
$ python
>>> a = 36
>>> b = 6
$ python
>>> a = 36
>>> b = 6
>>>
$ python
>>> a = 36
>>> b = 6
>>> print("The answer to life, the universe, and everything: {}".format(a+b))
$ python
>>> a = 36
>>> b = 6
>>> print("The answer to life, the universe, and everything: {}".format(a+b))
The answer to life, the universe, and everything: 42
>>>
$ python
>>> a = 36
>>> b = 6
>>> print("The answer to life, the universe, and everything: {}".format(a+b))
The answer to life, the universe, and everything: 42
>>> a+b
$ python
>>> a = 36
>>> b = 6
>>> print("The answer to life, the universe, and everything: {}".format(a+b))
The answer to life, the universe, and everything: 42
>>> a+b
42
>>>
Unix systems can do
cat /etc/shells
Most POSIX Compliant Shell
If Statement:
if COMMAND; then
# Insert more commands here
fi
If Statement:
if COMMAND; then
# Insert more commands here
fi
if COMMAND; then
# Insert more commands here
else
# Do otherwise
fi
If Statement:
if COMMAND; then
# Insert more commands here
fi
if COMMAND; then
# Insert more commands here
else
# Do otherwise
fi
if [[ 2 -eq 2 ]]; then
# Insert more commands here
else
# Do otherwise
fi
And and Or:
if [[ "$STRING1" == "$STRING2" && "$STRING1" == "$STRING3" ]]; then
printf "%s is equal to both strings" "$STRING1"
fi
And and Or:
if [[ "$STRING1" == "$STRING2" || "$STRING1" == "$STRING3" ]]; then
printf "%s is equal to either string" "$STRING1"
fi
$ notepad++ script.sh
#!/bin/bash
$ notepad++ script.sh
#!/usr/bin/env bash
$ notepad++ script.sh
#!/usr/bin/env bash
# Comment1: Today is a good day
echo "Hi there"
VAR1="21"
...
$ notepad++ script.sh
$ bash script.sh
Hi there
...
$
#!/usr/bin/env bash
# Comment1: Today is a good day
echo "Hi there"
VAR1="21"
...
$ notepad++ script.sh
$ chmod +x script.sh
$ ./script.sh
Hi there
...
$
#!/usr/bin/env bash
# Comment1: Today is a good day
echo "Hi there"
VAR1="21"
...
#!/bin/bash --
control='ok'
adddir() {
[[ -d $1 ]] || mkdir $1;
}
add_class() {
# make the directories for seperate classes
adddir Material/$1 && ln -sL ../../Material/$1 Classes/$1/Material
adddir Homework/$1 && ln -sL ../../Homework/$1 Classes/$1/Homework
adddir Textbooks/$1 && ln -sL ../../Textbooks/$1 Classes/$1/Textbooks
if [[ -f Material/$1/syllabus.pdf ]] then
# a little scuffed but looks for regex assuming only 1 will meet
ln -sL ../../Material/*yllabus*.pdf Material/$1/syllabus.pdf
fi
}
add_textbook() {
book=$(basename $1)
class=''
# Check that Classes is not empty
if [[ ! -d Classes/ ]] || [[ ! $(ls Classes/) ]]; then
printf 'You are missing some Classes to setup\n'
printf 'Please add that first\n'
exit
fi
# choose class
printf 'Choose a class: \n'
printf ' %s\n' $(ls -d Classes/*/ | cut -d \/ -f2) #, funny this prints like a loop for every element of these
printf ' : '
read -r class
if [[ ! -d Classes/$class ]]; then
printf 'That is not a class!\n'
printf 'Exiting...\n'
exit 1;
fi
mv -i $1 $HOME/Documents/School/Textbooks/
ln -s $HOME/Documents/School/Textbooks/${book} $(pwd -P)/Textbooks/$class/
}
usage() {
printf '%s:
Usage: %s [-c] [-h] [-t]
Options:
-c Add a class
-h Show help (this message)
-t Add a textbook. Takes in a textbook, moves to ~/Documents/School/Textbooks
and then creates a soft link in the classes Textbook directory.
%s -t /path/to/textbook
' $0 $0 $0
exit 1
}
# check you are in the right place
if [[ $(basename $(dirname $(pwd))) != 'School' ]]; then
printf 'You are not in the a Sem/Quarter directory!'
usage
fi
while getopts ":hct:" arg; do
case "${arg}" in
c)
control=''
;;
t)
# give a way to read the next argument
if [[ -z ${OPTARG} ]]; then
usage
fi
add_textbook ${OPTARG}
exit 0;
;;
h)
usage
;;
*)
usage
;;
esac
done
# Need to choose classes
if [[ ! -d Classes/ ]] || [[ $control != 'ok' ]]; then
# add the directory if not existent
adddir Classes
# add classes with a prompt
printf 'Set a class %s, bro: ' $(whoami)
read -r control
adddir Classes/$control
while [[ $control != 'ok' ]]; do
printf 'Add another class or say "ok" to finish [ok]: '
# if read then overwrite control
read -r control
[[ $control != 'ok' ]] && adddir Classes/$control
done
else
printf 'Classes/ already exists. Perhaps you meant to use [-c] flag.\n'
usage
fi
# Add the dirs if they are not there yet
adddir Material
adddir Homework
adddir Textbooks
for i in $(ls -d Classes/*/ | cut -d \/ -f2); do
# check if class hasn't been edited
if [[ ! $(ls Classes/$i/) ]]; then
printf 'Adding class %s\n' $i
add_class $i
fi
done
printf 'done'
- functions, associative arrays, string substition, etc. - Look at a good cheatsheet
#!/bin/bash
KERNEL="$(uname -r)"
MEM="$(free -h | awk '/^Mem:/ {print $2}')"
echo "Hostname: " $HOSTNAME
echo "Username: " $USER
echo "Kernel Version: " $KERNEL
echo "Total Memory: " $MEM
#!/bin/bash
age=18
if [ "$age" -ge 18 ]; then
echo "You are an adult."
else
echo "You are a minor."
fi
#!/bin/bash
backup_dir="/path/to/backup"
source_dir="/path/to/source"
zip -r "$backup_dir/$backup_file" "$source_dir"
#!/usr/bin/env bash
# Demo 1
BADNAME="myVar"
GOODNAME="my_var"
for i in $(find . -type f); do
if [[ "$i" != "./script.sh" ]]; then
if grep "$BADNAME" $i > /dev/null; then
echo "Found in the phrase in ${i}";
sed -i "s/$BADNAME/$GOODNAME/g" $i > /dev/null;
fi
fi
done
$ ls
Downloads/ Documents/ Videos/ ...
$ cd Downloads/
$ ls
Bash-Workshop.jpg Me-Playing-The-Saxophone.mp3 some-papers/
$ ip a | grep inet
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host proto kernel_lo
inet 100.80.134.178/20 brd 100.80.143.255 scope global dynamic noprefixroute wlp2s0
inet6 fe80::3977:6f8:fbce:e909/64 scope link noprefixroute
$ ifconfig a | grep inet
$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [12/Mar/2024 10:28:39] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [12/Mar/2024 10:28:41] "GET /Me-Playing-The-Saxophone.mp3 HTTP/1.1" 200 -
https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf
$ cd Downloads
$ ls
Bash-Workshop.jpg Me-Playing-The-Saxophone.mp3 some-papers
$
$ cd Downloads
$ ls
Bash-Workshop.jpg Me-Playing-The-Saxophone.mp3 some-papers
$ wget https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf
$ cd Downloads
$ ls
Bash-Workshop.jpg Me-Playing-The-Saxophone.mp3 some-papers
$ wget https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf
--2024-03-12 11:27:28-- https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf
Resolving cseweb.ucsd.edu (cseweb.ucsd.edu)... 132.239.8.30
Connecting to cseweb.ucsd.edu (cseweb.ucsd.edu)|132.239.8.30|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2497853 (2.4M) [application/pdf]
Saving to: ‘mem.pdf’
mem.pdf 100%[=====================================================================================================================================>] 2.38M 6.58MB/s in 0.4s
2024-03-12 11:27:30 (6.58 MB/s) - ‘mem.pdf’ saved [2497853/2497853]
$ clear
$ ls
Bash-Workshop.jpg Me-Playing-The-Saxophone.mp3 mem.pdf some-papers
$
#!/usr/bin/bash -x
location="cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/"
wget -r -np -R "index.html*" https://$location
class_list=$(ls -rt ./$location)
count=1
for i in $class_list; do
mv -n ./$location/$i ./${count}_${i}
count=$((count + 1))
done
rm -rf cseweb.ucsd.edu
$ mkdir temp/
$ cd temp
$ wget -k -r -p https://supercomputing-club.sdsc.edu/
$ python -m http.server
$ python -m http.server
Try visiting localhost:8000 if you completed these steps
#!/usr/bin/env bash
COURSE_ID="123456"
API_TOKEN="12345~..."
mkdir -p files/
FILES=$(
curl \
-X GET \
-H "Authorization: Bearer $API_TOKEN" \
https://canvas.ucsd.edu/api/v1/courses/$COURSE_ID/files | \
jq -r '.[] | "\(.filename),\(.url)"'
)
echo "$FILES" | while IFS= read -r line; do
FILENAME=$(echo $line | awk -F',' '{print $1}')
URL=$(echo $line | awk -F',' '{print $2}')
echo "Downloading $FILENAME..."
curl -s "$URL" -o "$FILENAME"
mv "$FILENAME" "files/$FILENAME"
done
echo "Done! All your files are in the 'files/' directory."
Most computers run some Unix derivative
Student Cluster Competition 2022 Tech Stack