发布于 2026-01-06 8 阅读
0

Bash脚本基础知识

Bash脚本基础知识

1. Bash 简介

1.1 什么是 Bash?

Bash(Bourne Again Shell)是一个命令处理器,通常在文本窗口中运行,用户可以在其中输入命令来触发操作。

图片描述
Bash 还可以读取并执行文件中的命令,该文件被称为脚本。

1.2 创建和运行脚本

  • 创建脚本:使用文本编辑器创建一个.sh扩展名为 .script 的文件。
  nano script.sh
Enter fullscreen mode Exit fullscreen mode
  • 使脚本可执行
  chmod +x script.sh
Enter fullscreen mode Exit fullscreen mode
  • 运行脚本
  ./script.sh
Enter fullscreen mode Exit fullscreen mode

2. 基本命令

2.1 回声

  • 描述:向终端打印文本。
  echo "Hello, World!"
Enter fullscreen mode Exit fullscreen mode

2.2 变量

  • 描述:数据存储和使用。
  NAME="John"
  echo $NAME
Enter fullscreen mode Exit fullscreen mode

2.3 评论

  • 描述:为脚本添加注释以提高可读性。
  # This is a comment
  echo "This is a script"
Enter fullscreen mode Exit fullscreen mode

3. 输入和输出

3.1 读取用户输入

  • 描述:接收用户输入。
  read "Enter your name: " NAME
  echo "Hello, $NAME"
Enter fullscreen mode Exit fullscreen mode

3.2 重定向输出

  • 描述:将命令输出重定向到文件。
  echo "This is a test" > file.txt
Enter fullscreen mode Exit fullscreen mode

3.3 追加输出

  • 描述:将命令输出追加到文件。
  echo "This is a test" >> file.txt
Enter fullscreen mode Exit fullscreen mode

3.4 重定向输入

  • 描述:使用文件作为命令的输入。
  wc -l < file.txt
Enter fullscreen mode Exit fullscreen mode

3.5 管道

  • 描述:将一个命令的输出用作另一个命令的输入。
  cat file.txt | grep "test"
Enter fullscreen mode Exit fullscreen mode

4. 控制结构

4.1 条件语句

  • 描述:在脚本中做出决策。
  if [ "$NAME" == "John" ]; then
    echo "Hello, John!"
  else
    echo "You are not John."
  fi
Enter fullscreen mode Exit fullscreen mode

4.2 循环

  • 描述:重复执行一组命令。

4.2.1 for 循环

  for i in {1..5}; do
    echo "Welcome $i"
  done
Enter fullscreen mode Exit fullscreen mode

4.2.2 While 循环

  COUNTER=0
  while [ $COUNTER -lt 5 ]; do
    echo "Counter: $COUNTER"
    COUNTER=$((COUNTER + 1))
  done
Enter fullscreen mode Exit fullscreen mode

4.2.3 直到循环

  COUNTER=0
  until [ $COUNTER -ge 5 ]; do
    echo "Counter: $COUNTER"
    COUNTER=$((COUNTER + 1))
  done
Enter fullscreen mode Exit fullscreen mode

5. 功能

5.1 定义和调用函数

  • 描述:将命令分组到一个可重用的代码块中。
  my_function() {
    echo "Hello from my_function"
  }
  my_function
Enter fullscreen mode Exit fullscreen mode

6. 数据结构

6.1 数组

  • 描述:使用数组存储多个值。
  NAMES=("John" "Jane" "Doe")
  echo "First Name: ${NAMES[0]}"
Enter fullscreen mode Exit fullscreen mode

6.2 元组(用数组模拟)

  • 描述:使用数组来模拟元组。
  TUPLE=("Alice" 25 "Developer")
  echo "Name: ${TUPLE[0]}, Age: ${TUPLE[1]}, Job: ${TUPLE[2]}"
Enter fullscreen mode Exit fullscreen mode

6.3 集合(用数组和关联数组模拟)

  • 描述:使用数组和关联数组来模拟集合。
  declare -A SET
  SET["Apple"]=1
  SET["Banana"]=1
  if [[ ${SET["Apple"]} ]]; then
    echo "Apple is in the set."
  fi
Enter fullscreen mode Exit fullscreen mode

7. 操作员

7.1 数学运算符

  • 描述:执行算术运算。
  A=5
  B=3
  SUM=$((A + B))
  echo "Sum: $SUM"
Enter fullscreen mode Exit fullscreen mode

7.2 逻辑运算符

  • 描述:在条件中使用逻辑运算符。
  if [ $A -eq 5 ] && [ $B -eq 3 ]; then
    echo "Both conditions are true."
  fi
Enter fullscreen mode Exit fullscreen mode

7.3 语义运算符

  • 描述:使用比较运算符。
  if [ "$A" -eq 5 ]; then
    echo "A is 5"
  fi
  if [ "$A" -ne 5 ]; then
    echo "A is not 5"
  fi
Enter fullscreen mode Exit fullscreen mode

8. 铸型

  • 描述:Bash 中的类型转换通常是为了确保变量内容得到正确处理。
  VAR="123"
  NUM=$((VAR + 0))  # Cast string to number for arithmetic
  echo $NUM
Enter fullscreen mode Exit fullscreen mode

9. API 调用

  • 描述:使用诸如curl.
  RESPONSE=$(curl -s -X GET "https://api.example.com/data")
  echo "Response: $RESPONSE"
Enter fullscreen mode Exit fullscreen mode

10. 自动化任务

10.1 定时任务

  • 描述:安排脚本自动运行。
  # Edit the crontab file
  crontab -e
  # Add a job to run every day at midnight
  0 0 * * * /path/to/script.sh
Enter fullscreen mode Exit fullscreen mode

10.2 使用at

  • 描述:安排一次性任务。
  echo "/path/to/script.sh" | at now + 5 minutes
Enter fullscreen mode Exit fullscreen mode

10.3 背景工作

  • 描述:在后台运行脚本。
  ./script.sh &
Enter fullscreen mode Exit fullscreen mode

11. 高级主题

11.1 使用sedawk

  • 描述sed:使用and进行文本处理awk

11.1.1sed

  sed 's/old/new/g' file.txt
Enter fullscreen mode Exit fullscreen mode

11.1.2awk

  awk '{print $1}' file.txt
Enter fullscreen mode Exit fullscreen mode

11.2 陷阱

  • 描述:捕获信号。
  trap "echo 'Script interrupted'; exit" SIGINT
  while true; do
    echo "Running..."
    sleep 1
  done
Enter fullscreen mode Exit fullscreen mode

12. 调试

12.1 启用调试

  • 描述:以调试模式运行脚本。
  bash -x script.sh
Enter fullscreen mode Exit fullscreen mode

12.2 使用set

  • 描述:调试设置选项。
  set -x  # Enable debugging
  set +x  # Disable debugging
Enter fullscreen mode Exit fullscreen mode

12.3 错误处理

  • 描述:处理脚本中的错误。
  command || { echo "Command failed"; exit 1; }
Enter fullscreen mode Exit fullscreen mode

12.4trap用于清理

  • 描述:脚本退出时清理资源。
  cleanup() {
    echo "Cleaning up..."
    # perform cleanup here
  }
  trap cleanup EXIT
Enter fullscreen mode Exit fullscreen mode

12.5 日志记录

  • 描述:为您的脚本创建日志文件。
  LOG_FILE="/var/log/script.log"
  echo "Script started" >> $LOG_FILE
Enter fullscreen mode Exit fullscreen mode

13. 关于数组的更多内容

13.1 数组操作

  • 描述:数组长度和迭代次数。
  ARR=("one" "two" "three")
  echo "Array length: ${#ARR[@]}"
  for ITEM in "${ARR[@]}"; do
    echo $ITEM
  done
Enter fullscreen mode Exit fullscreen mode

13.2 关联数组

  • 描述:使用关联数组。
  declare -A ASSOC_ARRAY
  ASSOC_ARRAY["name"]="John"
  ASSOC_ARRAY["age"]="30"
  echo "Name: ${ASSOC_ARRAY["name"]}"
  echo "Age: ${ASSOC_ARRAY["age"]}"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

14. 字符串操作

14.1 子字符串提取

  • 描述:从字符串中提取子字符串。
  STRING="Hello World"
  echo ${STRING:6:5}  # Outputs "World"
Enter fullscreen mode Exit fullscreen mode

14.2 字符串长度

  • 描述:获取字符串的长度。
  echo ${#STRING}  # Outputs "11"
Enter fullscreen mode Exit fullscreen mode

14.3 字符串替换

  • 描述:替换字符串的一部分。
  echo ${STRING/World/Bash}  # Outputs "Hello Bash"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

15.2 阅读文件

  • 描述:逐行读取文件。
  while IFS= read -r line; do
    echo "$line"
  done < file.txt
Enter fullscreen mode Exit fullscreen mode

15.3 写入文件

  • 描述:写入文件。
  echo "Hello, World!" > file.txt
Enter fullscreen mode Exit fullscreen mode

15.4 追加到文件

  • 描述:追加到文件。
  echo "This is a new line" >> file.txt
Enter fullscreen mode Exit fullscreen mode

16. 网络运营

16.1 下载文件

  • 描述:使用wgetcurl下载文件。
  wget http://example.com/file.zip
  curl -O http://example.com/file.zip
Enter fullscreen mode Exit fullscreen mode

16.2 上传文件

  • 描述:用于curl上传文件。
  curl -F "file=@/path/to/file" http://example.com/upload
Enter fullscreen mode Exit fullscreen mode

16.3 检查互联网连接

  • 描述:ping 服务器以检查互联网连接。
  ping -c 4 google.com
Enter fullscreen mode Exit fullscreen mode

17. 处理大数据

17.1 排序和唯一性

  • 描述:对数据进行排序并删除重复项。
  sort file.txt | uniq > sorted.txt
Enter fullscreen mode Exit fullscreen mode

17.2 寻找规律

  • 描述:用于grep寻找规律。
  grep "pattern" file.txt
Enter fullscreen mode Exit fullscreen mode

17.3 分割文件

  • 描述:将大文件分割成小部分。
  split -l 1000 largefile.txt smallfile_
Enter fullscreen mode Exit fullscreen mode

18. 流程管理

18.1 检查正在运行的进程

  • 描述:用于ps列出正在运行的进程。
  ps aux
Enter fullscreen mode Exit fullscreen mode

18.2 杀伤过程

  • 描述:用于kill终止进程。
  kill -9 PID
Enter fullscreen mode Exit fullscreen mode

18.3 监控系统资源

  • 描述:使用tophtop监控系统资源。
  top
  htop  # Requires installation
Enter fullscreen mode Exit fullscreen mode

19. 包装和分销

19.1 创建 Tar 归档

  • 描述tar:使用.归档文件
  tar -cvf archive.tar file1 file2 directory/
Enter fullscreen mode Exit fullscreen mode

19.2 提取 Tar 归档文件

  • 描述:从 tar 归档文件中提取文件。
  tar -xvf archive.tar
Enter fullscreen mode Exit fullscreen mode

19.3 压缩文件

  • 描述gzip:使用.压缩文件
  gzip file.txt
Enter fullscreen mode Exit fullscreen mode

19.4 解压缩文件

  • 描述gunzip:使用.解压缩文件
  gunzip file.txt.gz
Enter fullscreen mode Exit fullscreen mode

这本内容全面的指南涵盖了 Bash 脚本编写的基础和高级主题。

文章来源:https://dev.to/zeshancodes/bash-scripting-fundamentals-5a0e