initial commit
This commit is contained in:
118
data/posts/2022-11-29-some-bash-script-node.md
Normal file
118
data/posts/2022-11-29-some-bash-script-node.md
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user