My Bash Notes
A Quick Reference
My Bash Notes
1 Common Syntax
1.1 case
case "$var" in
pattern_1)
commands
;;
pattern_2)
commands
;;
esac
1.2 if
if [[ ]]; then
commands
elif [[ ]]; then
commands
else
commands
fi
1.2.1 Logical Operators
-eq # equal
-ne # not equal
-lt # less than
-le # less than or equal
-gt # greater than
-ge # greater than or equal
[[ $num1 -eq $num2 ]] && echo "true"
1.3 Conditionals (Square brackets)
[ -f file.txt ] && echo "File exist"
[ -s FB_title.txt ] && echo "File size > 0"
[ -d dir/ ] && echo "Dir exist"
[ -z "$var" ] # Whether $var is empty
1.4 Loops
1.4.1 for
1.4.1.1 With Sequence of Numbers
Tradional Type
for i in {1..3}; do
commands
done
C lang Type
for (( i=0; i<=5; ++i )); do
commands
done
1.4.1.2 Other Sequences
for i in A B C D; do
commands
done
for i in {A..D}{1..3}; do
commands
done
2 Common Techniques
2.1 Parameter Expansions
2.1.1 Match the last expresion
> ~/Desktop/foo.txt
file_path=~/Desktop/foo.txt
echo ${file_path##*/}
> foo.txt
2.2 Copy Previous Command to file
cat ~/bash_pract/rmd-head.txt >> ~/bash_pract/doc.Rmd
echo "!!" >> ~/bash_pract/cmd_hist
Then the command appends literal cat ~/bash_pract/rmd-head.txt >> ~/bash_pract/doc.Rmd to the end of cmd_hist. Note that this works only on the command line, not shell scripts.
2.3 Expansion with text
Download all web pages starting from www.millionbook.net/wx/j/jingyong/sdxl/001.htm to www.millionbook.net/wx/j/jingyong/sdxl/041.htm:
url=http://www.millionbook.net/wx/j/jingyong/sdxl/
wget "$url"{001..041}".htm"
3 RegEx
MetaCharacters
.: Any character.+: 1 or more, e.g.s+aamatches 1 or moresfollowed byaa.*: 0 or more, e.g.s*aamatches 0 or moresfollowed byaa.{#}: Exact #, e.g.s{2}matches strings with exactly 2s(equivalent toss).{#_1, #_2}: **Between #_1 & #_2**.
(<some.char>): Use(&)to group(na){2}: matches banana.
4 String Manipulation
4.1 cut
list.txt:
10/04 2018,xaringan
09/28 2018,pttR-intro
Read one line of list.txt in each loop,
cut the line into 2 fields, seperated by ,.
while read p; do
date=$(echo "$p" | cut -d ',' -f 1)
file=$(echo "$p" | cut -d ',' -f 2)
done < list.txt
4.2 printf
More consistent then echo,
can use special characters like \\n.
printf "$date [$file](${file}/index.html)\n\n"
4.3 cat
cat the text between the two _EOF_.
cat << _EOF_
---
title: Slides
---
# List of Slides
<br><br>
_EOF_
cat the text between the two _EOF_, then redirect the text to index.md.
cat >> index.md << _EOF_
---
title: Slides
---
# List of Slides
<br><br>
_EOF_
4.4 grep
Search files in working dir that contain certain string:
grep -r ".img" *
Search file names in working dir that contain certain string:
ls | grep ".txt"
4.5 Compare Files
ls dir1 > file1.txt
ls dir2 > file2.txt
diff file1.txt file2.txt
6 Reading Files
6.1 Loop Over Every Line of a File
while read p; do
date=$(echo "$p" | cut -d ',' -f 1)
file=$(echo "$p" | cut -d ',' -f 2)
done < list.txt
6.2 Loop Over Several Files
while IFS=$'\t' read -r title tags link
do
printf "${title}/n"
printf "${tags}/n"
printf "${link}/n/n"
done < <(paste FB_title.txt FB_tags.txt FB_link.txt)
7 Function Flows
[ -f file.txt ] && exit 0
sleep 10 # seconds
8 Network
8.1 Curl
curl --silent --show-error --fail https://raw.githubusercontent.com/Rbloggers/web/posts/FB_title.txt > FB_title.txt
--silent: Don’t print process to std. output--show-error: Print error message to std. output--fail: Return empty file if 404
8.2 Setup SSH
Server Setup
Install SSH Server (so be connected by a remote client):
sudo apt-get install openssh-server
Configure:
sudo gedit /etc/ssh/sshd_config
Port 22
PasswordAuthentication yes
PermitRootLogin yes
Findout IP address locally: hostname -I
Client Setup
Access from remote via SSH:
Syntax: ssh <server-user-account>@<ip>
e.g.
ssh liao961120@192.168.2.110
9 Remote Control Via SSH
9.1 Hardware Configuration
Enable WakeOnLane(WOL) at BIOS:
9.2 wakeonlan
wakeonlan -i
wakeonlan -i 192.168.2.255 44:87:fc:a1:0b:cc
wakeonlan -i $rm_ip_b $rm_MAC
9.3 SSH login
ssh liao961120@
ssh liao961120@192.168.2.110
ssh $ssh_pc
9.4 SSH logout & suspend computer
Use sudo shutdown 0 to leave. Remember to enable Power of Mode in BIOS, so you can WOL to open the computer again.
9.5 Variable Definition (in ~/.bashrc)
rm_MAC="44:87:fc:a1:0b:cc"
rm_ip="192.168.2.110"
rm_ip_b=`bash ~/ip2ipb.sh $rm_ip`
ssh_pc="liao961120@$rm_ip"