shell脚本

Shell中的数值运算

三世轮回 提交于 2019-12-05 19:13:50
Shell中的数值运算 案例 1 : Shell 中的数值运算 案例 2 :条件测试操作 案例 3 :使用 if 选择结构 1 案例 1 : Shell 中的数值运算 1.1 问题 本案例要求熟悉 Linux Shell 环境的特点,主要练习以下操作: 使用 expr 、 $[] 、 let 等整数运算工具:定义变量 X=1234 ,然后计算 X 与 78 的四则运算及求模结果 使用 bc 实现小数运算操作:以交互方式计算 12.34 与 56.78 的四则运算结果,另外再以非交互方式重复上述计算,最多显示 4 位小数 1.2 步骤 实现此案例需要按照如下步骤进行。 步骤一:整数运算工具 1 )使用 expr 命令 乘法操作应采用 \* 转义,避免被作为 Shell 通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加 $ 符号。 首先定义变量 X=1234 ,然后分别计算与 78 的加减乘除和求模运算结果: [root@svr5~]#X=1234// 定义变量 X [root@svr5~]#expr $X+78// 加法 1312 [root@svr5~]#expr $X-78// 减法 1156 [root@svr5~]#expr $X\*78// 乘法,操作符应添加 \ 转义 96252 [root@svr5~]#expr $X/78// 除法

shell脚本基础(六)

旧城冷巷雨未停 提交于 2019-12-05 19:10:02
一、告警系统邮件引擎 [root@zlinux-01 mon]# ls bin conf log mail shares [root@zlinux-01 mon]# cd mail [root@zlinux-01 mail]# vim mail.py //创建发送邮件脚本 #!/usr/bin/env python #-*- coding: UTF-8 -*- import os,sys reload(sys) sys.setdefaultencoding('utf8') import getopt import smtplib from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from subprocess import * def sendqqmail(username,password,mailfrom,mailto,subject,content): gserver = 'smtp.qq.com' gport = 25 try: msg = MIMEText(unicode(content).encode('utf-8')) msg['from'] = mailfrom msg['to'] = mailto msg['Reply-To'] = mailfrom

shell脚本基础(七)

a 夏天 提交于 2019-12-05 19:08:45
一、分发系统介绍 当业务越做越大,服务器需求越来越多,几台服务器的话还好一点;当十几、几十台的时候,工作量就非常大!并且不规范,需要一个模板机分发到各个机器上去。 可以用开源的软件,expect脚本语言,进行实现分发系统的功能。 二、expect脚本远程登录 [root@zlinux-01 ~]# yum install -y expect //安装 [root@zlinux-01 sbin]# vim 01.expect //自动远程登录,并执行命令 #!/usr/bin/expect set host "192.168.242.129" #远程机器IP set passwd "rootroot" spawn ssh root@$host expect { "yes/no" {send "yes\r"; exp_continue} "assword:" {send "$passwd\r"} } interact #表示停留在机器上 #如果需要退出 可以expect eof [root@zlinux-01 sbin]# chmod a+x 01.expect //授予执行权限 您在 /var/spool/mail/root 中有新邮件 [root@zlinux-01 sbin]# ./01.expect //执行 spawn ssh root@192.168.242.129 The

shell脚本基础(八)

孤街浪徒 提交于 2019-12-05 19:08:38
一、expect脚本同步文件 [root@zlinux-01 ~]# cd /usr/local/sbin/ [root@zlinux-01 sbin]# ls 01.expect 02.expect 03.expect check_ng.sh lvs_dr.sh lvs_nat.sh mon nginx_log_rotate.sh [root@zlinux-01 sbin]# vim 04.expect //自动同步脚本 #!/usr/bin/expect set passwd "rootroot" spawn rsync -av root@192.168.242.129:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r"} } expect eof [root@zlinux-01 sbin]# ./04.expect spawn rsync -av root@192.168.242.129:/tmp/12.txt /tmp/ root@192.168.242.129's password: receiving incremental file list 12.txt sent 30 bytes received 84 bytes 228.00 bytes/sec

利用脚本自动下载ftp列表中的文件

瘦欲@ 提交于 2019-12-05 18:15:03
我们可能会遇到这种场景,在某个机构订阅了一个邮件列表,然后这个机构会定期的发送带有ftp目录的url地址到你的邮件,现在你想在你的服务器上能够方便的下载这个列表上的文件,而不是手动的一个个去下,那么我们可以用脚本来完成这个功能,我将这个过程分为两部分,第一步获取到ftp页面的所有文件名称,第二步是通过获得的文件名来下载文件 下面以一个卫星数据的下载为例: ftp://oceans.gsfc.nasa.gov/subscriptions/1227这个是邮件中收到的url地址,在浏览器中可以查看到文件名,由于这个数据是0,这个是这样设计的, 第一步:我们只需要获取他的文件名,用下面这个脚本 #! /bin/sh echo "请输入你的FTP目录编号" read -e id wget -r ftp://oceans.gsfc.nasa.gov/subscriptions/$id ls /usr/src/oceans.gsfc.nasa.gov/subscriptions/$id/ > /usr/src/filename.txt 这样文件名就被下载到了/usr/src/filename.txt中了 第二步:提取文件名下载数据 #! /bin/sh a=$(cat /usr/src/filename.txt |wc -l) echo "请输入你要下载的文件的存放路径" read -e dir

Ansible Playbook安装Docker-CE

爷,独闯天下 提交于 2019-12-05 17:33:55
如果想给服务器安装docker,往往觉得 yum install docker 一条命令就可以了,然而并非如此,CentOS7的官方仓库并没有docker,所以需要先增加一个可以安装docker的仓库,如果要增加仓库,最好是使用 yum-config-manager ,所以思路就很清晰了: 卸载本机docker 增加docker仓库 安装docker 配置docker 所以我们需要按照以下命令执行: # 卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Repo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo # 更新并安装 yum makecache yum install -y docker

shell编写一个判断脚本

隐身守侯 提交于 2019-12-05 17:25:25
shell编写一个判断脚本 4.1 问题 本例要求在虚拟机 server0 上创建 /root/foo.sh 脚本,任务目标如下: 当运行 /root/foo.sh redhat ,输出为 fedora 当运行 /root/foo.sh fedora ,输出为 redhat 当没有任何参数或者参数不是 redhat 或者 fedora 时,其错误输出产生以下信息: /root/foo.sh redhat|fedora 4.2 方案 Shell 脚本中执行条件测试的方式: 任何一条命令行 test 测试表达式 [ 测试表达式 ] 常用的 test 测试选项: 文件状态检测 -f 、 -d 、 -e 、 -r 、 -w 、 -x 整数值比较 -gt 、 -ge 、 -eq 、 -ne 、 -lt 、 -le 字符串比较 == 、 != 取反操作 ! 多分支 if 选择结构: if 条件测试操作 1;then 命令序列 1.... elif 条件测试操作 2;then 命令序列 2.... else 命令序列 3.... fi 4.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:编写 foo.sh 判断脚本 1 )编写脚本代码 [root@server0~]#vim /root/foo.sh #!/bin/bash if [$#-eq 0];then echo "/root/foo

Linux Shell

只愿长相守 提交于 2019-12-05 17:25:11
特殊字符用来处理参数 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 关系运算符 -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。 -ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

Shell学习(三)Shell参数传递

早过忘川 提交于 2019-12-05 17:07:45
一、 传参实例 ##脚本文件内容 #执行的文件名 echo $0; #第一个参数 echo $1; #第二个参数 echo $2; #第三个参数 echo $3; ##调用语句 ./testShell.sh 1 9 5 输出结果: 二、 处理参数 #普通输出 echo "Shell 传递参数实例!"; #获取某个参数的值: $n echo "第一个参数为:$1"; #获取参数数量: $# echo "参数个数为:$#"; #把传参作为一个字符串显示 echo "传递的参数作为一个字符串显示:$*"; #把传参作为一个字符串显示(但是内部是多个参数分隔的,用循环就可以看出不同) echo "把传参作为一个字符串显示(但是内部是多个参数分隔的,用循环就可以看出不同):$@"; echo "-- \$* 演示 ---" for i in "$*"; do echo $i done echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done 输出结果: 来源: https://www.cnblogs.com/riches/p/11934562.html

shell脚本自动删除老文件

99封情书 提交于 2019-12-05 17:04:23
根据磁盘使用率,删除日期较老的文件 #!/bin/bash #设置磁盘使用比例 max_size=18 #设置文件存储目录 tmp_data=/root/ #文件日志前缀 pre_file=test #数组长度 arr_len=0 #获取磁盘使用比率 a=0 int=0 #删除文件名 tmp_del='' #删除文件名绝对路径 full_del='' #删除日志存储 del_log=del_log.txt #检测磁盘使用情况 function is_del(){ a=`df -h / | tail -n 1 | awk '{print $5}'` int=`echo $a | cut -d '%' -f 1` if [ ${int} -gt ${max_size} ];then echo ">>"; return 0; elif [ ${int} -lt ${max_size} ];then echo "<<"; return 1; fi } #删除日志文件,并写入到删除日志 function del_name(){ for i in `ls | grep ${pre_file} `; do arr[${arr_len}]=`echo $i|sed "s/${pre_file}//"`; # echo `echo $i|sed "s/${pre_file}//"`; arr_len