'shell脚本作业'
if 第一题
设计一个shell程序,执行一次将备份并压缩/etc目录下的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。
提示:
1、注意判断备份目录是否存在,不存在则创建;
2、注意备份文件命名格式。
#!/bin/bash
if [ ! -e "/root/bak" ];
then
mkdir /root/bak
fi
cd /root/bak
YY=$(date +%Y)
mm=$(date +%m)
DD=$(date +%d)
backupdir="$YY$mm$DD"_etc.tar.gz
echo $backupdir
tar -zcvf $backupdir /etc/
if和 while 第二题
设计一个shell程序,添加一个新用户组为usergroup01,然后添加属于这个组的30个用户,用户名的形式为userxx,其中xx从01到30。
提示:
1、注意新建用户时会自动创建用户主目录;
2、注意01和1的区别。
#!/bin/bash
ug=usergroup01
groupadd $ug
for x in `seq -w 1 30`;
do
useradd user$x -g $ug
done
case 第三题
设计一个脚本,可根据所列清单提示,输入相应编号,以不同的颜色打印清单名称。如果输入不正确或者不输入的话就打印帮助。例如:打印一个如下的水果菜单
(1) banana
(2) apple
(3) pear
(4) cherry
实现结果:要求:输入1,则打印黄色字体banana;输入2,则打印红色字体apple;输入3,则打印绿色字体orange;输入4,则打印蓝色字体cherry。
#!/bin/bash
echo "#####################"
echo " 1.banana"
echo " 2.apple"
echo " 3.pear"
echo " 4.cherry"
echo "#####################"
echo
echo "please select a num:"
read Num
case $Num in
1) echo -e "\033[33m banana \033[0m"
;;
2) echo -e "\033[31m apple \033[0m"
;;
3) echo -e "\033[32m pear \033[0m"
;;
4) echo -e "\033[35m cherry \033[0m"
;;
*) echo "please input {1|2|3|4}"
;;
esac
for 第四题
设计一个脚本,把/var 目录下所有的文件递归罗列出来。
#!/bin/bash
function travFolder(){
cd $1
path=`pwd`
flist=`ls $pwd`
for f in $flist
do
if [ -d $f ]
then
echo "dir: $path"
travFolder $f
cd ..
else
echo "flie:$f"
fi
done
}
travFolder /var
while和break 第五题
设计一个shell脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值,再打印出该数值,直到用户输入"end"停止。
提示:
1、注意测试符的使用;
2、read的用法。
#!/bin/bash
echo "Please input a number:"
read Num
while [ "$Num" != "end" ]
do
echo "Your number: $Num"
echo "Please input a number:"
read Num
done
until 第六题
设计一个脚本,执行脚本时,根据提示输入局域网内需要测试的IP地址段,判断同网段的所有主机有多少存活,就是有哪些IP地址是可以ping通的,并打印结果。
#!/bin/bash
a=1
until [ $a -eq 256 ]
do
ping 192.168.3.$a -c 2 | grep -q "ttl=" && echo "192.168.3.$a yes" || echo "192.168.3.$a no" >> ip.txt
let "a++"
done
函数、if 第七题
设计一个监控脚本,若http服务出现异常则重新启动该服务。
#! /bin/sh
proc_name="./server" #进程名
proc_num() #查询进程数量
{
num=$(ps -ef | grep gdms |grep $proc_name | grep -v "grep" | wc -l)
echo $num
return $num
}
proc_num
number=$? #获取进程数量
if [ $number -eq 0 ] #如果进程数量为0
then #重新启动服务器,或者扩展其它内容。
cd /home/liudongwei/workspace/server2.0/dist
nohup ./server &
fi
if和continue 第八题:
设计一个脚本,利用循环和continue,计算100以内能被3整除的数之和。
#!/bin/bash
s=0
for((i=1;i<100;i++));
do
if [ `expr $i % 3` -eq 0 ]
then
echo "能被3整除的数:$i"
s=`expr $s + $i`
fi
done
echo "100以内能被3整除的数之和:$s"
函数、shift和while 第九题
设计一个脚本,脚本中调用函数,利用shift计算所有函数参数乘积,假设参数均为整数,分别为3、5、7、9。
#!/bin/bash
s=1
func(){
while (($#>0))
do
let s=s*$1
shift
done
}
func 3 5 7 9
echo "$s"
函数 第十题
下面脚本用于新装Linux的相关配置工作,比如更换默认yum源,优化系统内核、停掉一些没必要启动的系统服务等。此脚本尤其适合大批新安装的CentOS系列的服务器。适用于Centos7。执行并分析下面脚本内容,对关键语句,给出正确的注释。并打印执行结果。
#!/bin/bash
#1.__________________________
if [ `whoami` != "root" ];then
echo " only root can run it"
exit 1
fi
#2._______________________
echo -e "\033[31m 这是centos7系统初始化脚本,将更新系统内核至最新版本,请慎重运行!\033[0m"
read -s -n1 -p "Press any key to continue or ctrl+C to cancel"
echo "Your inputs: $REPLY"
#3._______________________________
yum_config(){
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
}
#4._____________________________________
ntp_config(){
yum -y install chrony
systemctl start chronyd && systemctl enable chronyd
timedatectl set-timezone Asia/Shanghai && timedatectl set-ntp yes
}
#5.__________________________________________
close_firewalld(){
systemctl stop firewalld.service &> /dev/null
systemctl disable firewalld.service &> /dev/null
}
#6.___________________________________
close_selinux(){
setenforce 0
sed -i 's/enforcing/disabled/g' /etc/selinux/config
}
#7.________________________________________
yum_tools(){
yum install -y vim wget curl curl-devel bash-completion lsof iotop iostat unzip bzip2 bzip2-devel
yum install -y gcc gcc-c++ make cmake autoconf openssl-devel openssl-perl net-tools
source /usr/share/bash-completion/bash_completion
}
#8.___________________________________
update_kernel (){
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-ml
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
}
#9.__________________________________
main(){
yum_config;
ntp_config;
close_firewalld;
close_selinux;
yum_tools;
update_kernel;
}
main
脚本打印结果截图:(如果系统默认未安装wget,找出解决方法然后修改脚本)
#!/bin/bash
yum -y install wget
#1._____判断是否为root用户_____________________
if [ `whoami` != "root" ];then
echo " only root can run it"
exit 1
fi
#2.______温馨提示_________________
echo -e "\033[31m 这是centos7系统初始化脚本,将更新系统内核至最新版本,请慎重运行!\033[0m"
read -s -n1 -p "Press any key to continue or ctrl+C to cancel"
echo "Your inputs: $REPLY"
#3.______配置yum源_________________________
yum_config(){
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
}
#4.______配置ntp_______________________________
ntp_config(){
yum -y install chrony
systemctl start chronyd && systemctl enable chronyd
timedatectl set-timezone Asia/Shanghai && timedatectl set-ntp yes
}
#5.______关闭防火墙____________________________________
close_firewalld(){
systemctl stop firewalld.service &> /dev/null
systemctl disable firewalld.service &> /dev/null
}
#6._______关闭selinux____________________________
close_selinux(){
setenforce 0
sed -i 's/enforcing/disabled/g' /etc/selinux/config
}
#7._______安装yum工具_________________________________
yum_tools(){
yum install -y vim wget curl curl-devel bash-completion lsof iotop iostat unzip bzip2 bzip2-devel
yum install -y gcc gcc-c++ make cmake autoconf openssl-devel openssl-perl net-tools
source /usr/share/bash-completion/bash_completion
}
#8.________更新内核___________________________
update_kernel (){
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-ml
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
}
#9.________主函数执行之前定义的脚本__________________________
main(){
yum_config;
ntp_config;
close_firewalld;
close_selinux;
yum_tools;
update_kernel;
}
main