![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
shell脚本基础篇
shell脚本基础篇
半仙运维
在浩瀚宇宙中,何其渺小,博观而约取,厚积而薄发,足矣
展开
-
shell文本处理三剑客之awk详解
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能原创 2021-02-19 13:46:56 · 330 阅读 · 0 评论 -
shell文本处理三剑客之sed详解
文本处理:sed(Stream EDitor:流编辑)sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;格式:1 sed 选项 命令 文件 sed [options] '原创 2021-02-19 12:52:35 · 208 阅读 · 0 评论 -
shell文本处理三剑客之grep详解
grep目的过滤,查找文档中的内容分类grepegrep 扩展支持正则fgrep 不支持正则返回值0 是找到了 表示成功;1 是没有 表示在所提供的文件无法找到匹配的pattern2 找到地儿不对示范grep 'root' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologinecho $? 0grep 'root1' /原创 2021-02-18 19:34:07 · 359 阅读 · 2 评论 -
正则表达式
正则表达式正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序里,正则表达式都被置于两个正斜杠之间;例如 ,/l[oO]ve/ 就是由正斜杠界定的正则表达式,它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。工具 被vim、sed、awk、grep调用场景mysql、oracle、php、python ,Apache,Nginx... 需要正则元字符:基本正则^ 行首原创 2021-02-18 15:48:12 · 473 阅读 · 1 评论 -
shell脚本--模式匹配case
case 语法结构(字符串比较)case 变量 in模式1)命令序列1;;模式2)命令序列2;;模式3)命令序列3;;*)无匹配后命令序列esac简单的模式匹配邀请用户输入待删除用户名。if写法:询问用户,确定要继续删除吗 yes/no: " y#!/bin/bash#1请输入删除的用户名:read -p "please input a username : " user#2输出用户IDid $user &> /dev/null#4判断用户是否存原创 2021-02-16 20:08:25 · 1519 阅读 · 4 评论 -
生成ssh密钥并把公钥发送给一组主机(SSH免密登录)
#!/usr/bin/bash##2021/1/1##ssh-key lwqget_keygen(){/usr/bin/expct <<-EOF &>/dev/nullspawn ssh-keygenexpect { ".ssh/id_rsa):" { send "\r"; exp_continue } "Overwrite (y/n)?" { send "y\r"; exp_continue } "no passphrase):" { send原创 2021-03-19 20:31:15 · 905 阅读 · 1 评论 -
运维实用小脚本
1. ping主机测试#! /bin/bashping -w 1 $1 &>/dev/nullif [ $? -eq 0 ];then echo "$1 ok"else echo "$1 no"fi2. 判断一个用户是否存在#! /bin/bashid $1 &>/dev/nullif [ $? -eq 0 ];then echo ""$1"存在"else echo ""$1"不存在"fi3. 判断当前内核主版本是否为3,且次版本是否大于10原创 2021-03-08 20:08:30 · 345 阅读 · 0 评论 -
shell脚本--函数(函数结果赋值给数组)
函数结果 赋予数组一个数组可以交给函数加工之后在赋予给一个新的数组场景:用户获赠流量包(每人增加5G),结果运算**1 通过函数输出到数组**#!/bin/bashnum=(1 2 3)array(){ #local定义变量仅在函数中有效。local j #设置循环的次数,等于索引总数。 for i in $* do #定义不同的值乘以5.注意调取值的时候使用的是索引。outarray[j++]=$[$i+5]done #输出新的数组。 echo "${outarra原创 2021-02-18 09:51:00 · 2137 阅读 · 0 评论 -
shell脚本--函数(数组传参)
函数传参 数组传参1 制作一个简单的阶乘脚本。通过数组给函数传参#!/bin/bash#1 先定义一个数组num=(1 2 3)#2 定义一个函数array(){factorial=1for i in $* #(重点2)do#定义阶层的公式factorial=$[factorial * $i]doneecho $factorial}#调用函数使用数组(重点1)array ${num[*]}2 测试成功。[root@localhost ~]# ./fun3.sh原创 2021-02-18 09:48:02 · 648 阅读 · 0 评论 -
shell脚本--函数实战 (阶乘函数(传参))
需求制作函数用于阶乘思路1.了解阶乘概念1*2*3*4*5=120[root@localhost ~]# let aa=1*2*3*4*5;echo $aa1202 定义函数3 引用函数演示#!/bin/bash#定义函数名fun1fun1() {#定义阶乘元数factorial=1#使阶乘循环for((i=1;i<=5;i++))do#阶乘公式factorial=$[$factorial*$i]done#输出阶乘结果echo “5的阶乘是:$factor原创 2021-02-18 09:45:18 · 2592 阅读 · 0 评论 -
shell脚本--函数
函数:函数是一段完成特定功能的代码片段(块)在shell中定义了函数,就可以使代码模块化,便于复用代码注意函数必须先定义才可以使用。一、定义函数方法一:函数名() {函数要实现的功能代码}方法二:function 函数名 {函数要实现的功能代码}二、调用函数语法函数名函数名 参数1 参数2需求编写循环脚本,功能菜单provide these tools: show disk info(d) show mem info(m) show cpu info(c)原创 2021-02-18 09:39:54 · 86 阅读 · 0 评论 -
shell脚本--数组实战(while循环)
#!/bin/bash##循环读取文件。定义成数组##read 是读取输入重定向的内容 赋值给一个变量while read linedo#i++ 是索引自动加1 值是输入重定向里的内容以回车分割的hosts[i++]=$line#输入重定向给循环 循环用read 命令来读取done < /root/1.txt #echo ${!hosts[*]}#读取数组的内容#for循环数组的索引for i in ${!hosts[@]}do#$i 就是数组的索引原创 2021-02-18 09:33:43 · 1145 阅读 · 0 评论 -
shell脚本--数组
普通数组:定义的方法:一次赋予数组一个值(比变量多了一个下标)lwq[0]=pearlwq[1]=applelwq[2]=orangelwq[3]=peachdeclare -a | grep lwq 查看数组 ( declare -a 这个会把系统的所有数组显示出来 要加一个过滤)echo ${lwq[]} 调用索引 (@和都代表所有)定义的方法:一次赋予多个值lwq2=(tom jack alice) (默认情况下序号从0开始) echo ${lwq2[*]} echo ${!原创 2021-02-18 09:30:31 · 112 阅读 · 0 评论 -
shell脚本--expect实战:制作密钥推送密钥
准备存放ip的文件ip.txtvim ip.txt192.168.226.164192.168.226.165#!/usr/bin/bash##ssh-key ssh-copy-id##weqiang lirpm -q expect &> /dev/nullif [ $? -ne 0 ] ;then yum install -y expect &>/dev/nullfiget_keygen(){/usr/bin/expect <原创 2021-02-17 20:50:58 · 280 阅读 · 2 评论 -
shell脚本--expect交互
Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。需要安装:yum install -y expect tcl tclx tcl-devel (tcl* 时expect的解释器 插件) 通过expect解决ssh交互问题:vim ssh.exp#!/usr/bin/expectspawn ssh root@192.168.0.111 #spawn 后面跟的时要产生交互对的命令 #spawn expect 内部命令,启动一个shell程序。原创 2021-02-17 20:44:03 · 170 阅读 · 0 评论 -
shell脚本---until循环
until命令和while命令类似,while能实现的脚本until同样也可以实现,但区别是until循环的退出状态是不为0,退出状态是为0(与while刚好相反),即whie循环在条件为真时继续执行循环而until则在条件为假时执行循环。until语法结构until 条件测试do循环体done==当条件测试成立(条件测试为假视为成立),执行循环体需求:每个一秒循环一个数字 打到14不打了#!/bin/bashuntil [[ $i -eq 14 ]]dolet i++slee原创 2021-02-17 20:36:44 · 344 阅读 · 0 评论 -
shell脚本--while循环
while语句结构(死循环/逐行处理文件)while 条件测试 do循环体done==当条件测试成立(条件测试为真),执行循环体(条件测试语句 只要产生布尔值就行 布尔值只要是真的 就会执行do 和done之间的代码阅读和执行)示例:每秒显示一个数字,一次递增+1while :dolet i++ (对i进行+1的运算 然后再赋予i)sleep 1echo $idone...原创 2021-02-17 20:34:16 · 286 阅读 · 0 评论 -
shell脚本---使用for实现批量主机root密码的修改
准备:前提1:已经完成秘钥登录配置(ssh-keygen)免密码登录ssh-keygenssh-copy-ip ip地址前提2:定义主机地址列表前提3:并了解远程修改密码的方法ssh 192.168.226.164 " echo $pass | passwd --stdin root步骤:1 邀请用户输入密码2 循环调用IP地址3 执行远程修改(ssh 192.168.226.164 “touch ~/ddd.txt”)4 记录执行结果1.初步的脚本#!/bin/bash原创 2021-02-17 20:30:50 · 1309 阅读 · 0 评论 -
shell脚本循环--for循环
通过用户列表文件创建用户通过循环工具,探测全网主机。将在线主机记录在文本中。原创 2021-02-17 20:23:14 · 558 阅读 · 3 评论 -
shell脚本--if语句
单分支结构:语法:if 条件测试 ;then命令序列fi需求:编写脚本,由用户输入用户名,如果用户不存在,则创建该用户,并设置密码为123456脚本#!/bin/bashread -p "Input username: " nameid $name &> /dev/nullif [ $? -ne 0 ]; then useradd $name echo "123456" | passwd --stdin $name &> /dev/null echo原创 2021-02-16 20:01:42 · 460 阅读 · 0 评论 -
shell脚本判断---条件测试
字符串比较 文件测试 数值比较]and 和 or原创 2021-02-16 14:57:06 · 150 阅读 · 1 评论 -
shell脚本--变量
1.自定义变量定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.225.164引用变量: $变量名 或 ${变量名}查看变量: echo $变量名; "set"可以查看所有变量(包括自定义变量和环境变量)取消变量: unset 变量名作用范围: 仅在当前shell中有效示例:使用变量前。麻烦vim ping.sh#!/usr/bin/bashping -c1 192.168.100.10 &>/dev/null &&am原创 2021-02-15 18:36:41 · 225 阅读 · 0 评论 -
shell脚本4种执行方法和区别
执行方法执行1:bash 1.sh执行2:sh 1.sh执行3: .1.sh执行4: source 1.sh多种执行方式的区别:1和2的方式,是子shell(重新开起一个shell解释器)3和4的方式,是本shell(就在当前shell执行)测试1.准备环境vim bash.sh#!/usr/bin/bashcd /home/ls执行方式测试bash 1.shsh 1.sh观察目录没改变了 是在子shell执行的. bash.shs原创 2021-02-08 08:11:43 · 407 阅读 · 0 评论