Shell 脚本练习1:生成写入磁盘使用情况的日记文件

Shell 脚本练习1:

请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如生成的文件名为2020-04-20.log,并且把磁盘的使用情况写到到这个文件中。日记文件放在/usr/local/log/下。脚本判断创建此目录,如果没有这个目录就创建目录,如果有就继续执行。

本题练习知识点有:
一、判断语句配合验证命令是否成功的使用。
二、 日期命令配合参数的使用。
三、磁盘命令的使用。
四、 重定向的符号使用。

[root@zl_cloud sbin]# vi test1.sh 
# /bin/bash
# shell test1
# writen by ZLING 2020-04-08

DIR=/usr/local/log/
cd /root/
if [ -e $DIR ]
then
    break
else
    mkdir -p $DIR
fi

time=`date +"%Y-%m-%d"`
touch /usr/local/log/$time.log
df -h > /usr/local/log/$time.log
~
~
~
"test1.sh" 19L, 345C written
[root@zl_cloud sbin]#

答案解析:
一步步来,先做到每一步的代码都能实现。

  1. 先判断目录是否存在
    方法 ①:判断语句配合判断目录是否存在的选项的使用:
[root@zl_cloud sbin]# cat test1.sh
# /bin/bash
# shell test1
# writen by ZLING 2020-04-08

DIR=/usr/local/log/
cd /root/
if [ -e $DIR ]
then
    break
else
    mkdir -p $DIR
fi
[root@zl_cloud sbin]#

方法②:判断语句配合验证命令是否成功的使用:

[root@zl_cloud sbin]# vi test1.sh 
# /bin/bash
# shell test1
# writen by ZLING 2020-04-08

DIR=/usr/local/log/
cd /root/
cd /usr/local/log/
if [ `echo $?` == 0 ]
then
    break
else
    mkdir -p $DIR
    echo "将创建该目录:$DIR"
    echo "创建完成,继续执行下面脚本"
fi
 [root@zl_cloud sbin]#

一开始前面这个方法①,出现以下错误(总得来说还是变量那块不是很明白,最后我会做一个小结):

 [root@zl_cloud sbin]# cat test1.sh
# /bin/bash
# shell test1
# writen by ZLING 2020-04-08

$DIR="/usr/local/log/"
cd /root/
if [ !-e $DIR ]
then
    mkdir -p $DIR
fi
[root@zl_cloud sbin]# sh test1.sh 
test1.sh:行5: =/usr/local/log/: 不是目录
mkdir: 缺少操作数
Try 'mkdir --help' for more information.
[root@zl_cloud sbin]# 

然后我把$DIR="/usr/local/log/"改成了DIR=/usr/local/log/

[root@zl_cloud sbin]# sh test1.sh 
test1.sh: 第 7 行:[: !-e: 期待一元表达式
[root@zl_cloud sbin]# 

去查了一下别人说当 if 语句中使用 [ ] 条件修饰符时, $DIR 变量必须加上引号。但是我加了没有用,我就试了一下加一个else:

[root@zl_cloud sbin]# cat test1.sh
# /bin/bash
# shell test1
# writen by ZLING 2020-04-08

DIR=/usr/local/log/
cd /root/
if [ -e $DIR ]
then
    break
else
    mkdir -p $DIR
fi
[root@zl_cloud sbin]#

然后就可以了。

2.日期

[root@zl_cloud ~]# date +"%Y-%m-%d"
2020-04-08
[root@zl_cloud ~]# 

3.查看磁盘使用情况

[root@zl_cloud ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   18G  1.9G   16G   11% /
devtmpfs                 903M     0  903M    0% /dev
tmpfs                    913M     0  913M    0% /dev/shm
tmpfs                    913M  8.7M  904M    1% /run
tmpfs                    913M     0  913M    0% /sys/fs/cgroup
/dev/sdb5                969M  2.5M  900M    1% /newdir
/dev/sda1                497M  126M  372M   26% /boot
tmpfs                    183M     0  183M    0% /run/user/0
[root@zl_cloud ~]# 

4.生成文件并把内容写入日记文件
touch $time
df -h > $time.log

变量小结:

①反引号:

d=`date +%Y-%m-%d`

反引号是将引号的字符串当shell命令执行。
②双引号:

echo "输出内容"

我觉得一般是在输出使用而已。
$符号:

DIR=/usr/local/log/
$DIR

这里的$相当于代指前面DIR=…这个里面的值。

sum=$[$x+$y]

这个作用相当于一个数学计算。第一种$x$y就是前面所说的代指,最后中括号外面的$表示对两个值进行计算。

猜你喜欢

转载自blog.csdn.net/zhang_ZERO/article/details/105384854