![](https://img-blog.csdnimg.cn/2020090320221338.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Shell编程
文章平均质量分 57
记录学习shell的的苦与泪
wzj_110
天道酬勤
展开
-
shell编程(二十一)文件描述符
一 文件描述符文件描述符'File descriptor'是计算机的一个术语,是一个用于表述'指向文件的引用'的'抽象化'概念明确一点:用户通过'fd'对"文件"进行'读、写'操作文件:广义的文件,'普通'文件、目录、'管道pipe'、'FIFO(命名管道)'、socket、终端、'字符、块'设备二 句柄说明: 句柄'不在'本章节的考虑范围,本节讲解的是'Unix|Linux'下的文件句柄补充: 'Perl语法'文件句柄是'文件描述符fd'的进一步封装;'C语...原创 2021-11-05 18:26:17 · 2686 阅读 · 0 评论 -
shell编程(十七)读取文件
一 读取文件经常会对'文体文件'进行'逐行'处理,在Shell里面如何'获取'每行数据,然后'处理该行'数据,最后读取'下一行'数据,'循环'处理① read1)read命令接收'标准输入',或'其他文件描述'符的输入,得到输入后,read命令将数据放入一个'标准变量'中.2)利用read'读取文件'时,每次调用read命令都会读取文件中的"一行"文本3)当文件'没有可读'的行时,read命令将以'非零状态'退出#!/bin/bashwhile read linedo..原创 2021-04-12 22:55:40 · 216 阅读 · 0 评论 -
shell编程(二十)shell各种符号汇总
一 shell各种符号说明: 本文主要讲解'各种符号'的应用场景,尽可能'穷举'备注: 符号在'不同的场景',含义可能'不一样',主要讲解'shell'中,涉及少量的'regex'(1){}花括号① 通配符扩展备注: 匹配'字符集'中的'一个字符'② 语句块的构造说明: 作为一个'整体',不管'报错与否'都会'继续执行' -->除非'exit退出'特点: 多个命令'写在一块'备注: 多个命令分行写'等价'多个命令用';'一行连接③ 参数....原创 2021-04-12 21:47:03 · 4913 阅读 · 0 评论 -
shell编程(十九)shell脚本调试
一 shell脚本错误类型1)Syntax Error -->'语法'错误 -->静态分析-->'shellcheck' -->'讲解省略'2)Runtime Error -->'运行时'错误 -->'动态调试'3)Logic Error -->'逻辑'错误 -->'设计层面'备注: 这三种问题,'难度'依次增加二 几个调试常用的内置变量shell '小脚本'的调试基本都是echo 来处理$LI...原创 2021-04-11 12:18:19 · 491 阅读 · 0 评论 -
shell编程(十八)通配符和正则表达式
题记: 之前对'二者'傻傻的分不清,总出现'张冠李戴'的现象,下决心对此做一些'深入'的理解一 shell通配符① 基本概念1)glob 在正则出现'之前'就有了,主要用于匹配'目录'或'文件'路径,并'处理'各种后缀的文件('通称')理解: glob'整合到'shell中了,形成'shell通配符'2)重点:shell 通配符 'glob 模式'通常用来匹配'目录'以及'文件',而'不是文本内容'!!!② 常见通配符[characters] 字符集合的任...原创 2021-04-10 12:15:40 · 433 阅读 · 0 评论 -
shell编程(十五)数组
一 man bash1)bash只支持'一维'的'索引(indexed)'和'关联(associated)'数组 备注:关联数组类似'Python'的'dict(字典)'2)数组'大小没有限制',理论上跟内存成正比3)数组'不要求连续'4)'索引数组'要求下标必须是'整数(包含算术表达式)',默认从'0'开始5)'关联数组'要求下标必须是'字符串'6)内建的'declare'可用用来明确的定义'一个(indexed、assocated)数组'7)通过类似'array[.原创 2021-04-08 00:12:29 · 113 阅读 · 0 评论 -
shell编程(十四)IFS深入探究
一 IFS① shell变量IFS的定义man -Len -Pcol\ -b bash | sed -ne '/^ *IFS /{N;N;p;q}'1)字符串'扩展'之后,用来'做单词分割'2)内建的'read'命令,利用'IFS-->换行符'将文件'每行'内容作为一个'大单词'② 字符分割中使用IFS1)Shell把变量'IFS内'的'每一个字符'都当做是'一个分割符'(delimeter),用这些字符作为'每一个字段(word)'的结束符来进...原创 2021-04-05 16:33:25 · 220 阅读 · 0 评论 -
shell编程(九)条件测试与比较
一 条件测试重要: shell的各种'条件结构'和'流程控制'结构要进行各种测试,做各种'逻辑判断',根据'测试结'果执行不同的操作思考: 何为'真'、何为'假'? -->实质都是通过'$?'来判断'真价'备注: shell是'没有boolean'类型①shell真假判断实质: 根据'$?'作为判断依据;'0'为真,'非0'为假注意的是: [] 实际是'test'命令,[[]]是test的'增强版命令'备注: 如果想通过'cmd' 进行逻辑判断,...原创 2021-04-04 12:31:44 · 116 阅读 · 0 评论 -
shell编程(八)变量的数值计算
整数、浮点字典比较awk(后续讲解)、bc如何定义整数原创 2021-04-03 23:36:17 · 120 阅读 · 0 评论 -
shell编程(七)变量进阶
一 特殊位置参数变量传递方式: 从'命令行'、'函数'或'脚本执行'等处传递参数形如: $0、$1..$9、${10}..${n}① 位置参数默认是空格分割的思考: 是否能改变'分割行径'?备注: 尝试修改'IFS',但是'不起效果'② 加引号括起来的内容传参会被作为一个位置参数③ 位置参数变量匹配的原则特点: 不加'{}'时,'非贪婪'匹配,'找到'对应的变量,即会'停止'搜索重点: 当位置参数'大于9'时,需要'{}大括号'将数字括起来--...原创 2021-04-03 16:28:34 · 246 阅读 · 0 评论 -
shell编程(六)变量再谈
一 系统环境变量(1)TMOUT -->退出前等待超时的秒数-->防止占用链接,尤其是远程的时候 -->深入讨论一波(2)SHLV1=1 -->bash实例的个数-->脚本的执行方式差异性(3)PS4 -->开启追踪时使用的调试提示符串,默认值是'+',需要追踪可用 ’set -x‘ 开启(4)人为设置(全局)环境变量 -->export关键字-->例如:JAVA_HOME -->自定义环境变量(5)PPID-->父...原创 2021-04-02 20:44:58 · 306 阅读 · 0 评论 -
Shell编程(二)基础知识
一 什么是Shell① 翻译② wiki解释③为什么要有shell存在用户直接面对的'不是'计算机硬件而是shell,用户把'指令(Ring)'告诉shell('媒介'),然后shell再'传输给系统内核',接着'内核'再去支配'计算机硬件'去执行各种操作关键: 出于安全的'角度'原因: 系统'内核'对计算机的正常运行来讲是太'重要'了,因此一般'不建议'直接去编辑内核中的参数,而是让用户通过'基于系统调用接口'开发出的程序或服务来'管理'计算机shell: 它...原创 2021-03-31 11:12:35 · 129 阅读 · 0 评论 -
shell编程(一)开发利器
一 vim配置shell开发环境① 注释1)开头注释2)函数帮助文档撰写②vim 自动补全说明: 除了'注释说明'之外,这里主要集中在'自动补全'上+++++++++'shell'脚本中'vim'的技巧+++++++++1) 当前shell脚本中'已有关键字'的自动补全2)'文件名'的自动补全、'命令'的自动补全-->'命令的绝对路径'3)自定义字典'dict'形式补全1)缓冲区补全核心:主要是'变量补全'2)文件名补全思考...原创 2021-03-30 13:47:03 · 150 阅读 · 0 评论 -
linux杂谈之cat <<EOF、<<-EOF、<<‘EOF‘区别
(0)为什么会有这两个存在?或者说为什么会有这个需求?最开始学习的时候-->一定要'定格写' -->但是'不美观','可读性差'shell脚本的'可读性'!!!(1)共性解释'都是获取stdin,并在EOF作为标准输入的结束'cat > helo.txt << EOFHello JavaHello LinuxEOF--------------------- '分割线' ---------------------cat > h原创 2020-08-19 21:31:56 · 1676 阅读 · 0 评论 -
linux杂谈之特殊字符的打印和在各种软件如何打出
一 为什么要谈谈特殊字符的初衷时常,某个程序或软件'并没有语法错误',并且你检查'相关的内容'也确实没有发现问题因为用'普通文本编辑器'软件来查看的时候,有'许多字符没有显示出来'--> 最常见的是:直接copy相应的内容到linux的vim编辑器里面,很多windows的'断行符'二 cat特殊的指令三 vim输入特殊字符[root@shell mnt]# cat -A jj ^I$'插入模式下' --> 'ctrl+v+Tab...原创 2020-08-18 22:06:12 · 682 阅读 · 0 评论 -
linux杂谈之openssl升级
场景引入1:yum安装nginx时,发现openssl依赖包错误,提示openssl要求版本为1.0.2以上,但当前版本为1.0.0场景引入2:centos7 下升级openssl并安装python3场景引入3:漏洞扫描,有漏洞,需要进行升级编译python3时需要带上'编译ssl 模块参数'已知:'Python3.7'使用的openssl为'1.0.2'版本或'1.1'以上的版本可能存在的问题: 安装了Python3.7之后,遇到的一个很麻烦的坑就是与'系统自带的ssl版本不兼容'.原创 2020-08-10 22:45:05 · 512 阅读 · 0 评论 -
linux杂谈之ssh静默产生公钥和私钥
需求:以脚本的方式非交互的产生ssh-keygen -f ~/.ssh/id_rsa -t rsa -N ''-t : '指定创建密钥的类型' --> '一般是rsa'-f : '指定保存密钥的文件名' -N : '加密' --> ''表示输入密码为空理解: '对照命令名交互输出来理解'后续补图...原创 2020-08-09 18:27:53 · 645 阅读 · 0 评论 -
linux杂谈之程序后台运行
之前写的一篇bash工作管理一 场景引入 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径 1)要么让进程'忽略 HUP 信号' --> 'nohup'...原创 2020-08-09 12:10:41 · 133 阅读 · 0 评论 -
linux杂谈之进制转换
场景引入:看硬件告警,告警id在不一样的平台显示不一样的进制(十进制和十六进制),想着能不能统一以下(1)十六进制转换成十进制0x --> '开头'表示是十进制%d --> '转换为10进制的格式'echo --> 16'十进制'#F'待转换的16进制的数' --> '只要是转换成十进制都可以尝试这种方法'(2) 10进制转换成16进制printf %x 123 -->7b -->如何加上前缀'0x'呢?echo "obas原创 2020-08-06 22:55:16 · 290 阅读 · 0 评论 -
linux杂谈之加密(二)shell加密
一 简介目的:使用 shc 对 Linux shell 脚本加密.shc是一个专业的加密shell脚本的工具,它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、密码等不希望公开的问题。shc是一个脚本编译工具, 使用'RC4加密算法',将shell脚本编译成'动态链接'或者'静态链接'的'可执行文件'官网下载地址二 安装wget http://www.datsi.fi.upm.es/~frosal/sources/shc...原创 2020-08-04 22:29:01 · 279 阅读 · 0 评论 -
linux杂谈之系统性能分析(三)进程
一 概念进程管理 要对进程进行检测和控制,首先需要了解当前进程的状况,也就是需要查看当前进程,而ps命令就是最基本的同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行中的状态、进程是否结束、进程是否有僵尸进程、哪些进程占用了过多的资源等等,总之大半部分信息可以通过执行命令得到,ps最常用的还是用于监控后台进程的工作情况,因为后台进程不和鼠标和键盘这种标准输入/出进行通信的。 Linux中的ps命令是ProcessStatus的缩写,ps...原创 2020-08-03 22:43:13 · 236 阅读 · 0 评论 -
linux杂谈之系统性能分析(二)内存
一 性能产生的问题程序的运行是在操作系统或虚拟机之上,出现'问题的根因'是程序出现'抢占或者等待'其它程序资源对象的现象例如: CPU资源、内存资源、磁盘IO、网络IO二 运维对于性能的定位类似与'医生给病人看病',必须找到'问题的症结'所在,才能'对症下药''使用操作系统自带的一些工具来定位'三 free命令关联命令cat /proc/meminfotopvmstat...原创 2020-08-03 22:26:47 · 192 阅读 · 0 评论 -
linux杂谈之系统性能分析(一)top命令
一 top简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程(级别)的资源占用状况,类似于Windows的任务管理器。 top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视,它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用、执行时间对任务进行排序;而且该命令的很多特性都可...原创 2020-08-02 21:41:09 · 155 阅读 · 0 评论 -
linux杂谈之find命令
说明:本文以案例为导向##################### 查找 #####################------ '需求1:查找以.txt和.pdf结尾的文件 -->or -->多条件组合查询' ------find / -name '*.txt' -o -name '*.pdf'find . \( -name "*.txt" -o -name "*.pdf" \)# 正则方式-->特殊字符需要转义find . -regex ".*\(\.原创 2020-08-04 20:31:23 · 233 阅读 · 0 评论 -
linux杂谈之curl命令
说明:本章最开始的学习目的是为了学习HTTP的请求头,通过curl来调用,可能有重复造轮子的意思,记录学历历程。http权威指南如何使用Curl向RESTFUL风格的API发送HTTP请求curl官方文档(1)默认将输出打印到标准输出状态30X码重定向说明:默认展示的是index.html文件-L, --location --> '强制重定向' --> 一般'服务器'端配置了'重定向'的规则说明:默认情况下curl不会发送'HTTP Locati原创 2020-08-02 13:08:55 · 243 阅读 · 0 评论 -
linux杂谈 如何利用多核CPU来加速你的Linux命令
一 mak原创 2020-08-01 12:58:40 · 899 阅读 · 0 评论 -
linux杂谈之文件句柄
前提说明:非计算机理解这句话说实话有点吃力哈(学过C语言的可能比较好理解了),所幸啃下来了一 句柄概念句柄是在 Windows 中引入的一个概念,它是和对象一一对应的 32 位无符号整数值。句柄可以映射到唯一的对象,它是处理对象的一个接口,对于所涉及的对象,可以通过相应的句柄来操作它。句柄的引入主要是操作系统为了避免应用程序直接对某个对象的数据结构进行操作为目的,用操作句柄来代替操作对象。二 limits.conf的工作原理limits.conf是pam_limits.so的配置...原创 2020-08-01 11:16:39 · 246 阅读 · 0 评论 -
linux杂谈之sysctl命令
概要:之前也用过该命令临时修改内核参数,本博客就将相应的知识点一网打尽,不足之处,请大家补充下哈一 内核参数 sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/IP堆栈和虚拟内存系统的高级选项, 有经验的管理员可以提高系统性能。 备注:用sysctl可以读取设置超过五百个系统变量,一般不做内核性能调优的话了解四、五个即可。(2)了解proc(3)如何修改1)命令行临时修改sysc...原创 2020-08-01 10:06:11 · 277 阅读 · 0 评论 -
shell编程(五)多行注释
(1)方式1:比较推荐的:<<! '被注释的内容'!备注:理论上!字符可以被'替换成'任意(random)的'字符或单词',但是由于被注释的代码中最好'不要'与该多行字符字符'相同',否则'容易出错'';'也是一个不错的考虑说明:达到预期的效果(2)有歧义:' 说明:这种方式目前是有问题-->'AMD的CPU上执行',但是在我另外一台电脑'没问题',后续思考'linux'版本不同'或者'bash版本不同',并'不会所有场景都原创 2020-07-30 22:57:37 · 536 阅读 · 0 评论 -
shell数组(一)基础
一 Shell 数组数组中可以存放多个值,Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。与大部分编程语言类似,数组元素的下标由0开始Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:二 数组定义方法(1)逐个赋值涉及知识点(0)获取数组'某个index'的元素 '-->补充':echo ${names:0}(1)获取数组里面'元素的个数' (2)获取数组'全部的元素'(3)...原创 2020-07-30 20:53:13 · 149 阅读 · 0 评论 -
shell编程(六)语言编码规范之(变量)
一 shell的学习步伐学习'shell的精髓': 1)'实质'其实就是一堆'命令的集合'而已,'文本处理,数据采集' 2)初学者从简单的shell脚本学起('先研究格式语法') 3) 再研究'编程思想'在里面('语言的编程规范') 4)脚本的'整体性能'-->时间指标 5)脚本安全的规范('数据安全')和'脚本开发的规范(纳入版本控制)'二 shell的变量(1)变量的组成变量 = '变量名' + '变量值'变量名:变量...原创 2020-07-30 20:51:13 · 221 阅读 · 0 评论 -
shell编程(四)语言编码规范之(注释)
规范考虑的方面:安全的角度、性能的角度、代码的可读性最佳实践:针对bash语言编程中的'数据校验'、'加密和解密'、'脚本执行'、'目录或文件'操作,描述可能导致'安全漏洞或风险'的常见编码错误.该规范旨在:'减少SQL注入'、'敏感信息泄露'、'环境变量攻击'、'临时文件攻击'等方面的安全问题一 开始大餐(1)注释 1)幻数#!/usr/bin/env bash说明:解析器必须'位于首行'原因:为了提高程序的'移植性','#!/usr/bin/env bas...原创 2020-07-30 20:49:57 · 821 阅读 · 0 评论 -
awk(四)杂乱
(1)字段划分的细节三种完全不同的方法使awk分割字符1)记录的前导空白字符和结尾空白字符被忽略,字段用空格和/或制表符来分割-->因为FS默认是一个空格2)使用其他的单个字符来分割字段3)设置不止一个字段作为字段分隔符,实质是作为一个正则表达式来解释原则:贪婪匹配上案例!...原创 2020-07-02 20:51:51 · 141 阅读 · 0 评论 -
awk(三)杂乱
本文整体布局,按照sed和awk第二版的重点来,算是学习笔记吧!小记:前两篇章是自己总结的,可以先了解下,本文不打算按部就班的讲,以前面两节为知识铺垫!核心:掌握awk的规则awk是一门解释性(程序设计)语言,本文从打印Hello Awk开始(1)需求:打印 Hello Awk# 细细体会这种写法-->双引号包含单引号awk 'BEGIN{print "'$var'"}'test小知识点#(1)echo -e激活转义字符,使用-e选项时,若出现某些特殊字原创 2020-06-18 23:23:22 · 218 阅读 · 0 评论 -
linux杂谈之wget命令
把握要点:'常见命令'和'应用场景'场景1:限速下载(1) 当你'执行wget的时候',它默认会'占用全部可能的宽带下载',但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了用法# 使用--limit -rate限速下载,限制速度为300K wget --limit-rate=300k url资源# 注意限制的是'本地消耗的带宽'场景2:断点...原创 2020-04-26 21:20:34 · 362 阅读 · 0 评论 -
shell计算(二)let和expr命令
一 let运算命令(1)let运算命令的'语法格式':let 赋值表达式-->let a=3+5let'赋值表达式'的功能等同于--->'((赋值表达式))''let i=i+2' ==>等价 '((i=i+2))''关键':后者的效率更高取消变量unset 环境变量unset JAVA_HOME不管是临时环境变量还是系统环境变量('只对...原创 2020-04-26 22:17:20 · 815 阅读 · 0 评论 -
shell计算(一)
说明:该篇主要是'算数运算命令''(())'的用法强调:'方法很多,精通一种即可,能看懂其他的即可'一 算数运算符二 算数运算命令三 实战(1)基础语法(2)简单数值计算(3)混合计算'需求':计算1+2...+100的和细节:'(())'里面两端可以有任何的空格,为了增强'可读性',一般'两端各留一个空格'...原创 2020-04-26 21:21:19 · 185 阅读 · 0 评论 -
shell编程(二十一)trap捕捉信号
参考1参考2原创 2020-04-21 19:40:28 · 150 阅读 · 0 评论 -
bash shell的学习路程(三)
回顾变量的设置方式:命令行直接设置,本章节来介绍第二种方式交互设置:某些程序在执行的过程中,会等待用户通过键盘输入yes/no之类的信息来完成交互!bash的另一个功能:声明变量的属性----->数组或者是数字!读取来自键盘输入的变量:read------>最常用在shell script的编写read命令从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合...原创 2020-04-03 16:40:25 · 254 阅读 · 0 评论 -
shell杂谈(一)
一 明确shell应用场景:底层自动化的脚本!Python:CMDB管理 ,上层,Web界面CMDB的管理,监控的软件,大数据的分析!给自己的任务:每天写一些有趣的系统脚本,不管是用什么语言!初级运维:只会搭建基础的服务!对自己的定位:精通shell,熟悉python和perl以及script!shell的强大:shell脚本没有太多的函数库,但是有2000多个lin...原创 2019-08-30 21:46:22 · 253 阅读 · 0 评论