shell脚本实际案例

文章目录

        • 1.shell脚本实例 for循环
        • 2.数字技术
            • 以加法为例,其他的作为参考
        • 3.shell是不支持小数运输的 ,要结合bc或者awk
        • 脚本实例
      • 在编写shell 脚本的时候,还有判定的选择
        • 4.写一个==ping IP==的脚本
        • 5.写一个倒时脚本,用来统计时间
      • 6.创建多组用户,并创建密码
        • 把这些创建的用户给删了
      • 应对生产环境,还是写了一个小脚本
    • 编写一个脚本用于关闭 开启 检验服务
      • 系统监控脚本
      • 7.写一个显示系统前三条的脚本
      • 8.如何调用脚本
      • 9.监控内存的告警脚本, 对应MySQL web 磁盘 都是用同一种方法进行进行监控

意外空格,变成意外结果

[root@localhost shell]# echo hello >test file
[root@localhost shell]# ls
test
[root@localhost shell]# cat test 
hello file
这个纯粹就是一个意外

基础学习可以参考博客
https://blog.csdn.net/huayangshiboqi/article/details/79947564

1.shell脚本实例 for循环

乘法口诀

for i in $(seq 9); do  for j in $(seq $i); do echo -n "$i*$j=$(($i*$j))  "; done;echo ""; done

11=1
2
1=2 22=4
3
1=3 32=6 33=9
41=4 42=8 43=12 44=16
51=5 52=10 53=15 54=20 55=25
6
1=6 62=12 63=18 64=24 65=30 66=36
7
1=7 72=14 73=21 74=28 75=35 76=42 77=49
81=8 82=16 83=24 84=32 85=40 86=48 87=56 88=64
91=9 92=18 93=27 94=36 95=45 96=54 97=63 98=72 9*9=81
解释:
1、[root@localhost shell]# echo $(seq 9) //1到9的意思
1 2 3 4 5 6 7 8 9
for循环:for arg in Range;do CMD;done
2、序列数据(seq 开始 步长 最后) —步长默认1
但是也可以修改默认值
[root@localhost shell]# echo $(seq 1 2 10)
1 3 5 7 9

2.数字技术

shell中涉及的算术计算与其他语言一样(或其他语言与shell一样,顺序请强迫症患者忽略),有加(+)、减(-)、乘(*)、除(/)、取模(\)、取余(%)、求幂(**)。

以加法为例,其他的作为参考

[root@localhost shell]# echo $[2+3]
5
[root@localhost shell]# echo $((2+3))
5
[root@localhost shell]# let i=3+2
[root@localhost shell]# echo $i
5
//以上这三种的计算方式,结果都是一样的

3.shell是不支持小数运输的 ,要结合bc或者awk

[root@localhost shell]# echo 0.310-1 |bc
2.0
[root@localhost shell]# awk 'BEGIN{print 0.3
6-0.3}’
1.5

特情分享

  1. 今天写脚本做了一个系统时间的定义是时候,一不 小心敲错了,就把结果

[root@localhost shell]# date “+%y%m%d”
181224
[root@localhost shell]# date “+%Y%m%d”
20181224

脚本实例

http://blog.51cto.com/13520779/2093146
https://blog.csdn.net/zxllynu/article/details/85227007

这个博文写的案例还是挺实用的
https://blog.csdn.net/hxpjava1/article/details/79745221
这是一篇关于语法结构的解释比较好的文章,适合初学者
https://blog.csdn.net/qq3401247010/article/details/78005372
这个是定时任务脚本
http://www.51testing.com/html/71/n-3723971.html

这个视频课程好像值得拥有18个案例
http://edu.51cto.com/course/15585.html
以下这个博客是判断文件 ,目录 ,权限 变量是否为空
https://www.jb51.net/article/113695.htm

在编写shell 脚本的时候,还有判定的选择

[ -f " f i l e " ] 判 断 file" ] 判断 file"]file是否是一个文件
[ a − l t 3 ] 判 断 a -lt 3 ] 判断 alt3]a的值是否小于3,同样-gt和-le分别表示大于或小于等于
[ -x " f i l e " ] 判 断 file" ] 判断 file"]file是否存在且有可执行权限,同样-r测试文件可读性
[ -n " a " ] 判 断 变 量 a" ] 判断变量 a"]a是否有值,测试空串用-z
[ “ a " = " a" = " a"="b” ] 判断 a 和 a和 ab的取值是否相等
[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立

脚本中的判断语句可以 参考以下博文(这博文有判断,语句分析语句,函数 运算)这个shell脚本的编写规范都可以使用这个博文
https://www.cnblogs.com/yangyanfei/p/6386831.html

4.写一个ping IP的脚本

#!/bin/bash

### 输入IP 地址
read -p "please input ip:" IP

### ping IP 的命令 并判断是否该IP 是否开启
ping -c3  -w 10s $IP &> /dev/null && echo $IP is up || echo $IP is down

ping -c 3 -w 10s 127.0.0.1 和 ping 127.0.0.1 -c 3 -w 10s 是一样的逻辑结构

5.写一个倒时脚本,用来统计时间

#!/bin/bash

### This script is time count down
### 2017-04-27
### by gan_ke

MIN=10
for ((s=10;s>=0;s--))
do

    echo -n "10:${s}"
    echo -ne "\r"
    sleep 1

    if
    [ "$s" -eq "0" ]
    then

        for ((s=59;s>0;s--))
        do
            echo -n "0:${s}"
            echo -ne "\r"
            sleep 1
        done
    fi

done

计时器主要用到了for循环来实现,每一秒可以用sleep 1 来实现。然后就是逻辑的构造,首先让秒先循环,直到秒为0,分钟为1的时候,进入子循环,分钟被赋值为0,秒被赋值为59。其次就是刷新的问题,如果不做任何处理,每一秒都会打印出一个时间,这里我们用到了echo -n “1:${s}” echo -ne “\r”来实现刷新。

6.创建多组用户,并创建密码

#!/bin/bash
for i in `seq 1 3`
do
useradd -G tang king$i;
echo king$i | passwd king$i --stdin;
done

这是一个很简单的脚本,但是又经常被用到,所以这个脚本是最基本的shell脚本基本功

把这些创建的用户给删了

sed -i ‘/king/d’ /etc/group
sed -i ‘/king/d’ /etc/passwd
for i in {1…3}; do rm -rf king$i; done

要写一个复制有用数据的意思

ll |grep 20190107| awk ‘{print $6}’

find /tang/ -name “CSVCGET_0001*” -a -name “*20190107_001” -exec cp {} /opt ;

 find . -type f  -mtime -1 | wc -l
40
find . -type f -mtime -1  -exec cp {} /opt \;

其实都不用,就一个命令就足够了 这个是在虚拟机上操作的命令,压根就不用

应对生产环境,还是写了一个小脚本


#!/bin/bash
## 判断拷贝目录是否存在
if [ ! -d "/king" ];then
mkdir /king
fi

## 进入数据目录
cd /tang

## find查询一天内修改过的文件 ,并拷贝一个新的目录下
find . -type f -mtime -1  -exec cp {} /king \;

## 对新拷贝的文件进行压缩

zip -r /tang.zip /king

编写一个脚本用于关闭 开启 检验服务

http://www.mamicode.com/info-detail-1615943.html

shell脚本中关于 自动输入密码
https://blog.csdn.net/zhangjikuan/article/details/51105166

shell脚本的案例
https://blog.csdn.net/qq_36441027/article/details/80214259

http://blog.51cto.com/hujiangtao/1933288

系统监控脚本

https://www.cnblogs.com/createyuan/p/3959616.html

这个博文里记录了,很多都是生产环境下,对系统性能的脚本
https://www.cnblogs.com/zwgblog/p/5792470.html

logrotate 这个命令是centos 自带的命令

rpm -ql logrotate 查看命令的软件包信息
[root@localhost ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf 主配置文件
/etc/logrotate.d 主配置目录
/etc/rwtab.d/logrotate
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.8.6
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate
/var/lib/logrotate/logrotate.status
 logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

关于日志的分割可以参考
https://www.cnblogs.com/clsn/p/8428257.html

7.写一个显示系统前三条的脚本

#!/bin/bash
for (( i=1;i<4;i++)) ; do   date  -d  '-'"$i"'days'   +'%Y%m%d'; done 

写这个脚本的注意事项:
1.i 的()这个要注意,是定义一个符号
2、; 这个符号也是要注意事项
3、 -$i和days 之间不可以有空格,
4、 days 要有s
5、 Y m d 这几个字母要注意大少写

换一种写法吧!!!!

for i in {1..3}; do  date  -d " -$i days"  +"%Y-%m-%d"; done

现实生产环境的脚本

cd ~/log/error/archive
for ((i=6;i<28;i++))
do
d=$(date -d '-'"$i"' days' +'%Y-%m-%d')
echo "${d}: "`zcat error${d}_10.101.40.4?.tar.gz | grep -a "$1"|wc -l` >> ssoerr.log
done

8.如何调用脚本

https://blog.csdn.net/weixin_44224288/article/details/88248378

9.监控内存的告警脚本, 对应MySQL web 磁盘 都是用同一种方法进行进行监控

  • 内存监控:
#!/bin/sh
a=`free -m | awk '/Mem/{print $4}'`
if [ $a > 200 ];
then
   echo "当前内存为$a,内存不足,请及时处理"
fi
  • 磁盘监控。为了画面更加好看,可以使用,颜色标签
#!/bin/sh
a=`df -h | sed -n '2p' | awk '{print $4}'`
ip=`ifconfig  ens33 |sed -n '2p' |awk '{print $2}'`
if [ a > 10g ];
then
 echo -e  "\033[31m 主机$ip \033[0m ,\033[34m当前的可用磁盘大少为$a \033[0m, \033[35m磁盘已经占满请求处理\033[0m"
fi
  • 关于shell 脚本的颜色标签
    可以参考一下博文
    https://www.cnblogs.com/xiao1/p/5906375.html

你可能感兴趣的:(脚本)