# 编写一段 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 |