Shell脚本的使用

shell

Shell 脚本是一种在 Unix/Linux 操作系统上编写的脚本语言,主要用于自动化执行命令、任务调度以及管理系统。以下是对 Shell 脚本的简要总结:

1. 基础概念

  • Shell 是操作系统提供的一个命令行解释器,常见的 Shell 类型有 Bash(Bourne Again Shell)、Zsh、Sh 等。
  • Shell 脚本 是一组命令的集合,通常保存在 .sh 文件中,可以通过终端执行。

2. 基本语法

  • 注释:以 # 开头的行是注释。注释不会被执行,通常用于解释代码。
    # 这是一个注释
    
  • 变量:可以定义变量,并使用 $ 符号来引用变量。
    name="World"
    echo "Hello, $name!"
    
  • 条件语句
    if [ "$age" -ge 18 ]; thenecho "You are an adult."
    elseecho "You are a minor."
    fi
    
  • 循环
    for i in 1 2 3 4 5; doecho "Number: $i"
    done
    

3. 常用操作

  • 定义和使用函数
    my_function() {echo "This is a function."
    }
    my_function  # 调用函数
    
  • 命令替换:通过反引号 `command`$(command) 可以将命令的输出作为变量。
    current_time=$(date)
    echo "Current time: $current_time"
    
  • 文件操作:使用 cattouchcpmvrm 等命令进行文件的创建、复制、移动、删除等操作。
    touch newfile.txt   # 创建文件
    cat newfile.txt     # 查看文件内容
    

4. 脚本执行

  • 给脚本添加执行权限:
    chmod +x script.sh
    
  • 运行脚本:
    ./script.sh
    

5. 控制流程

  • 条件判断:使用 ifelseelif 来实现条件分支。
  • 循环结构:常见的循环有 forwhileuntil
  • 退出状态码:每个命令执行完后都会返回一个状态码,0 表示成功,非 0 表示失败。可以通过 $? 获取上一个命令的状态码。
    if [ $? -eq 0 ]; thenecho "Success"
    elseecho "Failed"
    fi
    

6. Shell 脚本中的参数

  • $0:脚本名
  • $1$9:传递给脚本的参数
  • $#:传递给脚本的参数个数
  • $@:所有传递给脚本的参数
  • $?:上一个命令的退出状态
echo "Script name: $0"
echo "First argument: $1"
echo "Number of arguments: $#"

7. 调试脚本

  • 使用 set -x 开启调试模式,脚本会显示每条命令的执行过程。
  • 使用 set +x 关闭调试模式。
    set -x
    echo "This is a debug message"
    set +x
    

8. 处理用户输入

  • 使用 read 从用户处获取输入:
    echo "Enter your name:"
    read name
    echo "Hello, $name!"
    

9. 标准输入/输出和重定向

  • >:将输出重定向到文件,覆盖原文件内容。
  • >>:将输出重定向到文件,追加到文件末尾。
  • <:从文件中读取输入。
  • 2>:将标准错误输出重定向到文件。
    echo "This is output" > output.txt   # 输出到文件
    cat < input.txt                      # 从文件读取
    

10. 常用工具

  • awk:文本处理工具,用于对文件或输入流进行格式化处理。
  • sed:流编辑器,用于查找和替换文本。
  • grep:用于文本搜索的工具。

1. awk:文本处理工具

awk 是一个强大的文本处理工具,常用于从文件或输入流中提取、格式化和处理数据。它支持基于模式的搜索、列操作、计算等功能。

基本用法
awk 'pattern { action }' filename
  • pattern:匹配条件
  • action:对匹配的行执行的操作
常见操作
  • 按列打印awk 默认将每行按空格或制表符分割为多个字段,使用 $1 表示第一列,$2 表示第二列,依此类推。

    # 打印第二列
    awk '{ print $2 }' filename
    
  • 按条件筛选:可以通过模式匹配筛选特定行。

    # 打印包含 "error" 的行
    awk '/error/ { print }' filename
    
  • 使用内置变量

    • $0:整行
    • NR:当前记录的行号
    • NF:当前行的字段数
    # 打印行号和每行的第一列
    awk '{ print NR, $1 }' filename
    
  • 计算与格式化输出

    # 计算文件中两列数字的和
    awk '{ sum = $1 + $2; print sum }' filename
    
  • 指定分隔符:使用 -F 选项指定分隔符。

    # 使用逗号作为分隔符
    awk -F "," '{ print $1, $2 }' filename
    
高级示例
# 打印第二列大于100的行
awk '$2 > 100 { print $0 }' filename

2. sed:流编辑器

sed 是一种非交互式的文本处理工具,擅长文本的搜索、替换、删除等操作。

基本用法
sed 'command' filename
常见操作
  • 替换文本:使用 s/查找/替换/ 格式替换文本。

    # 将文件中的 "foo" 替换为 "bar"
    sed 's/foo/bar/' filename
    
  • 全局替换:使用 g 表示全局替换。

    # 将文件中所有的 "foo" 替换为 "bar"
    sed 's/foo/bar/g' filename
    
  • 删除行:使用 d 命令删除匹配的行。

    # 删除包含 "error" 的行
    sed '/error/d' filename
    
  • 在指定位置插入文本

    # 在第二行后插入 "Hello, World!"
    sed '2a Hello, World!' filename
    
  • 指定行进行替换

    # 仅替换第三行的 "foo" 为 "bar"
    sed '3s/foo/bar/' filename
    
高级示例
# 将所有匹配的 "foo" 替换为 "bar",并保存到原文件
sed -i 's/foo/bar/g' filename

3. grep:文本搜索工具

grep 用于在文本中查找符合条件的行,并打印出来,支持正则表达式和多种选项。

基本用法
grep 'pattern' filename
常见操作
  • 匹配并打印行

    # 查找文件中包含 "error" 的行
    grep 'error' filename
    
  • 忽略大小写:使用 -i 忽略大小写。

    grep -i 'error' filename
    
  • 显示行号:使用 -n 选项显示匹配行的行号。

    grep -n 'error' filename
    
  • 递归搜索:使用 -r 在目录中递归搜索。

    grep -r 'error' /path/to/dir
    
  • 统计匹配行数:使用 -c 选项统计匹配的行数。

    grep -c 'error' filename
    
  • 反向匹配:使用 -v 选项输出不匹配的行。

    grep -v 'error' filename
    
正则表达式支持
  • .:匹配任意单个字符
  • *:匹配零个或多个前面的字符
  • ^:匹配行的开始
  • $:匹配行的结束
# 查找以 "start" 开头的行
grep '^start' filename# 查找以 "end" 结尾的行
grep 'end$' filename
高级示例
# 查找多个关键字
grep -E 'error|warning' filename# 查找所有 .log 文件中包含 "failed" 的行
grep 'failed' *.log
  • awk:适合复杂的文本处理和数据操作,如按列打印、计算统计等。
  • sed:擅长查找和替换文本、批量编辑文件等。
  • grep:快速、简单的文本搜索工具,适合查找特定模式、筛选日志等。

这些工具各具特色,经常结合使用,可以大大提高文本处理的效率。

11. 案例示例

  • 批量重命名文件:

    for file in *.txt; domv "$file" "${file%.txt}.bak"
    done
    
  • 自动备份文件:

    backup_dir="/backup"
    mkdir -p "$backup_dir"
    cp -r /home/user/documents "$backup_dir"
    echo "Backup complete!"
    

总结

Shell 脚本在自动化任务中极为有用,尤其是在系统管理、服务器维护、批量任务处理等场景。熟练掌握 Shell 脚本的语法和常用工具,可以显著提升开发和运维效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue全栈开发旅游网项目(11)-用户管理前端接口联调

联调基本步骤 1.阅读接口文档 2.配置接口地址 3.使用axios获取数据 4.将数据设置到模型层 1.发送验证码联调 1.1 配置接口地址 文件地址&#xff1a;src\utils\apis.js //系统相关的接口 const SystemApis {sliderListUrl:apiHost"/system/slider/list/",//发送…

320页PDF | 集团IT蓝图总体规划报告-德勤(限免下载)

一、前言 这份报告是集团IT蓝图总体规划报告-德勤。在报告中详细阐述了德勤为某集团制定的全面IT蓝图总体规划&#xff0c;包括了集团信息化目标蓝图、IT应用规划、数据规划、IT集成架构、IT基础设施规划以及IT治理体系规划等关键领域&#xff0c;旨在为集团未来的信息化发展提…

蓝桥杯c++算法学习【2】之搜索与查找(九宫格、穿越雷区、迷宫与陷阱、扫地机器人:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 搜索与查找 一、九宫格 【问题描述】 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三 …

Springboot校园失物招领平台

Springboot校园失物招领平台 Springboot校园失物招领平台

C++(Qt)软件调试---符号转换工具cv2pdb (24)

C(Qt)软件调试—符号转换工具cv2pdb &#xff08;24&#xff09; 文章目录 C(Qt)软件调试---符号转换工具cv2pdb &#xff08;24&#xff09;[toc]1、概述&#x1f41c;2、下载cv2pdb&#x1fab2;3、qt程序使用cv2pdb&#x1f9a7;1.1 方法1&#xff1a;命令行1.2 方法2&#…

基于Java Springboot宠物流浪救助系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL…

My_SQL day3

知识点&#xff1a;约束 1.dafault 默认约束 2.not null 非空约束 3.unique key 唯一约束 4.primary key 主键约束 5.anto_increment 自增长约束 6.foreign key 外键约束 知识点&#xff1a;表关系 1.一对一 2.一对多 3.多对多 知识点&#xff1a;约束 1.default 默认约束 …

C++基础:Pimpl设计模式的实现

2024/11/14: 在实现C17的Any类时偶然接触到了嵌套类的实现方法以及Pimpl设计模式&#xff0c;遂记录。 PIMPL &#xff08; Private Implementation 或 Pointer to Implementation &#xff09;是通过一个私有的成员指针&#xff0c;将指针所指向的类的内部实现数据进行隐藏。 …

Unity自动LOD工具AutoLOD Mesh Decimator的使用

最近在研究大批量物体生成&#xff0c;由于我们没有专业美术&#xff0c;在模型减面工作上没有人手&#xff0c;所以准备用插件来实现LOD功能&#xff0c;所以找到了AutoLOD Mesh Decimator这个插件。 1&#xff0c;导入插件后&#xff0c;我们拿个实验的僵尸狗来做实验。 空…

爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)

目录 一.环境检测 1. 什么是环境检测 2.案例讲解 二 .吐环境脚本 1. 简介 2. 基础使用方法 3.数据返回 4. 完整代理使用 5. 代理封装 6. 封装所有使用方法 jsdom补环境 1. 环境安装 2. 基本使用 3. 添加参数形式 Selenium补环境 1. 简介 2.实战案例 1. 逆向目…

免费,WPS Office教育考试专用版

WPS Office教育考试专用版&#xff0c;不仅满足了考试需求&#xff0c;更为教育信息化注入新动力。 https://pan.quark.cn/s/609ef85ae6d4

Vue前端开发,组件及组件的使用

什么是组件 组件(Component)是Vue中最强大的功能之一&#xff0c;每个Vue 文件就是一个个独立的组件&#xff0c;组件也可以被其他组件调用&#xff0c;形成嵌套关系&#xff0c;大部分的应用都是由各类不同功能的小组件进行构建&#xff0c;形成一个功能强大的大组件树系统&a…

政务数据治理专栏开搞!

写在前面 忙忙碌碌干了一年政务数据治理的工作&#xff0c;从法人数据到自然人&#xff0c;从交通到地理信息等等&#xff0c;突发想法开一个专栏讲一讲政务数据遇到的问题&#xff0c;以及治理的成效&#xff0c;或许有朋友爱看。 政务数据&#xff0c;又称之为政务数据资源&a…

前端在PC端实现支付思路流程

一.去支付 1.前端点击“去支付”按钮&#xff0c;请求订单详情接口&#xff0c;传递订单的id、订单号给后端和请求支付方式接口 2.后端返回支付信息和支付方式数据 二.弹出支付窗口 接收支付信息和支付方式数据后&#xff0c;前端弹出支付弹窗 三.确认支付 前端无论选择任何…

VUE3实现好看的世界建筑中国建筑网站源码

文章目录 1.设计来源1.1 网站主界面1.2 登录界面1.3 注册界面1.4 特色建筑展览界面1.5 世界建筑介绍界面1.6 世界建筑介绍 - 详情界面1.7 中国建筑介绍界面1.8 中国建筑介绍 - 详情界面1.9 关于我们界面 2.效果和源码2.1 动态效果2.2 源代码2.3 目录结构 源码下载万套模板&…

「人眼视觉不再是视频消费的唯一形式」丨智能编解码和 AI 视频生成专场回顾@RTE2024

你是否想过&#xff0c;未来你看到的电影预告片、广告&#xff0c;甚至新闻报道&#xff0c;都可能完全由 AI 生成&#xff1f; 在人工智能迅猛发展的今天&#xff0c;视频技术正经历着一场前所未有的变革。从智能编解码到虚拟数字人&#xff0c;再到 AI 驱动的视频生成&#…

「QT」文件类 之 QTemporaryFile 临时文件类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

和 Nostr 探索 Web5 的未来

Nostr 是一个我过去两年一直在关注的协议。跟所有社区一样&#xff0c;Nostr 的发展也是起起伏伏&#xff0c;有过一些破圈被主流熟悉的时刻&#xff0c;也有一些像现在这样可能让人会觉得有点沉寂的时刻。但我还是经常关注 Nostr&#xff0c;没有特别的原因&#xff0c;就是单…

论文学习——一种基于决策变量分类的动态约束多目标进化算法

论文题目&#xff1a; A dynamic constrained multiobjective evolutionary algorithm based on decision variable classification 一种基于决策变量分类的动态约束多目标进化算法&#xff08;Yinan Guo a,b, Mingyi Huang a, Guoyu Chen a,*, Dunwei Gong c, Jing Liang d, …

数据分析案例-笔记本电脑价格数据可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…