Linux shell 脚本编程

admin 2025年6月15日13:44:00评论3 views字数 2799阅读9分19秒阅读模式
Linux shell 脚本编程
一、bash基础概念与入门
  1. bash的定位与优势
    • 定义:bash(GNU Bourne Again Shell)是Linux/Unix系统中常用的shell,兼容Bourne shell(sh),兼具编程特性和用户交互便利性。  
    • 优势:无处不在、开源、支持复杂脚本逻辑、兼容POSIX标准。
  2. 安装与配置
    • 安装:大多数Linux发行版默认安装,可通过包管理器(如apt、yum)更新;其他系统(如BSD、macOS、Windows)需手动安装或通过Cygwin等工具支持。  
    • 配置:通过修改.bashrc、.bash_profile等文件自定义环境变量、提示符、别名等。
  3. 基本操作与提示符
    • 提示符:默认$(普通用户)或#(root用户),可通过PS1变量自定义(如显示用户名、主机名、当前目录)。  
    • 命令执行:直接输入命令,bash通过$PATH变量查找可执行文件;使用./执行当前目录脚本。
二、输入输出处理
  1. 标准输出(STDOUT)
    • 重定向:  
      • > file:覆盖写入文件。  
      • >> file:追加写入文件。  
      • 2> file:重定向错误输出(STDERR)到文件。  
      • &> file或> file 2>&1:同时重定向STDOUT和STDERR到文件。  
    • 工具:  
      • echo:输出文本,-n抑制换行,-e支持转义字符。  
      • printf:格式化输出,类似C语言printf,支持格式字符串(如%s、%d)。  
      • tee:将输出同时写入文件和标准输出,用于调试或日志。
  2. 标准输入(STDIN)
    • 重定向: < file从文件读取输入,<< EOF(here-document)在脚本内嵌入输入内容。  
    • 读取输入:read命令获取用户输入,支持-p提示、-s隐藏输入(如密码)、-t超时设置。
  3. 管道与过滤器
    • 管道(|):将前一命令的输出作为后一命令的输入(如ls | grep ".txt")。  
    • 常用过滤器:  
      • grep:搜索字符串,支持正则表达式(如-i不区分大小写,-v排除匹配)。  
      • sed:流文本编辑,支持替换、删除、插入(如s/old/new/)。  
      • awk:文本处理语言,按字段解析数据(如awk '{print $1}')。
三、脚本编程基础:shell变量
  1. 变量类型与定义
    • 类型:默认字符串类型,可通过declare -i声明整数,declare -a声明数组。  
    • 定义:VAR=value(等号两侧无空格),引用时$VAR或${VAR}(避免歧义)。
  2. 特殊变量与参数
    • 位置参数:$1、$2…$9,$0为脚本名,$*(所有参数作为整体)、$@(每个参数单独处理)。  
    • 内置变量:$#(参数数量)、$?(上一命令退出状态,0为成功)、$HOME(用户主目录)等。
  3. 变量操作
    • 替换:  
      • ${VAR:-default}:VAR为空时取默认值。  
      • ${VAR:=default}:VAR为空时赋值默认值。  
      • ${VAR#pattern}:删除匹配pattern的最短前缀,${VAR%%pattern}删除最长后缀。  
    • 数组:ARRAY=(item1 item2),访问${ARRAY[0]},遍历for item in ${ARRAY[@]}。
四、shell逻辑与控制流
  1. 条件判断
    • test命令/[ ]:  
      • 数值比较:-eq(等于)、-lt(小于)、-gt(大于)。  
      • 字符串比较:= (等于)、!=(不等于)、-z(为空)。  
      • 文件测试:-f(普通文件)、-d(目录)、-r(可读)。  
    • [[ ]]复合命令:支持正则匹配(=~)、逻辑运算符(&&、||),更灵活。
  2. 循环结构
    • for循环:  
      • 遍历列表:for var in item1 item2; do ... done。  
      • 计数循环:for ((i=0; i<10; i++)); do ... done(类似C语言)。  
    • while循环:while condition; do ... done,适用于不确定次数的循环。  
    • until循环:until condition; do ... done(条件为假时执行循环)。
  3. 分支结构
    🌟

    if [ condition ]; then
        command1
    elif [ condition2 ]; then
        command2
    else
        command3
    fi

    case $VAR in
        pattern1) command1 ;;
        pattern2) command2 ;;
        *) default ;;
    esac

    • case语句:用于多条件匹配,如:  
    • if-else:  
五、中级与高级工具
  1. 文本处理工具
    • grep:搜索文本,支持正则表达式(如grep -r "keyword" /path递归搜索)。  
    • sed:流式编辑,如sed 's/old/new/g' file替换所有匹配项。  
    • awk:按字段处理数据,如awk -F',' '{print $1}' file以逗号分隔字段并输出第一列。  
  2. 文件操作工具
    • find:按条件查找文件(如find /path -name "*.txt" -size +10M)。  
    • locate/slocate:通过数据库快速查找文件(需定期更新数据库)。  
    • sort/uniq:排序和去重(如sort file | uniq)。  
  3. 进程与任务管理
    • 后台运行:命令后加&,如command &。  
    • 作业控制:fg( foreground)、bg(background)、kill %1(终止作业1)。  
六、脚本安全与高级编程
  1. 安全实践
    • 路径安全:避免将.加入$PATH,防止恶意脚本执行;使用绝对路径或./明确脚本位置。  
    • 输入验证:对用户输入进行过滤,避免命令注入(如使用printf而非eval)。  
    • 文件权限:合理设置umask,避免敏感文件权限过大;使用set -e(命令失败时退出脚本)。  
  2. 高级编程技巧
    🏆

    function_name() {
        commands
        return 0  # 返回状态码
    }

    • 函数定义:  
  • 陷阱(trap):捕获信号(如trap 'echo "退出前清理" ; exit 1' SIGINT SIGTERM)。  
  • 可移植性:使用#!/usr/bin/env bash而非固定路径,兼容不同系统。  
3. 网络与系统交互
    • 网络重定向:bash支持网络套接字重定向(如exec 3<> /dev/tcp/host/port)。  
    • 系统日志:使用logger命令写入系统日志(logger "脚本运行中")。 
七、实战案例与最佳实践
  1. 常见场景实例
    • 文件批量处理:用for循环遍历文件,结合mv、rm、cp等命令重命名或处理文件。  
    • 日志分析:用grep、awk过滤日志,提取关键信息(如错误日志统计)。  
    • 交互式脚本:用select创建简单菜单,用户输入选项执行对应操作。  
  2. 性能与优化
    • 避免多余的子进程(如用[[ ]]替代test)。  
    • 使用shift丢弃已处理的参数,减少循环中的变量操作。  
  3. 文档与调试
    • 注释:用#添加注释,说明脚本目的、参数、注意事项。  
    • 调试:使用set -x显示执行的命令,set -e检测错误,trap捕获异常。  

原文始发于微信公众号(运维星火燎原):Linux shell 脚本编程

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月15日13:44:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux shell 脚本编程https://cn-sec.com/archives/4166483.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息