- 编写⼀段bash shell程序,保存为 program.sh
完成以下输出,可循环执⾏:
please,input a number:
5(回⻋)
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1
#!/bin/bash
echo "please,input a number:"
read x
while [ $x -gt 0 ]
do
i=$x
while [ $i -gt 0 ]
do
echo -n "$i "
i=`expr $i - 1` //使用expr时要注意加`,且运算符两边有空格
done
echo -e
let x=$x-1
done
- run.log是⼀个具有固定格式的⽇志⽂件。每⼀⾏的格式为: ip[]time[]runner[]command[]result ,其
中 []表示空格,ip格式为点分⼗进制表示法。编写⼀个名为log.sh的shell脚本统计每个ip出现的次数。
例⼦:
10.10.10.1[]32
10.10.10.2[]2
10.10.10.3[]5
//run.log
10.10.10.1 32
10.10.10.2 2
10.10.10.3 5
10.10.10.10 100
10.10.10.1 5
10.10.10.3 5
10.10.10.1 2
//log.sh
#!/bin/bash
awk '{a[$1]++}END{for(i in a){print i,a[i] | "sort -r -k 2"}}' run.log
//结果
[root@localhost ~]# /bin/bash log.sh
10.10.10.1 3
10.10.10.3 2
10.10.10.2 1
10.10.10.10 1
- 编写⼀个名为ftp.sh的shell程序,完成vsftpd的⾃动安装、配置和启动。
要求:1.采⽤stand-alone模式启动 2.禁⽌匿名启动 3.修改服务端⼝为22022
#!/bin/bash
a=`df -Th |grep "/dev/sr0" |awk '{print $2}'`
if [ $a = iso9660 ];then
echo "You do not need to perform the operation again!"
else
echo "loading..."
mount /dev/cdrom /mnt &>/dev/null
echo "Under success!"
fi
rpm -ivh /mnt/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm &> /dev/null
if [ $? = 0 ]
then
echo "Download successfully!"
else
echo "You do not need to repeat the download!"
fi
BB=/etc/vsftpd/vsftpd.conf
echo "anonymous_enable=NO" >> $BB
echo "listen_port=22022" >> $BB //修改服务端口
echo "Configuration is complete!"
b=`systemctl status vsftpd |grep "Active:" |awk '{print $2}'` &>/dev/null
if [ $b = active ];then
echo "You do not need to perform the operation again!"
else
systemctl start vsftpd
echo "Open start vsftpd success!"
fi
systemctl enable vsftpd
if [ $? = 0 ];then
echo "Open enable vsftpd success!"
else
echo "Open enable vsftpd failure!"
fi
- 管理员root每天需要完成以下⼯作:
2.1 每天早上8点30分启动服务器的ftp服务,在每天晚上23点30分就关闭ftp服务。如果启动成功把ftp的进程信息写⼊/var/ftp/年-⽉-⽇.log ⽂件中,如果启动失败,需要给root发⼀封邮件。邮件内容为: start ftp error。
/root/con1.sh
#!/bin/bash
service vsftpd status
if [ $? -eq 0 ];then #running
service vsftpd stop #try to stop
if [ $? -ne 0 ];then #if stop fail
pid=`ps -ef | grep vsftpd | grep -v "grep vsftpd" | awk -F ' ' '{print $2}'`
kill -9 $pid
fi
fi
service vsftpd start
if [ $? -eq 0 ];then #success
echo `ps -ef | grep vsftpd | grep -v "grep vsftpd"` >> "/var/ftp/"`date +%Y-%m-%d`".log"
else #failed
echo "start ftp error!" | mail -s error root
fi
/root/con2.sh
#!/bin/bash
service vsftpd stop
if [ $? -eq 0 ];then
echo "stop vsftpd successful " >> "/var/ftp/"`date +%Y-%m-%d`".log"
else
pid=`ps -ef | grep vsftpd | grep -v "grep vsftpd" | awk -F ' ' '{print $2}'`
kill -9 $pid
fi
2.2 在早上8点30分到晚上23点30分之间,每隔1⼩时ping⼀下百度域名(每次ping 发4次),保证⽹络畅通,并把ping的结果追加到 /var/ftp/年-⽉-⽇.log ⽂件中。
/root/con3.sh
#!/bin/bash
ping -c 4 www.baidu.com >> "/var/ftp/"`date +%Y-%m-%d`".log"
2.3 每天晚上11点50分30秒备份ftp⽬录(/var/ftp)⽣成名为 年-⽉-⽇.tar.gz 的
压缩包,并把压缩包的权限修改为只有root有
读权限,其他都没有权限。把压缩包移动到root主⽬录下。然后清空/var/ftp下的所有内容。
假设/var/ftp⽬录已存在
/root/con4.sh
#!/bin/bash
cd /var/ftp
name=`date +%Y-%m-%d`".tar.gz"
tar zcvf $name /var/ftp
chmod 400 $name
[root@localhost ~]# crontab -e
30 8 * * * /root/con1.sh
30 23 * * * /root/con2.sh
30 8-23/1 * * * /root/con3.sh
50 23 * * * /root/con4.sh