Bash脚本基础知识
1. Bash 简介
1.1 什么是 Bash?
Bash(Bourne Again Shell)是一个命令处理器,通常在文本窗口中运行,用户可以在其中输入命令来触发操作。
1.2 创建和运行脚本
- 创建脚本:使用文本编辑器创建一个
.sh扩展名为 .script 的文件。
nano script.sh
- 使脚本可执行:
chmod +x script.sh
- 运行脚本:
./script.sh
2. 基本命令
2.1 回声
- 描述:向终端打印文本。
echo "Hello, World!"
2.2 变量
- 描述:数据存储和使用。
NAME="John"
echo $NAME
2.3 评论
- 描述:为脚本添加注释以提高可读性。
# This is a comment
echo "This is a script"
3. 输入和输出
3.1 读取用户输入
- 描述:接收用户输入。
read "Enter your name: " NAME
echo "Hello, $NAME"
3.2 重定向输出
- 描述:将命令输出重定向到文件。
echo "This is a test" > file.txt
3.3 追加输出
- 描述:将命令输出追加到文件。
echo "This is a test" >> file.txt
3.4 重定向输入
- 描述:使用文件作为命令的输入。
wc -l < file.txt
3.5 管道
- 描述:将一个命令的输出用作另一个命令的输入。
cat file.txt | grep "test"
4. 控制结构
4.1 条件语句
- 描述:在脚本中做出决策。
if [ "$NAME" == "John" ]; then
echo "Hello, John!"
else
echo "You are not John."
fi
4.2 循环
- 描述:重复执行一组命令。
4.2.1 for 循环
for i in {1..5}; do
echo "Welcome $i"
done
4.2.2 While 循环
COUNTER=0
while [ $COUNTER -lt 5 ]; do
echo "Counter: $COUNTER"
COUNTER=$((COUNTER + 1))
done
4.2.3 直到循环
COUNTER=0
until [ $COUNTER -ge 5 ]; do
echo "Counter: $COUNTER"
COUNTER=$((COUNTER + 1))
done
5. 功能
5.1 定义和调用函数
- 描述:将命令分组到一个可重用的代码块中。
my_function() {
echo "Hello from my_function"
}
my_function
6. 数据结构
6.1 数组
- 描述:使用数组存储多个值。
NAMES=("John" "Jane" "Doe")
echo "First Name: ${NAMES[0]}"
6.2 元组(用数组模拟)
- 描述:使用数组来模拟元组。
TUPLE=("Alice" 25 "Developer")
echo "Name: ${TUPLE[0]}, Age: ${TUPLE[1]}, Job: ${TUPLE[2]}"
6.3 集合(用数组和关联数组模拟)
- 描述:使用数组和关联数组来模拟集合。
declare -A SET
SET["Apple"]=1
SET["Banana"]=1
if [[ ${SET["Apple"]} ]]; then
echo "Apple is in the set."
fi
7. 操作员
7.1 数学运算符
- 描述:执行算术运算。
A=5
B=3
SUM=$((A + B))
echo "Sum: $SUM"
7.2 逻辑运算符
- 描述:在条件中使用逻辑运算符。
if [ $A -eq 5 ] && [ $B -eq 3 ]; then
echo "Both conditions are true."
fi
7.3 语义运算符
- 描述:使用比较运算符。
if [ "$A" -eq 5 ]; then
echo "A is 5"
fi
if [ "$A" -ne 5 ]; then
echo "A is not 5"
fi
8. 铸型
- 描述:Bash 中的类型转换通常是为了确保变量内容得到正确处理。
VAR="123"
NUM=$((VAR + 0)) # Cast string to number for arithmetic
echo $NUM
9. API 调用
- 描述:使用诸如
curl.
RESPONSE=$(curl -s -X GET "https://api.example.com/data")
echo "Response: $RESPONSE"
10. 自动化任务
10.1 定时任务
- 描述:安排脚本自动运行。
# Edit the crontab file
crontab -e
# Add a job to run every day at midnight
0 0 * * * /path/to/script.sh
10.2 使用at
- 描述:安排一次性任务。
echo "/path/to/script.sh" | at now + 5 minutes
10.3 背景工作
- 描述:在后台运行脚本。
./script.sh &
11. 高级主题
11.1 使用sed和awk
- 描述
sed:使用and进行文本处理awk。
11.1.1sed
sed 's/old/new/g' file.txt
11.1.2awk
awk '{print $1}' file.txt
11.2 陷阱
- 描述:捕获信号。
trap "echo 'Script interrupted'; exit" SIGINT
while true; do
echo "Running..."
sleep 1
done
12. 调试
12.1 启用调试
- 描述:以调试模式运行脚本。
bash -x script.sh
12.2 使用set
- 描述:调试设置选项。
set -x # Enable debugging
set +x # Disable debugging
12.3 错误处理
- 描述:处理脚本中的错误。
command || { echo "Command failed"; exit 1; }
12.4trap用于清理
- 描述:脚本退出时清理资源。
cleanup() {
echo "Cleaning up..."
# perform cleanup here
}
trap cleanup EXIT
12.5 日志记录
- 描述:为您的脚本创建日志文件。
LOG_FILE="/var/log/script.log"
echo "Script started" >> $LOG_FILE
13. 关于数组的更多内容
13.1 数组操作
- 描述:数组长度和迭代次数。
ARR=("one" "two" "three")
echo "Array length: ${#ARR[@]}"
for ITEM in "${ARR[@]}"; do
echo $ITEM
done
13.2 关联数组
- 描述:使用关联数组。
declare -A ASSOC_ARRAY
ASSOC_ARRAY["name"]="John"
ASSOC_ARRAY["age"]="30"
echo "Name: ${ASSOC_ARRAY["name"]}"
echo "Age: ${ASSOC_ARRAY["age"]}"
13.3 多维数组
- 描述:模拟多维数组。
ARRAY_2D[0]="1 2 3"
ARRAY_2D[1]="4 5 6"
ARRAY_2D[2]="
7 8 9"
for ROW in "${ARRAY_2D[@]}"; do
for ITEM in $ROW; do
echo -n "$ITEM "
done
echo
done
14. 字符串操作
14.1 子字符串提取
- 描述:从字符串中提取子字符串。
STRING="Hello World"
echo ${STRING:6:5} # Outputs "World"
14.2 字符串长度
- 描述:获取字符串的长度。
echo ${#STRING} # Outputs "11"
14.3 字符串替换
- 描述:替换字符串的一部分。
echo ${STRING/World/Bash} # Outputs "Hello Bash"
15. 文件操作
15.1 文件测试
- 描述:测试文件属性。
if [ -f "file.txt" ]; then
echo "file.txt is a regular file."
fi
if [ -d "directory" ]; then
echo "directory is a directory."
fi
15.2 阅读文件
- 描述:逐行读取文件。
while IFS= read -r line; do
echo "$line"
done < file.txt
15.3 写入文件
- 描述:写入文件。
echo "Hello, World!" > file.txt
15.4 追加到文件
- 描述:追加到文件。
echo "This is a new line" >> file.txt
16. 网络运营
16.1 下载文件
- 描述:使用
wget或curl下载文件。
wget http://example.com/file.zip
curl -O http://example.com/file.zip
16.2 上传文件
- 描述:用于
curl上传文件。
curl -F "file=@/path/to/file" http://example.com/upload
16.3 检查互联网连接
- 描述:ping 服务器以检查互联网连接。
ping -c 4 google.com
17. 处理大数据
17.1 排序和唯一性
- 描述:对数据进行排序并删除重复项。
sort file.txt | uniq > sorted.txt
17.2 寻找规律
- 描述:用于
grep寻找规律。
grep "pattern" file.txt
17.3 分割文件
- 描述:将大文件分割成小部分。
split -l 1000 largefile.txt smallfile_
18. 流程管理
18.1 检查正在运行的进程
- 描述:用于
ps列出正在运行的进程。
ps aux
18.2 杀伤过程
- 描述:用于
kill终止进程。
kill -9 PID
18.3 监控系统资源
- 描述:使用
top或htop监控系统资源。
top
htop # Requires installation
19. 包装和分销
19.1 创建 Tar 归档
- 描述
tar:使用.归档文件
tar -cvf archive.tar file1 file2 directory/
19.2 提取 Tar 归档文件
- 描述:从 tar 归档文件中提取文件。
tar -xvf archive.tar
19.3 压缩文件
- 描述
gzip:使用.压缩文件
gzip file.txt
19.4 解压缩文件
- 描述
gunzip:使用.解压缩文件
gunzip file.txt.gz
这本内容全面的指南涵盖了 Bash 脚本编写的基础和高级主题。
文章来源:https://dev.to/zeshancodes/bash-scripting-fundamentals-5a0e
