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]#
答案解析:
一步步来,先做到每一步的代码都能实现。
- 先判断目录是否存在
方法 ①:判断语句配合判断目录是否存在的选项的使用:
[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
就是前面所说的代指,最后中括号外面的$
表示对两个值进行计算。