move dir fundamentals to basics
This commit is contained in:
152
basics/bash.md
Normal file
152
basics/bash.md
Normal file
@@ -0,0 +1,152 @@
|
||||
# STIN, STOUT, STERR
|
||||
|
||||
Input is 0, output is 1, error is 2.
|
||||
|
||||
Pipe standard output to log.txt while also outputting it.
|
||||
|
||||
> cat file.txt |& tee -a log.txt
|
||||
|
||||
Copy file and *if* that's successful, delete it where it stands.
|
||||
|
||||
> scp archive.tar.gz pi@192.168.0.31:/home/pi && rm archive.tar.gz
|
||||
|
||||
A double pipe will try one, and do the other if that fails.
|
||||
|
||||
> cp -r ~/Archive ~/Backup || tar czf Archive.tar.gz *
|
||||
|
||||
# REGEX
|
||||
Regular expression characters include:
|
||||
|
||||
\\ ^ $ . | ? * + () [] {}
|
||||
|
||||
As a result, grep cannot read these characters as literal characters unless they are escaped. E.g.
|
||||
|
||||
> grep wtf\? log.txt
|
||||
|
||||
... will search the string 'wtf?' in the file log.txt. Another version is egrep (now used with 'grep -e') which uses more characters as special characters, or fgrep, which treats all characters as literal strings.
|
||||
|
||||
# Environmental Variables
|
||||
PWD, USER, PATH
|
||||
|
||||
To display all environmental (but not local) variables, use
|
||||
|
||||
> env
|
||||
|
||||
Set a variable with
|
||||
|
||||
> colour=red
|
||||
|
||||
Display your variable with
|
||||
|
||||
> echo $colour
|
||||
|
||||
Export this to the entire system using:
|
||||
|
||||
> export colour=blue
|
||||
|
||||
# Search commands
|
||||
|
||||
> apropos cat
|
||||
|
||||
# Working with Text
|
||||
|
||||
Convert every tab to ten spaces.
|
||||
|
||||
> expand -t 10 file.txt
|
||||
|
||||
Or the reverse, with 3 spaces converting to a tab.
|
||||
|
||||
> unexpand -t 3 file.txt
|
||||
|
||||
Format a file by cutting text after 60 characters.
|
||||
|
||||
> fmt -w 60 file.txt
|
||||
|
||||
Indent all but the first line of a paragraph.
|
||||
|
||||
> fmt -t file.txt
|
||||
|
||||
Look at the new lines of a file only:
|
||||
|
||||
> tail -f /var/log/syslog
|
||||
|
||||
The sort function arranges lines alphabetically. Use -r to reverse and -n to sort by number.
|
||||
|
||||
# Sed
|
||||
|
||||
> sed -i s/hey/hoi/g greetings.txt
|
||||
|
||||
Edit all examples of hey to hoi in greetings and print that to the file.
|
||||
|
||||
# Measurement
|
||||
Measure how long a script takes for super-autism powers.
|
||||
|
||||
> time [bash script]
|
||||
|
||||
# Functions
|
||||
|
||||
> function my_funct(){ do_thing $1; }
|
||||
|
||||
Remove a function with
|
||||
|
||||
> unset my_function
|
||||
|
||||
# Paths
|
||||
Every shell has various paths from where it can execute binary files. Find out your current one with:
|
||||
|
||||
> echo $PATH
|
||||
|
||||
To add a directory to a path, e.g. /usr/share/bin, you can declare it in addition to the old path with:
|
||||
|
||||
> PATH=$PATH:/usr/share/bin
|
||||
|
||||
And then check it by echoing the path again.
|
||||
|
||||
Before this, probably best to check the path exists with:
|
||||
|
||||
> if [ -e /usr/share/bin ]; then
|
||||
|
||||
> echo yes
|
||||
|
||||
> fi
|
||||
|
||||
# Pipes, Pedantry and Brackets
|
||||
|
||||
Things that [[ ]] statements can do which [ ] statements cannot:
|
||||
|
||||
- Intuitive and easy 'and' statements.
|
||||
- [[ -z $var && -d ~/LK ]]
|
||||
- Intuitive and easy 'or' statements.
|
||||
- [[ -d LK || -f ghost-backup.zip ]]
|
||||
- Simple expression comparisons
|
||||
- [[ $v1 > $v2 ]]
|
||||
- Simple expression comparisons with clumsy strings
|
||||
- [[ item-1 > item-2 ]]
|
||||
- Vague comparisons
|
||||
- [[ $answer =~ ^y(es)?$ ]]
|
||||
|
||||
# exec
|
||||
|
||||
exec will start a process running as just that process. In a bash script, the line:
|
||||
|
||||
> unison rat
|
||||
|
||||
... will startup `unison` as a sub-process of bash. But:
|
||||
|
||||
> exec unison rat
|
||||
|
||||
... starts unison as its own process.
|
||||
|
||||
# Brace expansion
|
||||
|
||||
> mv picture{,-1}.jpg
|
||||
|
||||
This expands to
|
||||
|
||||
> mv picture.jpg picture-1.jpg
|
||||
|
||||
# `for` Statements
|
||||
|
||||
for f in *tiff;do
|
||||
convert "$f" "${f/.tiff/.png}"
|
||||
done
|
Reference in New Issue
Block a user