linux_3阶段_shell编程_1

TJCcc 发布于 2025-12-18 20 次阅读


Shell编程详细笔记


一、Shell简介

什么是Shell?

  • Shell是命令解释器,负责将用户输入的命令传递给内核执行,并将结果返回给用户。
  • 分为交互式(与人交互)和非交互式(如脚本执行)两种方式。

为什么学习Shell?

  1. 自动化运维:自动化安装系统、部署服务、更新代码等。
  2. 系统优化与安全:关闭无用服务、优化SSH、内核参数调整等。
  3. 服务部署与管理:安装Nginx、Tomcat、Zabbix等服务。
  4. 日志分析与监控:日志切割、IP统计、自定义监控等。
  5. 脚本串联与任务调度:定时任务结合Shell脚本实现自动化。

二、学习Shell所需知识

  • SSH客户端:Xshell、CRT
  • 编辑器:Vim
  • 常用Shell命令
  • 文本处理三剑客:awkgrepsed
  • 常用服务配置与管理

三、如何学好Shell编程

学习路径:

  1. 掌握变量和表达式
  2. 阅读并理解他人脚本
  3. 模仿编写 → 独立编写 → 优化脚本
  4. 形成自己的编码风格
  5. 理解原理,避免“拿来即用”
  6. 参考案例丰富的书籍(如《跟老男孩学习Shell》)

四、Shell脚本基础

1. Shell脚本书写规范

  • 文件名以 .sh 结尾
  • 首行指定解释器:#!/bin/bash
  • 包含作者和注释信息
  • 尽量使用英文
  • 符号必须为英文符号,如 ""''{}[]

2. 创建与执行脚本

# 示例脚本:test.sh
#!/bin/bash
echo "Hello, Shell!"

三种执行方式:

  1. 直接使用解释器执行(无需执行权限)
   sh test.sh
  1. 路径执行(需执行权限)
   chmod +x test.sh
   ./test.sh          # 相对路径
   /root/test.sh      # 绝对路径
  1. 使用 .source 执行(在当前Shell中执行)
   . test.sh
   source test.sh

第1、2种方式在子Shell中执行,第3种在父Shell中执行。


五、Shell变量

1. 变量分类

  • 环境变量(全局变量):系统定义,对所有Shell生效,如 $PATH
  • 普通变量(局部变量):用户自定义,仅当前Shell生效

2. 变量生存周期

  • 临时变量:直接定义或使用 export 定义
  • 永久变量:写入配置文件(如 /etc/profile

3. 变量定义规范

  • 命名:字母、数字、下划线,不以数字开头
  • 大小写:推荐全大写(如 NAME_AGE)或驼峰式(如 Name_Age
  • 赋值:等号两侧不能有空格

4. 变量赋值类型

# 字符串
dir="/etc/sysconfig"
test="a b c"

# 数字
age=18

# 命令结果赋值
count=$(cat /etc/passwd | wc -l)
count=`cat /etc/passwd | wc -l`

5. 引号使用

  • 单引号 '':所见即所得,不解析变量
  • 双引号 "":可解析变量
  • 反引号 `$():执行命令并返回结果

六、Shell位置变量与状态变量

位置变量:

  • $0:脚本名称
  • $1$2$n:第1、2…n个参数
  • $#:参数个数
  • $*$@:所有参数(区别在于循环中的解析方式)
  • ${10}:从第10个参数开始需使用 {}

状态变量:

  • $?:上一条命令的退出状态(0为成功)
  • $$:当前脚本的PID
  • $!:最后一个后台进程的PID
  • $_:上一个命令的最后一个参数

七、Shell传参方式

1. 直接传参

sh script.sh arg1 arg2

脚本内使用 $1$2 获取。

2. 赋值传参

a=$1
b=$2

3. read 交互式输入

read -p "请输入姓名:" name
echo "姓名:$name"

八、常用案例

1. 检查参数个数

if [ $# -ne 2 ]; then
    echo "请输入两个参数"
    exit 1
fi

2. 使用位置变量

echo "脚本名:$0"
echo "第一个参数:$1"
echo "参数总数:$#"

3. 检查命令执行状态

ping -c1 -w1 $1 &>/dev/null
if [ $? -eq 0 ]; then
    echo "$1 可达"
else
    echo "$1 不可达"
fi

九、变量配置文件

文件说明
/etc/profile系统级配置文件,登录时执行
~/.bash_profile用户级配置文件
~/.bashrc用户Shell配置
/etc/bashrc全局Shell配置

十、学习建议总结

  1. 理解变量与表达式是基础
  2. 多读、多写、多调试
  3. 形成自己的脚本风格
  4. 理解原理,不盲目复制
  5. 善用工具书与案例
  6. 结合实际场景练习(如系统监控、日志分析、服务部署)

唯有极致沉淀,才能造就辉煌。
最后更新于 2025-12-18