shell脚本

shell学习笔记(2)

限于喜欢 提交于 2019-11-29 10:01:11
程序可分为: 编译类:源代码 → 编译 → 可执行文件 脚本类:解释器 bash,python,Perl,rubby 读取一行,解释一行,执行一行,速度没有编译类的程序快 bash语法 1. 判断式   test expression   [ expression ]   [[ expression ]] 注意:表达式与中括号之间要有空格 整数的判断 字符的判断 对象(文件,目录,链接等)的判断 权限的判断 1.1 整数的判断 -gt(大于),-lt(小于),-ge(>=),-le(<=),-eq(=),-ne(不等于),-a(与),-o(或) 来源: https://www.cnblogs.com/ybliu/p/11512129.html

shell脚本备份当前日期文件

。_饼干妹妹 提交于 2019-11-29 09:41:33
#!/bin/bash #一月前 historyTime=$(date "+%Y-%m-%d %H" -d '1 month ago') echo ${historyTime} historyTimeStamp=$(date -d "$historyTime" +%s) echo ${historyTimeStamp} #一周前 $(date "+%Y-%m-%d %H" -d '7 day ago') #本月一月一日 date_this_month=`date +%Y%m01` #一天前 date_today=`date -d '1 day ago' +%Y%m%d` #一小时前 $(date "+%Y-%m-%d %H" -d '-1 hours') 备份和删除前两个月的备份文件 #!/bin/sh source /etc/profile #获取当前日期 ymd=`date +%Y%m%d`; #获取上2个月 historyTime=$(date "+%Y%m" -d '2 month ago') #打印日期 echo ${historyTime} rm -rf ci_admin.jar.bak-$historyTime* cp ci_admin.jar ci_admin.jar.bak-$ymd 来源: https://www.cnblogs.com/SimonHu1993

shell脚本-监控CPU/内存/硬盘 使用率

倖福魔咒の 提交于 2019-11-29 09:34:43
#!/bin/sh free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }' df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}' top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}' 输出如下 Memory Usage: 3683/3830MB (96.16%) Disk Usage: 110/189GB (61%) CPU Load: 0.23 查看消耗内存最多的前40个进程: ps auxw|head -1;ps auxw|sort -rn -k4|head -40 来源: CSDN 作者: 打卤 链接: https://blog.csdn.net/liyyzz33/article/details/86063330

shell学习2shell变量

痴心易碎 提交于 2019-11-29 09:03:21
2.1定义变量 a.定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格, 这可能和你熟悉的所有编程语言都不一样。 b.变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 c.除了显式地直接赋值,还可以用语句给变量赋值,如: for file in `ls /etc` 或 for file in $(ls /etc) 以上语句将 /etc 下目录的文件名循环出来。 反引号:反引号中的内容当做命令运行,要用反引号'',或者用$()把命令括起来再赋值 2.2使用变量 a.使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界 ,比如下面这种情况: for skill in Ada Coffe Action Java; do echo "I am good at ${skill}Script" done 如果不给skill变量加花括号,写成echo

一、shell脚本的执行方式

天涯浪子 提交于 2019-11-29 08:14:49
1、echo输出命令         案例1:        案例2:按照十六进制输出16这个字符        案例3:改变输出的颜色      2、第一个脚本    3.执行脚本         来源: https://www.cnblogs.com/healy/p/11492744.html

shell习题-27

被刻印的时光 ゝ 提交于 2019-11-29 08:07:05
题目要求 要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件。在堡垒机批量发布,也要批量发布到crontab里面。 A类机器日志存放路径很统一,B类机器日志存放路径需要用 匹配(因为这个目录里除了日志外,还有其他文件,不能删除。匹配的时候可用 .log) A类:/opt/cloud/log/ 删除7天前的 B类: /opt/cloud/instances/ 删除15天前的 要求写在一个脚本里面。不用考虑堡垒机上的操作,只需要写出shell脚本。 参考答案 #!/bin/bash #这个脚本用来删除老日志 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-12 dir1=/opt/cloud/log/ dir2=/opt/cloud/instance/ if [ -d $dir1 ] then find $dir1 -type f -mtime +7 |xargs rm elif [ -d $dir2 ] then find $dir2 -name "*.log" -type f -mtime +15 |xargs rm fi 题目要求 贷款有两种还款的方式:等额本金法和等额本息法,简单说明一下等额本息法与等额本金法的主要区别: 等额本息法的特点是:每月的还款额相同,在月供中“本金与利息”的分配比例中,前半段时期所还的利息比例大

shell习题-26

荒凉一梦 提交于 2019-11-29 07:56:34
题目要求 写一个脚本,依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么,如: Hello, root,your UID is 0. 参考答案 #!/bin/bash #这个脚本用来问候用户 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-11 cat /etc/passwd |while read line do username=`echo $line|awk -F ':' '{print $1}'` uid=`echo $line|awk -F ':' '{print $3}'` echo "Hello, $username, your uid is $uid." done 题目要求 linux系统 /home目录下有一个文件test.xml,内容如下: <configuration> <artifactItems> <artifactItem> <groupId>zzz</groupId> <artifactId>aaa</artifactId> </artifactItem> <artifactItem> <groupId>xxx</groupId> <artifactId>yyy</artifactId> </artifactItem> <!-- </artifactItem><groupId>some groupId<

shell习题-24

安稳与你 提交于 2019-11-29 07:50:53
有两个文件a.txt和b.txt,需求是,把a.txt中有的但b.txt中没有的行找出来,并写入到c.txt,然后计算c.txt文件的行数。 参考答案 #grep -f a.txt b.txt #下边的方法练习逻辑能力 #!/bin/bash #这个脚本用来比较文件差异 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-07 cat a.txt|while read line do if ! grep -q "$line" b.txt then echo $line fi done >c.txt wc -l c.txt 题目要求 把当前用户下所有进程名字中含有"aming"的进程关闭。 参考答案 #ps -u 用户 #!/bin/bash #这个脚本用来杀进程 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-07 ps -u $USER|awk '$NF ~ /aming/ {print $1}' |xargs kill 题目要求 用shell实现,以并发进程的形式将mysql数据库所有的表备份到当前目录,并把所有的表压缩到一个压缩包文件里。 假设数据库名字为mydb,用户名为aming,密码为passwd。 参考答案 考虑自己服务器的负载能力 #!/bin/bash #这个脚本用来并发备份数据库 #作者:猿课-阿铭 www

shell变量快速入门

柔情痞子 提交于 2019-11-29 07:31:44
临时变量 开启新的sh,临时变量不存在 在shell脚本运行时,会先查找系统环境变量ENV 该变量指定了环境文件(加载顺序通常是/etc/profile ~/.bash_profile ~/.bashrc /etc/bashrc) 实现变量局部生效 编辑用户变量文件 立即生效命令 开启新的sh,变量存在 切换普通用户,变量不存在 实现/mnt下脚本直接执行 编辑用户变量文件 显示PATH环境变量 实现变量全局生效 编辑系统变量文件 立即生效命令 切换普通用户,变量存在 . 双引号:所见非所得,它会先把变量解析之后,再输出 加双引号即可显示* 以下符号不可解析 单引号:所见即所得 反斜杠( \ ) :转义字符/逃脱字符,Linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号 反引号(``) :命令替换,通常用于把命令输出结果传给入变量中 另一种方式 . $符的用法 编辑文件 $1$2$3是传递参数的顺序 ,$*$@是全部$#是参数个数$0是文件名 传递参数1 2 3 br/>![](https://s1.51cto.com/images/blog/201909/03/3de2a851e6f55f838583eb550a3a1f8e.png?x-oss-process=image/watermark,size_16,text

shell习题-21

霸气de小男生 提交于 2019-11-29 07:24:07
题目要求 写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项时,显示其指定ip所属的网卡。 例: sh getinterface.sh -i eth0 或者 sh getinterface.sh -I 192.168.0.1 3)当用户使用除[-i | -I]选项时,显示[-i interface | -I ip]此信息。 4)当用户指定信息不符合时,显示错误。(比如指定的eth0没有,而是eth1时) 有点小复杂,需要在多看看视频,现在还没有完全搞明白 参考答案 #!/bin/bash #将网卡名记录到文件ifs.txt中 ip add |awk -F ': ' '$1 ~ "^[1-9]" {print $2}' > /tmp/ifs.txt #一个函数 输入网卡名字获取ip get_ip() { ip add show dev $1 |grep inet |awk '{print $2}' |awk -F '/' '{print $1}' } #遍历网卡获取ip for eth in `cat /tmp/ifs.txt` do myip=`get_ip $eth` if [ -z "