Linux-shell编程从入门到提高

Linux Shell 编程:从入门到提高


一、Shell 编程基础

  1. 什么是 Shell?

    • Shell 是用户与 Linux 内核交互的命令行解释器。
    • 常见的 Shell:Bash(默认)、ZshFish等。
    • Shell 脚本:以 .sh 结尾的文本文件,包含一系列命令。
  2. 第一个 Shell 脚本

    1
    2
    #!/bin/bash
    echo "Hello, World!"
    • #!/bin/bash(Shebang):指定脚本解释器。
    • echo:输出内容到终端。
  3. 变量与输入输出

    • 变量定义变量名=值(注意等号两边不能有空格)。
      1
      2
      name="Alice"
      echo $name # 使用变量需加$
    • 输入命令read
      1
      2
      3
      echo "Enter your name:"
      read name
      echo "Hello, $name!"
  4. 条件判断(if语句)

    1
    2
    3
    4
    5
    6
    7
    if [ 条件 ]; then
    命令
    elif [ 其他条件 ]; then
    命令
    else
    命令
    fi
    • 示例
      1
      2
      3
      4
      num=10
      if [ $num -gt 5 ]; then
      echo "$num 大于 5"
      fi
  5. 循环

    • for循环
      1
      2
      3
      for i in 1 2 3; do
      echo "数字: $i"
      done
    • while循环
      1
      2
      3
      4
      5
      count=0
      while [ $count -lt 3 ]; do
      echo "计数: $count"
      ((count++))
      done

二、Shell 提高技巧

  1. 函数定义与调用

    1
    2
    3
    4
    function greet() {
    echo "Hello, $1!" # $1 表示第一个参数
    }
    greet "Bob" # 输出 "Hello, Bob!"
  2. 参数处理

    • $0:脚本名称。
    • $1, $2...:第1、2个参数。
    • $#:参数总数。
    • $@:所有参数列表。
    1
    2
    3
    echo "脚本名称: $0"
    echo "第一个参数: $1"
    echo "参数总数: $#"
  3. 字符串操作

    • 拼接
      1
      2
      3
      str1="Hello"
      str2="World"
      result="$str1 $str2"
    • 截取
      1
      2
      str="abcdef"
      echo ${str:0:3} # 输出 "abc"
  4. 数组

    1
    2
    3
    4
    arr=("apple" "banana" "cherry")
    echo ${arr[1]} # 输出 "banana"
    echo ${arr[@]} # 输出所有元素
    echo ${#arr[@]} # 输出数组长度
  5. 文件操作

    • 检查文件是否存在
      1
      2
      3
      if [ -f "file.txt" ]; then
      echo "文件存在"
      fi
    • 逐行读取文件
      1
      2
      3
      while read line; do
      echo "行内容: $line"
      done < file.txt
  6. 正则表达式(grep/sed

    1
    2
    3
    4
    5
    # 使用 grep 匹配文本
    echo "abc123" | grep -E "[a-z]+[0-9]+"

    # 使用 sed 替换文本
    echo "hello world" | sed 's/world/Linux/'
  7. 调试脚本

    • -x 参数:显示执行过程。
      1
      bash -x script.sh

三、实例演练

  1. 备份文件

    1
    2
    3
    4
    5
    #!/bin/bash
    backup_dir="/backup"
    source_dir="/home/user/docs"
    timestamp=$(date +%Y%m%d)
    tar -czf $backup_dir/backup_$timestamp.tar.gz $source_dir
  2. 监控 CPU 使用率

    1
    2
    3
    4
    5
    6
    #!/bin/bash
    cpu_threshold=80
    current_cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
    if (( $(echo "$current_cpu > $cpu_threshold" | bc -l) )); then
    echo "CPU 使用率过高: $current_cpu%"
    fi
  3. 批量重命名文件

    1
    2
    3
    4
    #!/bin/bash
    for file in *.txt; do
    mv "$file" "new_${file}"
    done
  4. 自动安装软件

    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    if ! command -v nginx &> /dev/null; then
    sudo apt-get update
    sudo apt-get install -y nginx
    else
    echo "Nginx 已安装"
    fi
  5. 日志分析(提取错误日志)

    1
    2
    #!/bin/bash
    grep -i "error" /var/log/syslog > errors.log

四、常见问题

  1. 权限问题:脚本需有执行权限。

    1
    2
    chmod +x script.sh
    ./script.sh
  2. 变量作用域:默认全局,函数内使用 local 定义局部变量。

  3. 语法错误:注意空格(如 [ $a -eq $b ] 方括号内必须有空格)。


五、学习资源


通过以上内容,你可以逐步掌握 Shell 编程的核心功能。多实践是提高的关键!