shell脚本案例30个带详细解析

shell脚本编程的例子(55例子)-1 为了提高教学质量,并且能够让童鞋们更好的理解和运用shell脚本以及相关编程,特编写了50个shell例子,目前还在整理过程ing,计划分三期完成。请有需要的同学收藏。后续会申请VIP阅读。…… 阅读详情

案例一:输入网卡的名字,来输出网卡的IP

1.问题:
1.)参数后判断要加“”
2.)名字为空时显示ip

2.分析:

  1. ) 把本机的所有网卡名列出来,来引导用户输入。
  2. ) 使用命令列出所有网卡信:ifconfig
  3. ) 设计一个函数,把网卡名作为参数,函数返回网卡的IP
  4. ) 在获取某个网卡IP时,考虑网卡有多个IP地址(或为空IP的网卡)

3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. ) egrep awk,反复运行和推敲命令,来分析执行结果
  2. ) 死循环。当输入错误或者为空,继续输入–>输入正确。
  3. ) while循环continue、break(逻辑性) 逻辑判断参数
  4. ) checkip函数调用

6.结果验证

案例二:自动对磁盘分区、格式化、挂载
1.问题:

  1. 磁盘名称
  2. EOF的使用
    2.分析:
  3. 将添加的磁盘进行分区、格式化、挂载
  4. 使用命令查看fdisk、使用命令创建可存储文件类磁盘mkfs.xfs、使用命令挂载mount
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. 查看磁盘情况
  2. 新建分区
  3. 创建文件系统磁盘
  4. 挂载磁盘
    6.结果验证

案例三:检查特定软件包是否安装
1.问题:

  1. 判断条件的比对值不需要双引号
  2. 理解$@含义
    2.分析:
  3. $@提取所有的位置的变量的值
  4. 进行判断是否安装
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. 判断参数个数是否为零
  2. $@提取所有位置的变量的值
  3. 判断是否安装,返回特定的输出结果
    6.结果验证

案例四:提示用户输入年份后判断该年是否为闰年
1.问题:

  1. 注意if、elif、else的用法
    2.分析:
  2. 提示用户输入年份
  3. 判断用户输入年份
  4. 考虑用户输入年份是否为空(或是否为数字)
  5. 输入为数字时,进行计算
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:

  1. 用户输入为空白时,提示没有输入年份
  2. 用户输入为字母时,提示输入不是数字
  3. 用户输入是数字时,与四进行计算
    6.结果验证

案例五:下载文件到指定目录
1.问题:

  1. 第一个参数为可下载文件,第二个参数为目录
  2. 目录不存在,则提示用户是否创建,创建就继续,不创建返回一个51的错误值
  3. 目录存在,下载文件,测试成功与否,成功返回0,失败返回52
    2.分析:
    1) 操作不当(没有输入下载文件或路径),提示操作错误
    2) 若有目录提示操作失败,已有目录
    3) 提示用户输入相应选项,输入错误或不输都退出运行,操作失败
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 用户操作不当,打印“操作失败”,并退出
2) 没有目录时,提示创建目录,有目录时,打印“操作失败,已有该目录”,并退出
3) 选择创建,则进行安装。不选择创建,退出本次操作,返回51
4) 下载成功后,返回0;下载失败,返回52
6.结果验证

案例六:ping通节点并显示节点名称
1.问题:

  1. 使用ssh协议、expect工具远程连接节点
  2. Ping通节点,ping通显示节点名称与ip
    2.分析:
    1) 使用expect工具进行远程连接
    2) 规定一段ip,进行ping,ping通显示节点名称及IP(顺序不可变),ping不通,报错并只显示ip
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实验解析
1) expec工具中规定输入的yes与password
2) 选一段IP进行循环,依次进行ping
3) ping完所有IP后显示结果
6.结果验证

案例七:统计linux进程相关数量信息
1.问题:
1) 查看linux进程
2) 将正在运行、待机、停止等进程数总和列出
2.分析:
1) 将进程ID进行循环,依次查看进程状态
2) 进程状态进行叠加,显示进程总数
3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 使用for循环进程一次操作
2) 使用case进行进程状态判断
3) 打印出进程状态数对应总和
6.结果验证

案例八:打印符合要求数字

  1. 问题:
    1) 用户输入是否为数字
    2) 第二次输入是否比第一次大
    2.分析:
    1) 判断是否输入为数字
    2) 打印出第一轮数字
    3) 判断两轮数字大小
    4) 继续打印
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 判断是否输入为数字,是就继续,不是打印提示并结束
2) 打印出第一轮数字,并询问是否继续
3) 判断两轮数字大小,大于继续,小于或等于打印提示并结束
4) 打印第一轮数字到第二轮数字中间的数
6.结果验证

案例九:监控远程的一台机器的存活状态,发现宕机发一封邮件给自己
1.问题:
1) ping远程机器
2) 发送邮件给自己用户
2.分析:
1) 先进行ping通
2) 满足条件后分别返回不同操作结果
3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 先进行ping通主机操作
2) 判断上述条件是否满足
3) 满足返回节点开启
4) 不满足给自己发送邮件告知节点关闭
6.结果验证

案例十:打印文件1-5行不包含字母的行,同时删除6-10行的字母
1.问题:
1) sed、grep循环使用
2) for循环与if判断
2.分析:
1) 使用循环打印
2) if判断,进行挑选
3) 打印符合条件的行数
3.流程图:
在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 第一次使用for循环确定1-5行
2) if判断进行筛选
3) 第二次使用for循环确定6-10行
4) 直接确定打印条件
5) 第三次使用for循环确定其他行列
6) 打印出所有文本
6.结果验证

案例十一:批量修改文件名

  1. 问题:
    1) 批量修改.txt为.txt.bak
    2) 把所有.bak文件打包压缩为123.tar.gz
    3) 批量还原文件的名字,即把增加的.bak在删除
    2.分析:
    1) 将所有的文件名先写到临时文件中
    2) 对临时文件进行改名操作
    3.流程图:
    在这里插入图片描述

4.实现:
在这里插入图片描述

5.实现解析:
1) 进入目标目录
2) 找到所有文件,将所有文件名写到临时文件
3) 针对临时文件进行改名操作
4) 压缩所有目标文件名的文件
5) 同样操作针对于改名后的文件在进行改名,改为原来的文件名
6.结果验证

案例十二: 统计日志当中IP访问量
问题
1) IP访问日志中IP过多,查找每个IP访问次数
分析
1) 找出IP行列,进行整合、添加
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 设置日志文件
2) 查找IP行列
3) 将IP数量进行总和
结果验证

案例十三: 判断本机80端口是否开启
问题
1) 查看本机80端口是否开启
2) 开启,什么也不做,如果未开启重启服务,并发送邮件
分析
1) 查看80端口的状态
2) 如果正常,正常退出
3) 状态关闭,重启服务,发送邮件
4) 设置每分钟自动运行
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 先查看80端口的服务状态
2) 条件满足,进行判断
3) 正常则退出脚本,不正常重启服务并发送邮件给自己
结果验证

案例十四: 统计linux系统所有进程占用内存大小的和
问题
1) 系统内存突然变小
2) 查看系统进程占用内存大小
分析
1) 确定进程
2) 计算进程占用内存和
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 设置和的值
2) 确定进程
3) 计算和
结果验证

案例十五: 问候程序
问题
1) 让用户知晓现在时间段
分析
1) 确定时间
2) 时间进行判断从而确定时间段
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 确定时间值
2) 与每个时间段进行比较
3) 判断出结果
结果验证

案例十六: 访问地址
问题
1) 访问的网址是否正常
分析
1) 网址正常,HTTP代码为200
2) 返回结果需要为200,极为正常
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 设置参数(即为网址)
2) 提取访问网址状态码
3) 进行判断
结果验证

案例十七: 统计ip
问题
1) 共享文件时查看哪些ip相通
分析
1) 所有ip地址都需要ping
2) 将ping通显示
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 设置局部变量,进行循环ping操作
2) 判断是否可以ping通
3) 可以,打印可以Ping通ip。不可以,什么也不操作
结果验证

案例十七: 简化菜单功能
问题
1) 提供用户选择,从而进行操作
分析
1) 提示可输入的选择
2) 提示输入
3) 进行输入参数判断
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 显示菜单
2) 输入选项
3) 进行选项判断
4) 执行操作
结果验证

案例十八: 清空文件内容
问题
1) 将目录/data/log/下的文件全部清空
2) 只能清空文件内容而不能删除文件。
3) 其他时间只需要统计一下每个文件的大小,一个文件一行,输出到一个按日期和时间为名字的日志里。
4) 需要考虑/data/log/目录下的二级、三级、… 等子目录里面的文件。

分析
1) 先确定时间与按日期和时间为名字的文件
2) 判断时间
3) 清空值或者是将文件内容存进Log文件
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 确定时间参数,用来进行判断
2) 满足条件,将目录下文件内容都清空
3) 不满足条件,将目录下文件大小给记录在一个日期和时间命名的文件中
结果验证

案例十九: 显示目录内容
问题
1) 想查看多个目录下的子目录
分析
1) 确定参数个数
2) 进行针对于参数的操作
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 判断参数个数
2) 进行对应操作
3) 执行结果
结果验证

案例二十: 给用户添加随机密码
问题
批量创建用户,密码设置较多,设置随机密码并记录
分析
1) 设定范围,批量创建用户
2) 给每个用户创建随机密码,并记录
流程图
(脚本思路清晰且易)
实现
在这里插入图片描述

实现分析
1) 创建一个以日期为名字的日志文件
2) 批量创建用户,并设置随机密码
3) 将用户与密码对应记录在日志文件中
结果验证

案例二十一: 备份数据库
问题
需要备份数据库中资料,远程发送给目标方
分析
1) 先备份数据库
2) 远程发送
3) 确定删除时间
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 确定时间,以时间为后缀,备份数据库
2) 远程发送给目的方
3) 找到超过时间的文件,并删除
结果验证

案例二十二: 确定输入ip是否正确
问题
1) 不确定对方给与的ip地址是否正确
2) 循环输入,直到正确
分析
1) 对ip每段进行判断
2) 每段范围确定
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 设置函数,确定ip格式,判断输入ip是否正确
2) 提示输入,调用函数
3) 显示输出结果
结果验证

案例二十三: 实现加减乘除的功能
问题
参数一个个进行运算很慢
分析
1) 判断参数类型
2) 进行运算
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 输入参数
2) 判断参数类型
3) 进行运算
4) 减法和除法需要先进行比较
5) 使用了bc运算
结果验证

案例二十四: 循环输出数值
问题

分析
1) 循环输出数值
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 设置死循环
2) 循环输入数值
3) 判断是否为end
4) 是,结束;不是,继续循环
结果验证

案例二十五: 监控cpu、内存和硬盘利用率
问题
获取目前占用资源
分析
利用vmstat命令
显示目前时间
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 安装vmstat命令
2) 分别进行判断
3) 执行结果
结果验证

案例二十六: 测试进程是否在系统目录中
问题
查看进程是否在系统目录
分析
1) Ps命令
2) 匹配所有进程ID
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 定义检查的内容
2) 将系统目录下所有文件添加至文件中
3) 查看进程ID,并添加至文件中
4) 匹配进程文件是否在系统目录
结果验证

案例二十七:查看节点是否开启web服务 (80端口)
问题
1) 机器是否开启80端口
2) 端口是哪个服务所占用
分析
1) 命令netstat查看端口
2) 匹配出服务名称
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 查看80端口是否存在
2) 存在,打印结果,并匹配出服务名称
3) 不存在,打印结果
结果验证

案例二十八: 查看用户信息
问题
1) 查看有关于账户的一切信息
2) 针对于某一用户
分析
1) 找到用户信息
2) 查看对应用户
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 判断是否输入
2) 判断是否用户是否存在
3) 存在,输出信息
4) 不存在,提示信息
结果验证

案例二十九: 计算100以内能整除3的数的和
问题
计算既能整除3还在100内的整数和
分析
1) 循环进行
2) 除三没有余数
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 确定循环范围
2) %除留余数
3) 判断是否留有余数
结果验证

案例三十: 特定用户安装服务
问题
1) 避免安装很多服务,设定只有特定用户才可以安装
分析
1) 查看ID号,与管理员比较
2) 安装服务
流程图
在这里插入图片描述

实现
在这里插入图片描述

实现分析
1) 因为管理员ID为0,与0比较
2) 是,安装服务
3) 不是,打印“检查”结果
结果验证

Shell脚本编程实战宝典:100个案例带你从小白到老司机(系统管理员必备) 各位脚本爱好者注意了!!今天咱们要聊的可是Linux系统里的"万金油"技能——Shell脚本编程。说个真实案例:去年我们公司服务器被挖矿病毒入侵,全靠一段15行的Shell脚本快速定位异常进程,直接挽回百万损失!(后怕.jpg)这玩意学好了,绝对能让你的运维效率翻倍!看完这10个典型案例是不是觉得Shell脚本也没那么难?(其实还有90个案例在我的GitHub仓库)记住:最好的学习方法就是动手实践!遇到问题别慌,多用man# 一行命令统计最常使用的10个命令count++;(这个神级命令建议保存到备忘录。 阅读详情

相关推荐

shell脚本保姆级教程,附赠100个shell脚本案例!

无论是系统运维,还是应用运维,均可分为“**纯手工”—> “脚本化”—> “自动化”—>“智能化”**几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避免重复性操作及风险,另一方面提高执行效率。 在自动化运维的转变过程中,经常使用的可能就是shell脚本了。 很多人认为shell脚本简单,但其实Shell的小脚本却有大智慧。别小看几十行代码,它夹杂着系统设计、代码规范和操作经验等等细节,在建设自动化运维的工作中,还是很值得我们研究学习的。 为了帮助大.

weixin_43507410的博客 2917

毕业一年,从事运维感觉没有出路,如何转型更有前景?

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

Python_0011的博客 2549

Shell脚本编程30分钟入门学习

Shell脚本编程30分钟入门学习转载

赤龙绕月的专栏 5857

10 个拿来就用的 Shell 脚本实例!

10 个拿来就用的 Shell 脚本实例!

欢迎朋友,我是一名十多年开发经验的新手,希望多多指教。 2733

Linux:9个实用shell运维脚本

1、Dos攻击防范(自动屏蔽攻击IP)#!/bin/bash DATE=$(date+%d/%b/%Y:%H:%M) LOG_FILE=/usr/local/nginx/logs/demo2.access.log ABNORMAL_IP=$(tail-n5000$LOG_FILE|grep$DATE|awk'{a[$1]++}END{for(iina)i...

IT技术分享社区 4367

Hypermesh2021实战:塑料圆盘结构化网格划分全流程(附避坑指南)

本文详细介绍了使用Hypermesh2021进行塑料圆盘结构化网格划分的全流程操作,包括几何预处理、网格生成策略及质量验证。特别针对工程实践中常见的12个典型问题提供解决方案,帮助用户提升CAE仿真分析的精度和效率。

weixin_29294597的博客 318

30个Linux Shell脚本经典案例(上)

在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块。虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的朋友也是如此,Shell脚本一直写的不6!在网上看例子能照猫画虎写出来,完全独立写就困难了。对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就...

liujinwei2005的专栏 9137

Discrete Optimization (Coursera) 学习笔记 Week 1 introduction (开个帖子)

Week 1 Introduction 这位教授Pascal Van Hentenryck 真的算是优化领域神级别的人物了吧?截一张Google scholar的图大家感受一下… 居然在Coursera上看到了他开的课:Discrete Optimization。试听了几节后,发现讲得很有激情,而且深入浅出。遂决定花暑假跟完这一门课。 这门课每周花两三个小时介绍基础概念,然后得花十几个小时写作业(coding)… 一开始以为Coursera上的课的作业应该不会太难,然后第一次作业(knapsack)我就被

ZJ_11701的博客 656

shell脚本30个案例(一)

通过一个多月的shell学习,总共写出30个案例,分批次进行发布,这次总共发布了5个案例,希望能够对大家的学习和使用有所帮助,更多案例会在下一次进行发布。

2401_82737195的博客 1598

S32K144 ADC硬件触发实战:PDB与TRGMUX配置避坑指南

本文深入解析了S32K144微控制器中ADC硬件触发的两种核心方案:PDB与TRGMUX。通过对比其架构差异、详细配置流程及常见问题排查,提供了从寄存器操作到DMA联动的完整优化指南,旨在帮助开发者解决多通道采样时序不稳、CPU负载过高等实际难题,实现高效稳定的数据采集。

weixin_29168153的博客 440

Nifi SNI 问题解决方案

Nifi 在配置 SSL 时,如果没有正确设置主机名(SNI),就会导致。为了解决这个问题,我们需要重新配置 Nifi 的 SSL 证书,并确保所有相关配置项(如服务器地址、证书路径和密码等)正确无误。以下是一个详细的解决步骤,以帮助你正确配置 Nifi 并解决 SNI 错误。文件中的配置项(如服务器地址、端口和证书路径),以及正确设置用户凭证。通过这些配置,你可以确保 Nifi 在支持 HTTPS 的同时,正确处理 SSL/TLS 的 SNI 问题。文件,配置服务器地址、端口以及证书路径和密码。

m0_58786911的博客 2295

【摘】30个Linux Shell脚本经典案例(上)

在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块。虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的朋友也是如此,Shell脚本一直写的不6!在网上看例子能照猫画虎写出来,完全独立写就困难了。对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就...

xiuzii的博客 3620

保姆级教程:Java调用海康SDK实现录像回放与倍速播放(附完整代码)

本文详细介绍了如何使用Java调用海康SDK实现录像回放与倍速播放功能,包括开发环境配置、设备连接、流媒体处理、倍速播放实现及性能优化等关键步骤。通过完整的代码示例和实战经验,帮助开发者快速构建智能录像回放系统,提升开发效率。

weixin_29285605的博客 357

shell脚本30个案例(终)

通过一个多月的shell学习,总共写出30个案例,此次为最后一次发布,希望对大家的学习有所帮助。

2401_82737195的博客 1425

vue接入海康4G版摄像头通过萤石云平台推送视频流教程

vue-video-player接入海康视频,videojs-contrib-hls,vue播放视频

renkai721的专栏 7276

基于改进Unet的多场景水果图像分割与分类研究

本文针对复杂场景下的水果图像分割问题,提出了一种改进Unet模型。通过构建包含8类水果、3种成熟度及多种干扰场景的数据集,采用ResNet50与MobileNetV3作为骨干网络,并在跳跃连接层集成CBAM注意力机制。实验表明,改进模型在测试集上达到91.6%的mIoU,推理速度提升23%,特别在重叠水果和低光照场景表现突出。研究为农业视觉检测提供了有效解决方案。

AI的内部世界的博客 302

shell脚本30个案例(二)

案例六、

2401_82737195的博客 1475

Java全栈开发:充电桩管理系统项目实战

技术收获深入理解分布式系统架构掌握高并发场景解决方案提升系统设计能力经验教训前期需求分析的重要性技术选型需要考虑长期维护测试覆盖率的重要性未来展望引入AI预测故障支持更多支付方式优化用户体验通过此项目的开发,不仅实现了充电桩的智能化管理,也积累了宝贵的全栈开发经验。项目中的很多技术方案和架构设计都具有普遍适用性,可以在其他类似项目中借鉴使用。@Componentstatic {// 初始化状态转换规则。

exlink2012的专栏 1250

30个Linux Shell脚本经典案例

在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块。虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好!也有很多做运维很多年的朋友也是如此,Shell脚本一直写的不6!在网上看例子能照猫画虎写出来,完全独立写就困难了。对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就是没...

caomeng1012的博客 1536

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

30个关于Shell脚本的经典案例(下)

导读 本文档介绍30个关于Shell脚本的经典案例(下) 本文目录 21、从FTP服务器下载文件 22、连续输入5个100以内的数字,统计和、最小和最大 23、将结果分别赋值给变量 24、批量修改文件名 25、统计当前目录中以.ht...

chuoqin1916的博客 936

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

30个实例带你从零开始玩转Linux Shell脚本编程,成为Shell大神!

引言大家好,我是一位永远怀着学习的心态的Linux和Python技术持续学习者,在今天的文章中,我将向大家分享一些有趣而实用的Linux Shell脚本编程例子,通过这些例子,你可以系统地学习和掌握Shell脚本编程,从入门到精通。让我们开始这个令人兴奋的编程之旅吧!要求环境在跟随本教程的过程中,你需要准备以下环境:一台运行Linux操作系统的计算机任何一种基本的文本编辑器,如Vim、Nano等实...

ouyangzhenxin的博客 6311

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Shell脚本之for循坏语句

一、for循环语句 语法结构 列表循环 不带列表循环 类c风格的for循环 1.1.列表循环 (1)格式1 for 变量名 in {list} do command done 案例1: ​ 案例2: ​ 案例3: ​ 案例4: ​ (2)格式2 for 变量名 in a b c do command done 案例1: ​ ​ (3)案例 ①:打印1-5这五个数字 ​ ​ ②:打印五次hello world...

weixin_64015933的博客 1万+

shell脚本30个案例(三)

mysqldump -u ${db_user} -p${db_password} ${db_name} > ${backup_file}:使用mysqldump命令备份数据库。local_files="/path/to/local/files"和remote_dir="user@backup_server:/path/to/remote/backup":分别指定本地要备份的文件或目录路径和远程服务器上的备份目录,这里的user@backup_server需要替换为实际的远程服务器用户名和地址。

2401_82737195的博客 1217

30个关于Shell脚本的经典案例(上)

对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就是没主动找需求,缺乏练习,缺乏经验。针对以上问题,总结了30个生产环境中经典的Shell脚本,通过这些需求案例,希望能帮助大家提升Shell编写思路,掌握编写技巧。...

933

shell脚本案例三十 (带详解) (上)

通过练习shell脚本案例来加强自己对shell脚本语法的理解

秋的博客 1230

shell脚本30个案例(四)

日志文件遵循$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"的格式,其中不同字段存储了不同的信息,如$remote_addr是访问者的 IP 地址,$time_local是访问时间,$request是请求内容,$status是状态码等。如果没有收到回应,则设备可能离线。

2401_82737195的博客 1065
上一篇: shell脚本案例(二)
别散
博客等级 码龄6年 21粉丝 18原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值