# 编写一段 shell,保存为 program.sh

完成以下输出,可循环执行:

5(回车)

5 4 3 2 1

4 3 2 1

3 2 1

2 1

1

分析:用双重循环即可,熟悉语法就可以了

#!/bin/bash
echo -n "input a number:"
read num
num2=$num
while [ $num2 -gt 0 ]
do
num=$num2
while [ $num -gt 0 ]
do
echo -n "$num "
num=`expr $num - 1`
done
num2=`expr $num2 - 1`
done

# 管理员 root 每天需要完成以下工作:

# 题目

每天早上 8 点 30 分启动服务器的 ftp 服务,在每天晚上 23 点 30 分就关闭 ftp 服务如果启动成功把 ftp 的进程信息写⼊ /var/ftp/ 年 - ⽉ - ⽇.log ⽂件中,如果启动失败,需要给 root 发⼀封邮件。邮件内容为: start ftp error。

在早上 8 点 30 分到晚上 23 点 30 分之间,每隔 1 ⼩时 ping ⼀下百度域名 (每次 ping 发 4 次),保证⽹络畅通,并把 ping 的结果追加到 /var/ftp/ 年 - ⽉ - ⽇.log ⽂件中。

每天晚上 11 点 50 分 30 秒备份 ftp ⽬录 (/var/ftp) ⽣成名为 年 - ⽉ - ⽇.tar.gz 的压缩包,并把压缩包的权限修改为只有 root 有读权限,其他都没有权限。把压缩包移动到 root 主⽬录下。然后清空 /var/ftp 下的所有内容。假设 /var/ftp ⽬录已存在

# 分析

题目所用到的知识点分为两块,一为 shell 编程,二为定时器 crontab。

按照题意,我们可以把要编写的脚本分为四个

启动 ftp 服务脚本、关闭 ftp 服务脚本、ping 百度脚本、备份脚本

# 启动 ftp 服务脚本

#!/bin/bash
systemctl start vsftpd
if [ $? != 0 ]
then
mail -s "start ftp error" root
else
processInfo=`ps -ef | grep vsftpd | head -1`
year=`date -I | cut -d - -f1`
month=`date -I | cut -d - -f2`
day=`date -I | cut -d - -f3`
echo "$processInfo" >> /var/ftp/$year-$month-$day.log
fi

# 关闭 ftp 服务脚本

#!/bin/bash
systemctl stop vsftpd
if [ $? != 0 ]
then
mail -s "close ftp error" root

# ping 百度脚本

#!/bin/bash
year=`date -I | cut -d - -f1`
month=`date -I | cut -d - -f2`
day=`date -I | cut -d - -f3`
echo `ping -c4 www.baidu.com` >> /var/ftp/$year-$month-$day.log

# 备份脚本

#!/bin/bash
year=`date -I | cut -d - -f1`
month=`date -I | cut -d - -f2`
day=`date -I | cut -d - -f3`
tar -zcvf $year-$month-$day.tar.gz /var/ftp
chmod 400 $year-$month-$day.tar.gz
rm -r /var/ftp/*

# 定时器配置

cron 启动后搜索 /var/spool/cron 目录,寻找以 /etc/passwd 文件中的用户名命名的 crontab 文件,被找到的这种文件将载入内存。比如 root 用户下的定时器文件则为 /var/spool/cron/root

通常在某用户下想创建定时器,输入 crontab -e 即可。

30 8 * * * ~/startFtp.sh
30 23 * * * ~/closeFtp.sh
30 8-23 * * * ~/pingBaidu.sh
50 23 * * * ~/backup.sh
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

orange 微信支付

微信支付

orange 支付宝

支付宝

orange 贝宝

贝宝