119 lines
1.9 KiB
Markdown
119 lines
1.9 KiB
Markdown
|
|
---
|
|||
|
|
title: "Some basic bash-script code block"
|
|||
|
|
time: "2022-11-29"
|
|||
|
|
tags: ["linux"]
|
|||
|
|
summary: "Some basic bash-script code example. It might be help if writing some temporary work-scripts."
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Assignment and Substitution
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
a=375
|
|||
|
|
hello=$a
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Variables
|
|||
|
|
|
|||
|
|
1. Built-in Variables
|
|||
|
|
For example `$HOME $PWD ...`, for more info, see [environ(7)](https://man7.org/linux/man-pages/man7/environ.7.html)
|
|||
|
|
2. Positional Parameters
|
|||
|
|
**echo** $para1 $para2 $para3 $para4 $0 $1 $2 $3 $4 $@
|
|||
|
|
3. Special Parameters
|
|||
|
|
$? # exit status of a command, function, or the script itself
|
|||
|
|
|
|||
|
|
### Branches
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
if [ condition1 ];then
|
|||
|
|
command_series1
|
|||
|
|
elif [ condition2 ];then
|
|||
|
|
command_series2
|
|||
|
|
else
|
|||
|
|
default_command_series3
|
|||
|
|
fi
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Loops
|
|||
|
|
|
|||
|
|
### range for
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
for arg in `seq 10`; do
|
|||
|
|
echo $arg
|
|||
|
|
done
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### for in C-like syntax
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
LIMIT=10
|
|||
|
|
for ((a=1; a<=LIMIT; a++)); do
|
|||
|
|
echo "$a "
|
|||
|
|
done
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **while**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
LIMIT=10
|
|||
|
|
a=1
|
|||
|
|
while ((a<=LIMIT)); do
|
|||
|
|
echo "$a "
|
|||
|
|
((a += 1))
|
|||
|
|
done
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### IO
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
command < input-file > output-file # rewrite
|
|||
|
|
command >> output-file # appending
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Function
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# define a function
|
|||
|
|
function fun_name(){
|
|||
|
|
command...
|
|||
|
|
}
|
|||
|
|
## or
|
|||
|
|
fun_name(){ # arg1 arg2 arg3
|
|||
|
|
command...
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
# apply a function
|
|||
|
|
fun_name $arg1 $arg2 $arg3
|
|||
|
|
|
|||
|
|
|
|||
|
|
# dereference
|
|||
|
|
fun_name(){ # arg1
|
|||
|
|
eval "$1=hello"
|
|||
|
|
}
|
|||
|
|
fun_name arg1
|
|||
|
|
## the above code block is equivalent to
|
|||
|
|
arg1=hello
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Debugging
|
|||
|
|
|
|||
|
|
1. take good use of sh(1)
|
|||
|
|
for example:
|
|||
|
|
sh -n script: checks for syntax
|
|||
|
|
sh -v script: echo each command before executing it
|
|||
|
|
sh -x script: echo the result of each command in an abbreviated manner
|
|||
|
|
2. use echo
|
|||
|
|
3. use trap
|
|||
|
|
|
|||
|
|
### Parallel
|
|||
|
|
|
|||
|
|
use GNU parallel
|
|||
|
|
|
|||
|
|
### Script with Style
|
|||
|
|
|
|||
|
|
1. Comment your code
|
|||
|
|
2. Avoid using magic number
|
|||
|
|
3. Use exit codes in a systematic and meaningful way
|
|||
|
|
4. Use standardized parameter flags for script invocation
|