
每天一个Shell脚本
11+11
记录没好的一天
展开
-
自定义rm
例100需求:linux系统的rm命令太危险,一不小心就会删除掉系统文件。 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做练习:简单假设有一个大的分区/data/,每次删除文件或者目录之前,都要先在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201703271012/,然后把所有删除的文件同步...原创 2019-12-23 20:17:20 · 225 阅读 · 0 评论 -
修改文本格式
例99需求:请把下面的字符串:zhangsany97JbzPrulisi5JhvCls6qxiaowangNnr8qt2MalaomaiqMtvC02yzhaosi9fxrb4sJD改为如下:zhangsan:y97JbzPrulisi:5JhvCls6qxiaowang:Nnr8qt2Malaoma:iqMtvC02yzhaosi:9fxrb4sJD#!/b...原创 2019-12-23 20:15:32 · 268 阅读 · 0 评论 -
截取字符串
例98需求:利用你学过的知识点,想办法根据要求截取出字符。字符串var=http://www.aaa.com/root/123.htm1.取出www.aaa.com/root/123.htm2.取出123.htm3.取出http://www.aaa.com/root4.取出http:5.取出http://6.取出root/123.htm7.取出123#!/bin/bash#这...原创 2019-12-23 20:10:38 · 132 阅读 · 0 评论 -
打印三角形
例97需求:之前咱们打印过正方形,也打印过乘法口诀,那今天来打印一个三角形(正三角形,元素用*表示)。#!/bin/bash#这个脚本用来打印三角形#作者:xzm#日期:2019-12-23while truedo read -p "please input the lenth: " n if [ -z $n ] then echo "要输入一...原创 2019-12-23 20:08:53 · 241 阅读 · 0 评论 -
并发备份数据库
例96需求:领导要求小明备份数据库服务器里面的100个库(数据量在几十到几百G),需要以最快的时间完成(5小时内),并且不能影响服务器性能。#!/bin/bash#这个脚本用来并发备份数据库#作者:xzm#日期:2019-12-23##假设100个库的库名、host、port以及配置文件路径存到了一个文件里,文件名字为/tmp/databases.list##格式:db1 10.10...原创 2019-12-23 20:07:20 · 142 阅读 · 0 评论 -
自动挂载云盘
例95需求:我们使用的云主机,购买一块云盘后,默认并不是挂载状态的,用shell写一个脚本,只要把盘符和挂载点以参数的形式提供给脚本,该脚本就可以自动格式化、挂载。要求:不用分区,直接格式化格式化为ext4文件系统类型#!/bin/bash#这个脚本用来自动挂载磁盘#作者:xzm#日期:2019-12-20if [ $# -ne 2 ]then echo "Usea...原创 2019-12-20 17:53:43 · 176 阅读 · 0 评论 -
批量查多台机器负载
例94需求:假如公司的一个业务,域名为www.aminglinux.com,现在有5台机器在跑。为了快速查看这5台机器的负载,需要你写一个Shell脚本,运行脚本后,就能一下子把5台机器的负载全部打印出来。#!/bin/bash#这个脚本用来批量查机器负载#作者:xzm#日期:2019-12-20for ip in `cat /tmp/ip.list`do echo $ip ...原创 2019-12-20 17:50:58 · 147 阅读 · 0 评论 -
一键安装配置samba
例93写个shell脚本,能够实现一键安装并配置samba服务,执行该脚本时需要带一个参数,为共享的目录,目录若不存在,需自动创建要求,任何人都可以访问,且不用密码,并且目录是只读的。#!/bin/bash#这个脚本用来一键安装并配置samba#作者:猿课-阿铭 www.apelearn.com#日期:2018-12-17if [ "$#" -ne 1 ]then echo...原创 2019-12-20 17:48:26 · 368 阅读 · 0 评论 -
docker管理脚本
例92需求:写一个脚本,实现一键管理docker容器,比如启动、关闭、删除容器等操作。要求:脚本支持启动全部容器、关闭全部容器、删除全部容器需要提示用户如何使用该脚本,需给出范例#!/bin/bash#这个脚本用来管理docker容器#作者:xzm#日期:2019-12-20while truedo read -p "请输入你要执行的操作:(stop/start/r...原创 2019-12-20 17:45:49 · 296 阅读 · 0 评论 -
部署mysql主从
例91需求:shell部署mysql主从核心要点:步骤一:主上盖配置文件,打开bin-log,设定server_id,设定ignore_db ,重启,授权用户,锁表,show master status从上改文件,设定server_id 重启,stop slave,change master ,start slave.在主上写一个脚本,所有在此脚本中完成,包括写expect脚本和执行ex...原创 2019-12-20 17:42:09 · 104 阅读 · 0 评论 -
自动秘钥认证
例90写一个shell脚本,当我们执行时,提示要输入对方的ip和root密码,然后可以自动把本机的公钥增加到对方机器上,从而实现密钥认证。#!/bin/bash#这个脚本用来自动配置密钥认证#作者:xzm#日期:2019-12-19read -p "输入一个IP地址: " ipread -p "输入此机器的root密码: " pasdis_install(){ if ! ...原创 2019-12-19 21:56:32 · 187 阅读 · 0 评论 -
检查域名是否到期
例89需求:写一个shell脚本,查询指定域名的过期时间,并在到期前一周,每天发一封提醒邮件。#!/bin/bash#这个脚本用来检查域名是否到期#作者:xzm#日期:2019-12-19mail_u=admin@admin.com#当前日期时间戳,用于和域名的到期时间做比较t1=`date +%s`#检测whois命令是否存在,不存在则安装jwhois包is_install_...原创 2019-12-19 21:55:04 · 556 阅读 · 0 评论 -
去掉文件名后缀
例88需求:至少用两种方法,批量把当前目录下面所有文件名后缀为.bak的后缀去掉,比如1.txt.bak去掉后为1.txt#!/bin/bash#这个脚本用来去掉文件名后缀#作者:xzm#日期:2019-12-19for f in `ls -d ./*.bak `do#mv $f `echo $f|sed 's/.bak$//'` f1=`echo $f|awk -F ...原创 2019-12-19 21:53:31 · 785 阅读 · 0 评论 -
关闭服务
例86需求:在centos6系统里,我们可以使用ntsysv关闭不需要开机启动的服务,当然也可以使用chkconfig工具来实现。写一个shell脚本,用chkconfig工具把不常用的服务关闭。脚本需要写成交互式的,需要我们给它提供关闭的服务名字。#!/bin/bash#这个脚本用来关闭服务#作者:xzm#日期:2019-12-19LANG=enwhile :do ch...原创 2019-12-19 21:47:19 · 194 阅读 · 0 评论 -
统计并发量
例85需求:需要统计网站的并发量,并绘图。 只需要写出shell脚本即可,不用关心zabbix配置。假设日志路径 /data/logs/www.aaa.com_access.log日志格式如下:112.107.15.12 - [07/Nov/2018:09:59:01 +0800] www.aaa.com “/api/live.php” 200"-" “Mozilla/4.0 (compa...原创 2019-12-19 21:45:33 · 591 阅读 · 0 评论 -
代码上线
例84需求:一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具。有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上。但是其他2台服务器也需要做相同变更。写一个shell脚本,把A服务器上的变更代码同步到B和C上。其中,你需要考虑到不需要同步的目录(假如有tmp、upload、logs、caches)#!/bin/bash#这个脚本用来...原创 2019-12-18 17:52:27 · 112 阅读 · 0 评论 -
打印城市名称
例83需求:写一个脚本让用户输入多个城市的名字(可以是中文),要求不少于5个,然后把这些城市存到一个数组里,最后用for循环把它们打印出来。#!/bin/bash#这个脚本用来打印城市名字#作者:xzm#日期:2019-12-18read -p "输入不少于5个城市的名字,用空格分隔开。" namen=`echo $name|awk '{print NF}'`if [ $n -lt...原创 2019-12-18 17:37:30 · 348 阅读 · 0 评论 -
查看tomcat日志
例82需求:写一个截取tomcat catalina.out日志的脚本tomcat实例t1-t4# find /opt/TOM/ -name catalina.out/opt/TOM/t1/logs/catalina.out/opt/TOM/t3/logs/catalina.out/opt/TOM/t4/logs/catalina.out/opt/TOM/t2/logs/ca...原创 2019-12-18 17:20:00 · 198 阅读 · 0 评论 -
监控磁盘IO
例89需求:阿里云的机器,今天收到客服来的电话,说服务器的磁盘io很重。于是登录到服务器查看,并没有发现问题,所以怀疑是间歇性地。正要考虑写个脚本的时候,幸运的抓到了一个线索,造成磁盘io很高的幕后黑手是mysql。此时去show processlist,但未发现有问题的队列。原来只是一瞬间。只好继续来写脚本,思路是,每5s检测一次磁盘io,当发现问题去查询mysql的processlist。...原创 2019-12-18 17:09:42 · 177 阅读 · 0 评论 -
房贷计算器
例80需求:贷款有两种还款的方式:等额本金法和等额本息法,简单说明一下等额本息法与等额本金法的主要区别:等额本息法的特点是:每月的还款额相同,在月供中“本金与利息”的分配比例中,前半段时期所还的利息比例大、本金比例小,还款期限过半后逐步转为本金比例大、利息比例小。所支出的总利息比等额本金法多,而且贷款期限越长,利息相差越大。等额本金法的特点是:每月的还款额不同,它是将贷款额按还款的总月数均分...原创 2019-12-18 16:46:53 · 406 阅读 · 0 评论 -
删除日志
例79需求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件。在堡垒机批量发布,也要批量发布到crontab里面。A类机器日志存放路径很统一,B类机器日志存放路径需要用匹配(因为这个目录里除了日志外,还有其他文件,不能删除。匹配的时候可用.log)A类:/opt/cloud/log/ 删除7天前的B类: /opt/cloud/instances/ 删除15天前的要求...原创 2019-12-18 16:42:54 · 186 阅读 · 0 评论 -
删除日志
例79需求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件。在堡垒机批量发布,也要批量发布到crontab里面。A类机器日志存放路径很统一,B类机器日志存放路径需要用匹配(因为这个目录里除了日志外,还有其他文件,不能删除。匹配的时候可用.log)A类:/opt/cloud/log/ 删除7天前的B类: /opt/cloud/instances/ 删除15天前的要求...原创 2019-12-18 16:42:09 · 155 阅读 · 0 评论 -
处理文本
例78需求:有如下文本,其中前5行内容为1111111:134432534562222222:132112221221111111:136435435443333333:123412431232222222:12123123123用shell脚本处理后,按下面格式输出:[1111111]1344325345613643543544[2222222]13211222122...原创 2019-12-17 17:02:38 · 105 阅读 · 0 评论 -
老日志打包
例77需求:写一个脚本查找/data/log目录下,创建时间是3天前,后缀是*.log的文件,打包后发送至192.168.1.2服务上的/data/log下,并删除原始.log文件,仅保留打包后的文件。#!/bin/bash#这个脚本用来查找老日志打包#作者:xzm#日期:2019-12-17cd /data/logfind . -type f -name “*.log” -mtim...原创 2019-12-17 16:56:19 · 232 阅读 · 1 评论 -
杀进程
例76需求:linux系统中,目录/root/下有一个文件ip-pwd.ini,内容如下:10.111.11.1,root,xyxyxy10.111.11.2,root,xzxzxz10.111.11.3,root,12345610.111.11.4,root,xxxxxx文件中每一行的格式都为linux服务器的ip,root用户名,root密码,请用一个shell批量将这些服务器中...原创 2019-12-17 16:53:30 · 126 阅读 · 0 评论 -
小函数
例75需求:请撰写一个shell函数,函数名为 f_judge,实现以下功能当/home/log目录存在时将/home目录下所有tmp开头的文件或目录移到/home/log目录。当/home/log目录不存在时,创建该目录,然后退出。#!/bin/bash#这个脚本用来写一个小函数#作者:xzm#日期:2019-12-17f_judge(){ if [ -d ...原创 2019-12-17 16:45:52 · 142 阅读 · 0 评论 -
格式化xml
例74需求linux系统 /home目录下有一个文件test.xml,内容如下:<configuration> <artifactItems> <artifactItem> <groupId>zzz</groupId> <artifactId>aaa</artifa...原创 2019-12-17 16:42:44 · 149 阅读 · 0 评论 -
问候
例73写一个脚本,依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么,如:Hello, root,your UID is 0.#!/bin/bash#这个脚本用来问候用户#作者:猿课-阿铭 www.apelearn.com#日期:2018-12-11cat /etc/passwd |while read linedo username=`echo $li...原创 2019-12-17 16:24:56 · 679 阅读 · 0 评论 -
打印正方形
例72需求:根据用户输入的数字,打印一个对应的正方形■#!/bin/bash#这个脚本用来打印正方形#作者:xzm#日期:2019-12-16while :doread -p "Please input a nuber: " nn1=echo $n|sed 's/[0-9]//g'if [ -n “n1"]thenecho"n1" ] then echo...原创 2019-12-16 21:54:29 · 210 阅读 · 0 评论 -
判断文件并计算单词
例71需求:1. 判断所给目录内哪些二级目录下有没有text.txt文件。2. 有text.txt文件的二级目录,计算出该test.txt文件里面所给出单词的次数。3. 假如脚本名字为1.sh, 运行脚本的格式为 ./1.sh 123 root,其中123为目录名字,而root为要计算数量的单词。#!/bin/bash#这个脚本用来判断文件是否存在并计算单词个数#作者:xzm#日...原创 2019-12-16 21:43:42 · 104 阅读 · 0 评论 -
杀进程
例62需求:把当前用户下所有进程名字中含有"aming"的进程关闭。#!/bin/bash#这个脚本用来杀进程#作者:xzm#日期:2019-12-13ps -u USER∣awk′USER|awk 'USER∣awk′NF ~ /aming/ {print $1}’ |xargs kill...原创 2019-12-13 20:54:23 · 102 阅读 · 0 评论 -
并发备份数据库
例63需求:用shell实现,以并发进程的形式将mysql数据库所有的表备份到当前目录,并把所有的表压缩到一个压缩包文件里。假设数据库名字为mydb,用户名为aming,密码为passwd。#!/bin/bash#这个脚本用来并发备份数据库#作者:xzm#日期:2019-12-13N=5mysql -uaming -ppasswd mydb -e “show tables”|sed...原创 2019-12-13 20:58:23 · 178 阅读 · 0 评论 -
判断CPU厂
例65需求:已知下面的字符串是通过RANDOM随机数变量md5sum|cut -c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?2102929900205d1ca3da16771f6d12dd890684ba#!/bin/bash#这个脚本用来破解字符串#作者:猿课-阿铭 www.apelearn.com#日期:2018-12-08for ...原创 2019-12-13 20:59:37 · 71 阅读 · 0 评论 -
监控CDN
题目要求一个网站,使用了cdn,全国各地有几十个节点。需要你写一个shell脚本来监控各个节点是否正常。假如监控的url为www.aming.com/index.php源站ip为88.88.88.88。参考答案#!/bin/bash#这个脚本用来监控CDN节点#作者:猿课-阿铭 www.apelearn.com#日期:2018-12-08s_ip=88.88.88.88u...原创 2019-12-13 20:56:46 · 188 阅读 · 0 评论 -
简易计算器
例70需求:实现加减乘除运算,示例:./1.sh 1+2#!/bin/bash#这个脚本用来计算两个数字的加减乘除#作者:xzm#日期:2019-12-16if [ $# -ne 3 ]thenecho “你给的参数个不对,请输入三个参数”exitfiif_number(){n1=echo $1|sed 's/[0-9.]//g'if [ -n “$n1” ]then...原创 2019-12-16 17:50:46 · 99 阅读 · 0 评论 -
lamp增加项目
例69需求:服务器上,跑的lamp环境,上面有很多客户的项目,每个项目就是一个网站。 由于客户在不断增加,每次增加一个客户,就需要配置相应的mysql、ftp以及httpd。这种工作重复性非常强的,所以用脚本实现非常合适。mysql增加的是对应客户项目的数据库、用户、密码,ftp增加的是对应项目的用户、密码(使用vsftpd,虚拟用户模式),httpd就是要增加虚拟主机配置段。#!/bin/b...原创 2019-12-16 17:31:26 · 200 阅读 · 0 评论 -
打印子进程
例68需求:给出一个进程的PID,打印该进程下的子进程及子进程下的所有子进程#!/bin/bash#这个脚本用来打印子进程#作者:xzm#日期:2019-12-16ps -elf >/tmp/pid.txtread -p "please input a pid: " pif [ -z "$p" ]then echo "你没有输入pid" e...原创 2019-12-16 17:19:58 · 243 阅读 · 0 评论 -
cpu使用率
例67需求:监控系统CPU使用率,使用率超90收敛告警通知用户#!/bin/bash#这个脚本用来计算CPU使用率#作者:xzm#日期:2019-12-16mail_user=xxx@xxx.comm_mail() { log=$1 t_s=`date +%s` t_s2=`date -d "1 hours ago" +%s` if [ ! -f /...原创 2019-12-16 16:52:21 · 88 阅读 · 0 评论 -
找文件差异
例61有两个文件a.txt和b.txt,需求是,把a.txt中有的但b.txt中没有的行找出来,并写入到c.txt,然后计算c.txt文件的行数。``#!/bin/bash#这个脚本用来比较文件差异#作者:xzm#日期:2019-12-13cat a.txt|while read linedo if ! grep -q "$line" b.txt then echo...原创 2019-12-13 20:52:20 · 68 阅读 · 0 评论 -
判断数字大小
例60需求:判断两个数字的大小,考虑浮点数#!/bin/bashif [ $# -ne 2 ]then echo "请提供两个参数." exitfiif_number() { if echo $1|grep -q '^-' then nu=`echo $1|sed 's/^-//'` else nu=$1 fi n=`ech...原创 2019-12-12 21:30:21 · 342 阅读 · 0 评论