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