每日一道shell脚本练习(01)

0. 引言

准备开一个新坑,每天更新一道shell练习。因为shell脚本属于那种不练习就会生疏,甚至忘记的技能,所以,为了对抗遗忘阻力,我只能不断加强练习了。

1. 第一天练习题目

【题目】
请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2018-04-08.log,并且把磁盘的使用情况写到这个文件中,不用考虑cron,仅仅写脚本即可。

【分析】
第一点,要明白 linux 命令 date 的用法,打印“xxxx-xx-xx”这样的时间格式用date +%F 或者 date +%Y-%m-%d;
第二点,检查磁盘使用情况的命令是:df -h 。

2. 具体脚本

有了上面两点分析,写脚本就很容易了。

#!/bin/bash

name=`date  %F`

logfile=$name.log

df   -h  > $logfile

【脚本分析】
将当天的日期赋值给变量name,然后定义日志文件名logfile。
“>”这个符号在shell 脚本中有输出重定向的功能。它比较特殊,可以将符号左边的输出内容,写入到该符号的右边的文件中。

3. 扩展知识

  1. shell 中反引号可以表示一个命令的结果,通常给变量赋值,例如下面的命令:

        # n=`wc   -l   /etc/passwd | awk  ‘{print  $1}‘`
    # echo   $n
    
        29
  2. date 还有诸多用法,例如:
    date  +%H      #  小时
    21
    date  +%M     #  分钟
    48
    date  +%S     # 秒钟
    48
    date    +%T   # 时间
    21:49:04
    date   %w    # 星期
    0                 # 从0开始,表示星期日
    date  -d  "-1 day"  +%F   # 表示1天之前,-d 用来进行算术运算
    2018-04-07
    date  -d   "-1 hour"   ‘+%T‘   # 表示 1 小时以前
    20:50:01
  3. ">" 为正确重定向,我们运行一条命令时,有正确的信息输出,也有可能会有错误的信息输出。与 > 相对应的,就有一个 2> 这样的错误重定向符号,它就是负责将命令的错误返回信息输出到指定的文件。例如:
[[email protected] work]# ls /etc/nofile
ls: cannot access /etc/nofile: No such file or directory
上面的这条就是错误的提示信息。

ls   /etc/passwd   /etc/nofile  > /tmp/log   2> /tmp/errorlog

[[email protected] work]# cat /tmp/log
/etc/passwd
[[email protected] work]# cat /tmp/errorlog
ls: cannot access /etc/nofile: No such file or directory

4. 总结

今天的脚本,复习了反引号的用法,date命令和df 这个查看磁盘使用情况的命令。还对这几个命令进行了扩展学习。

原文地址:http://blog.51cto.com/hellocjq/2095837

时间: 2024-08-01 01:51:21

每日一道shell脚本练习(01)的相关文章

每日一道shell练习(06)——检测端口服务

1. 题目 写一个脚本,判断本机的80端口(假设服务为httpd)是否开启着,如果开启着就什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己.脚本写好后,每分钟执行一次,也可以写一个死循环的脚本,30S检查一次. 2. 习题分析 首先,我们要区分要求,这里的要求是检测80端口是否在监听,而不是检测httpd服务是否运行,虽然两者有一定的联系,但并不是对等的关系.检测端口状态用 netstat -lntp 命令.如果要求检测远程主机的端口状态,则用一下的命令: nmap

gzexe 助shell脚本加密 01

gzexe 助shell脚本加密 01 一.  简介 很多时候我们的脚本会涉及到一些私密的信息,例如:用户名,密码,或者其它重要信息的时候,我们使用一些加密的手段来屏蔽这些信息,确保系统的安全已经脚本的可流传性,通常情况下我们只需要通过系统自带的gzexe这个工具就够了. 二.         实验测试开始: 2.1 编写一个用于测试的脚本 [[email protected] ~]# vi woo.sh #! /bin/ksh echo 'PrudentWoo'' '`date +%Y-%m-

每日一道shell练习(04)

1. 习题 设计一个脚本,监控远程的一台主机(假设 ip地址是110.110.110.114)的存活状态,当发现宕机时发一封邮件给你自己. 提示: 你可以使用 ping 命令 : ping -c 10 110.110.110.114 脚本可以搞成死循环. 2. 习题分析 其实这中需求并不困难,题目也给出了思路.关键是确定一个阈值,当检测到结果符合阈值,就触发警告,发送警告邮件. 我们可以先在主机上尝试执行一下 ping -c 命令: [[email protected] work]# ping

每日一道shell练习(10)——统计字符数

1. 习题 将下面这句话中字符数在6以内的单词打印出来: Bash also interprets a number of multi-character options . 2. 习题分析 思路:用for循环将每个单词取出,才能单独统计.for循环的分隔符有空格.tab键和回车键,刚好这句话的分隔符是空格键. 3. 脚本 #!/bin/bash line='Bash also interprets a number of multi-character options .' sum=0 for

每日一道shell练习(03)

1 . 习题 写一个脚本计算linux系统所有进程占用内存大小的和 2. 习题分析 2.1.第一个问题,在哪里收集进程的数据 用top或者ps都可以获取每个进程的内存使用大小.获得大小之后,就可以通过一个循环计算它们的和了. 2.2. ps 命令的问题 通过累加 "ps aux" 命令显示的 RSS 列来统计全部进程总共占用的物理内存大小,这是不对的.因为,RSS(resident set size)表示常驻内存的大小,但是由于不同的进程之间会共享内存,所以把所有进程RSS进行累加的方

每日一道shell 练习(05)——批量打包文件

1. 习题 找到 /123 目录下所有后缀名为 .txt 的文件 批量修改.txt 为 .txt.bak 把所有.bak 文件打包压缩为 123.tar.gz 批量还原文件的名字,即把增加的.bak 再删除 2. 习题分析 首先要想办法找出 .txt 结尾的文件,用 find 命令. 打包命令用 tar czvf 就可以搞定了,关键是如何同时将所有 .bak 文件打包. 还原文件名有点复杂,关键是如何找到原来的文件名. 3. 具体脚本 在脚本总已经加进了我的分析,可以看看 [[email pro

每日一道shell练习(09)——sed处理

1. 习题 对一个文件,1至5行删除带有英文的行,6至10行删除里面的英文字符: 2. 分析 这种要求,用sed命令就可以解决了,主要用到匹配替换的知识. 3. 脚本 #!/bin/bash sed -n '1,5p' a.txt | sed '/[a-zA-Z]/d' sed -n '6,10p' a.txt | sed 's/[a-zA-Z]//g' sed -n '11,$p' a.txt 前两个要求,必须使用行号匹配.主要sed是一个流编辑处理器,它是一行一行地接收输入数据,然后再处理.

[mysql]每日备份shell脚本

每天固定时间用mysqldump 备份mysql数据. #!/bin/bash #每天早上4点, mysql备份数据 orangleliu #chmod 700 backup.sh #crontab -e #0 4 * * * /home/erya/run/moniter/mysql_backup.sh user="radius" password="" host="localhost" db_name="radius" #b

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器 作者:赵全文 网名:guestart 我们有一套生产环境的Oracle数据库,虽然每天都有RMAN备份,但是也招架不住开发人员隔三差五就说要恢复几张表的前几天的数据到生产环境当中,针对这样的需求,用RMAN来恢复某几张表的数据就显的特别费劲了.于是我决定用Oracle数据库的逻辑备份工具EXPDP(数据泵导出)专门导出特定用户下的所有表的数据,并在每天凌晨4点通过LINUX操作系统的CRONTAB的计划任务定时执