Shell脚本简介

Shell脚本是Linux系统中一种非常重要的自动化工具,它允许用户通过编写脚本来执行一系列命令,从而简化重复性工作。以下是对Shell脚本学习的详细归纳:

Shell脚本基础

  1. Shell脚本定义:Shell脚本是一种用Shell语言编写的程序,Shell语言是一种命令解释型语言,它接收用户输入的命令并解释执行。

  2. Shell脚本的编写规范

    • 脚本的第一行通常是#!/bin/bash,用来指定脚本使用的Shell解释器。
    • 脚本文件名通常以.sh为后缀,表示这是一个Shell脚本文件。
    • 脚本中的命令需要按照执行的顺序一行一行地编写。
  3. Shell脚本的执行

    • 可以通过给脚本文件增加执行权限后直接执行,例如chmod u+x script.sh,然后./script.sh
    • 也可以通过Bash调用执行脚本,例如bash script.sh

Shell脚本的基本语法

  1. 变量

    • 变量命名只能使用英文字母、数字和下划线,首个字符不能以数字开头。
    • 等号左右两侧不能有空格。
    • 可以使用单引号或双引号来包含变量的值,但双引号能够识别变量和转义字符,而单引号则不能。
  2. 输入输出重定向

    • 标准输出重定向:使用>将命令的输出重定向到文件中,如果文件已存在则覆盖,使用>>则追加到文件末尾。
    • 标准错误输出重定向:使用2>将命令的错误输出重定向到文件中。
    • 同时重定向标准输出和标准错误输出:使用&>2>&1
  3. 条件判断

    • 使用if语句进行条件判断,if后面跟条件表达式,then后面跟要执行的命令序列,else后面跟不满足条件时要执行的命令序列(可选),最后以fi结束。
    • 条件表达式可以是字符串比较、整数值比较或文件状态判断等。
  4. 循环

    • for循环:用于遍历一个列表或范围。
    • while循环:当条件为真时重复执行命令序列。
    • until循环:与while循环相反,当条件为假时重复执行命令序列。
  5. 函数

    • 使用function关键字或函数名()来定义函数。
    • 函数体内可以包含多条命令。
    • 调用函数时只需写出函数名并加上括号(可选)。

Shell脚本的常用命令

  1. 文本处理命令

    • grep:用于搜索文本中的匹配模式。
    • awk:用于处理和分析文本数据。
    • sed:用于对文本进行流编辑(如插入、删除、替换等)。
  2. 文件处理命令

    • ls:列出目录内容。
    • cp:复制文件或目录。
    • mv:移动或重命名文件或目录。
    • rm:删除文件或目录。
  3. 系统信息命令

    • uname:显示系统信息。
    • top:实时显示系统资源使用情况。
    • free:显示内存使用情况。
    • df:显示磁盘使用情况。
  4. 网络命令

    • ping:测试网络连通性。
    • ifconfig:显示或配置网络接口(已被ip命令取代)。
    • netstat:显示网络连接、路由表等网络相关信息(已被ss命令取代)。

Shell脚本的实例

  1. 获取主机信息
#!/bin/bash
localip=$(ifconfig ens33 | grep netmask | tr -s " " | cut -d " " -f3)
mem=$(free | grep Mem | tr -s " " | cut -d " " -f7)
cpu=$(uptime | tr -s " " | cut -d " " -f11)
echo "IP address: $localip"
echo "Memory surplus: $mem"
echo "CPU load: $cpu"

这个脚本用于获取主机的IP地址、内存剩余量和CPU负载。

  1. 监控服务状态
#!/bin/bash
if [ -z "$1" ]; then
    echo "error: No server"
    echo "Usage: script + server"
    exit
fi
if systemctl is-active "$1" &>/dev/null; then
    echo "$1 is started"
else
    echo "$1 is not started"
fi
if systemctl is-enabled "$1" &>/dev/null; then
    echo "$1 Is the boot auto option"
else
    echo "$1 Not start auto option"
fi

这个脚本用于监控指定服务的状态,并检查它是否已设置为开机自启动。

  1. 分区管理
#!/bin/bash
if [ $# -ne 2 ]; then
    echo -e "usage: <disk name> <create|new|remove|query>"
    exit
fi
if [ ! -b "$1" ]; then
    echo -e "disk nonentity"
    exit
fi
if [[ "$2" == create ]]; then
    parted -s "$1" mklabel gpt
elif [[ "$2" == new ]]; then
    parted -s "$1" mkpart primary 1 100%
elif [[ "$2" == remove ]]; then
    parted -s "$1" rm 1
elif [[ "$2" == query ]]; then
    parted -s "$1" print
else
    clear
    echo -e "operation error"
    echo "use: [create|new|remove|query]."
fi

这个脚本用于管理磁盘分区,支持创建GPT标签、新建分区、删除分区和查询分区信息。

学习建议

  1. 多动手实践:编写自己的Shell脚本,通过实践来加深理解。
  2. 阅读官方文档:Linux系统的官方文档通常包含了Shell脚本的详细语法和命令说明。
  3. 参考在线资源:如CSDN博客、博客园等网站上有大量的Shell脚本学习教程和实例。
  4. 加入社区交流:可以加入Linux社区或Shell脚本学习群,与其他学习者交流心得和经验。

下一步计划

2025年开始,为了加强自己对shell的理解,会在博客同步开一个专题,用于介绍shell的语法和常用的指令,虽然内容均来自网络,但不耽误我们站在巨人的肩膀上看世界!

THE END