shell学习(脚本实战)

书写脚本规则
1.声明解释器
#!/bin/bash
bash优点: 历史记录,tab,管道,重定向,别名
2. 注释
3. 代码

1.编写一个创建用户的脚本,输入用户名和密码,输入用户名为空,退出脚本

#! /bin/bash
read -p '请输入您要创建的用户名' a
 [  -z  $a ]  && echo "输入用户名为空" && exit      //输入为空退出脚本
 useradd $a   &> /dev/null
 echo 用户$a创建成功
 stty -echo   #关闭回显
read -p '请输入你要设置的密码' b
 echo $b |  passwd --stdin $a  &> /dev/null   # /dev/null 系统黑洞
 stty echo     #开启回显
 echo 用户$a密码设置成功

2.编写脚本,实现vsftpd服务的装包配置启服务的全过程,开启上传功能

#!/bin/bash
yum list installed | grep vsftp  &> /dev/null  #测试是否安装vsftpd服务,安装则退出
[ $? == 0 ] && echo "已安装" && exit
yum -y install vsftpd &>/dev/null    #安装vsftpd服务
sed -i 's/^#anon_upload/anon_upload/' /etc/vsftpd/vsftpd.conf  #修改配置文件
systemctl restart vsftpd   #重启服务
systemctl enable vsftpd    #设置开机自启
chmod o+w /var/ftp/pub     #给ftp目录权限
systemctl stop firewalld    #暂停防火墙
setenforce 0      #暂停selinux

3.编写脚本,每2分钟检查系统登录用户数量,如果超过3人,则发邮件给管理员

#! /bin/bash
 a=`who | wc -l`   #检测当前登陆人数
[ $a -gt 3 ] && echo  "使用人数超过三人."  | mail -s test root 

[root@ha131 ~]# chmod 755 ceshi.sh
[root@ha131 ~]# crontab -e

*/2 * * * * /root/cehsi.sh    #每两分钟执行一次

4.测试网络是否连通
提示:
ping -c 3 ip # ping三次结束
ping -i 0.2 #设置ping速度每次间隔0.2
ping -W 1 #设置返回结果的时间

#! /bin/bash
 ping -c 3 -i 0.2 -W 1 www.baidu.com  &>/dev/null
 if [ $? -eq 0 ];then
         echo "无问题"
 else
         echo "有问题"
 fi

5.测试与目标ip是否连通

#! /bin/bash
  read -p "输入ip" a
 ping -c 3 -i 0.2 -W 1 $a  &>/dev/null
 if [ $? -eq 0 ];then
	 echo "$a以连通"
 else
	 echo "$a未连通"
 fi

6.for循环 测试与目标ip是否连通

#! /bin/bash
 for i in `seq 10`   #准备十个值[1~10]
 do
 ping -c 3 -i 0.2 -W 1 192.168.107.$i  &>/dev/null
 if [ $? -eq 0 ];then
         echo "192.168.107.$i连通"
 else
         echo "192.168.107.$i未连通"
 fi
 done

7.猜随机数字
结果:猜大了
猜小了
猜对了

#! /bin/bash
a=$[RANDOM%11]
read -p "请输入一个数字" n
if [ $a -eq $n ];then
        echo "猜对了"
elif [ $a -gt $n ];then
        echo "猜大了"
else
        echo "猜小了"
fi

8.while循环优化猜随机数字

#! /bin/bash
a=$[RANDOM%101]
b=0
echo $a
while :
do
	let b++
	read -p "请输入一个数字(0~100)" n
	if [ $a -eq $n ];then
		echo "猜对了,一共猜了$b次"
		exit
	elif [ $a -gt $n ];then
		echo "猜小了"
	else
		echo "猜大了"
	fi
done

9.编写一键安装nginx脚本
确保首先由nginx的安装tar包
本案例使用的为nginx1.20.1版本

#!/bin/bash
yum -y install gcc openssl-devel pcre-devel  #安装相应的环境
tar -xf /nginx/nginx-1.20.1.tar.gz -C /nginx/nginx-1.20.1  #解压的目标路径
cd nginx-1.20.1/  #进入目录
./configure    #执行安装
make
make install

测试nginx服务,如果电脑中有httpd服务请关闭。

systemctl stop firewalld   #先暂停防火墙,防止影响结果

开始测试
在这里插入图片描述
测试成功
10.编写一键启动nginx或者关闭脚本

#! /bin/bash
case $1 in
st|start)      
	netstat -ntulp | grep -q nginx 
	if [ $? -eq 0 ];then
		echo "服务已启动"
	else
		/usr/local/nginx/sbin/nginx
	fi;;
stop)
	/usr/local/nginx/sbin/nginx -s stop;;
rest)
	/usr/local/nginx/sbin/nginx -s stop
	/usr/local/nginx/sbin/nginx;;
*)
        echo "st||stop||rest||start"
esac

11.测试当前网段有哪些ip连通

#! /bin/bash
myping(){                    #定义shell函数,方便调用
        ping -c 1 -W1 $1 &> /dev/null
        if [ $? -eq 0 ];then
                echo "$1  up"
        else
                echo "$1  down"
        fi
}
for i in {1..254}
do
        myping 192.168.108.$i &
done
wait    #wait命令作用是等待所有后台进程结束才结束脚本

12.键盘输入数字,输入0结束,求累加和

#! /bin/bash
x=0
while :
do
        read -p "输入数字(输入0结束)" n
        if [ $n -eq 0 ];then
                break
        fi
        if [ -z $n ];then
                echo "请重新输入"
        fi
        let x+=n
done
echo "累加和为$x"

13.输出20以内6的倍数,加十输出

#! /bin/bash
for i in `seq 20`
do
        a=$[i%6]
        [ $a -ne 0 ] && continue  #如果余数不为0,结束本次循环
        echo $[i+10]
done

14.如何得到八位随机字符(随机密码)

#! /bin/bash
a=qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789
for i in {1..8}
do
        b=$[RANDOM%62]    
        c=${a:$b:1}
        pass=$pass$c      
done
echo $pass

15.优化创建用户脚本(不输入密码,使用默认密码123)

#! /bin/bash
read -p "请输入您要创建的用户名: " a
[ -z $a ] && echo "用户名输入为空" && exit   # 输入为空退出脚本
 useradd $a   &> /dev/null
 echo 用户$a创建成功
 stty -echo   #关闭回显
read -p '请输入你要设置的密码' b
 echo ${b:-123} |  passwd --stdin $a  &> /dev/null
 stty echo     #开启回显
 echo 用户$a密码设置成功

16.使用sed和字符串处理判断yum仓库是否可用(centos7)

#!/bin/bash
a=`yum repolist | sed -n '$p'`
x=`echo ${a#* } | sed 's/,//'`
[ $x -eq 0 ] && echo "yum不可用" && exit || echo "yum可用"

17.sed脚本综合应用
编写一个脚本getpass.sh,实现一下需求
1.找到使用bash作为登录器的用户
2. 列出这些用的shadow密码记录
3. 按每行“用户名–>密码记录”保存到getpass.log中

#!/bin/bash
A=$(sed -n '/bash$/s/:.*//p' /etc/passwd)  #找出登录器为bash的用户
for i in $A
do
        pass1=$(grep $i /etc/shadow)  #找出用户密码的一行
        pass2=${pass1#*:}       #从左往右删删到第一个:
        pass=${pass2%%:*}          #从右往左删删到最后一个:
        echo "$i --> $pass"
done

18.awk脚本综合应用
编写一个脚本getpass.sh,实现一下需求
1.找到使用bash作为登录器的用户
2. 列出这些用的shadow密码记录
3. 按每行“用户名–>密码记录”保存到getpass.log中

#!/bin/bash
A=`awk -F: '/bash$/{print $1}' /etc/passwd`  #首先找到哪些用户使用的解释器是bash,找到这些用户后把名字赋予变量A
for i in $A      #把这些找到的用户名轮番交到for循环处理
do
        grep $i /etc/shadow | awk -F: '{print $1 "-->" $2}'
         #如果第一次循环的账户是root,grep root 可以找到shadow文档中对应的行,包含用户和密码,在使用awk筛选出第一列用户名--->第二列密码
done

19. awk扩展应用
编辑一个脚本,要求显示 cpu平均负载,硬盘空间,网卡流量,安装的软件包数量,账户数量,当前登录的账户数量

uptime | awk '{print"cpu平均负载" $9,$10,$11}'
#free内存信息  free -m 以mb查看
#!/bin/bash
while :
do
echo "###########################"
uptime | awk '{print"cpu平均负载" $9,$10,$11}'
free -m | awk '/^Mem/{print"主机剩余内存"$4"M"}'
df -h | awk '/sda3/{print "主硬盘剩余空间"$4}'
ifconfig ens192 | awk '/RX p/{print "主网卡ens192接受数据量为"$5}'
ifconfig ens192 | awk '/TX p/{print "主网卡ens192发送数据量为"$5}'
A=`rpm -qa |wc -l`
echo "当前主机共安装软件包$A 个 "
awk '{a++} END{print"主机拥有账户" a"个"}' /etc/passwd
x=`who |wc -l`
echo "当前共登录$x个用户"
a=`ps aux |wc -l`     #ps aux 查看本机详细的进程
echo "主机运行的进程共有$a个"
echo "################################"
sleep 3
clear
done

21.编写监控脚本,当有人输入本机密码错误超过三次给root发邮件

#!/bin/bash
x=`awk '/Failed/{ip[$11]++} END{for(i in ip){print i","ip[i]}}' /var/log/secure`
for i in $x
do
        p=${i%,*} #ip
        b=${i#*,}  # 输入密码错误的次数
        [ $b -gt 3 ] && echo "$p访问本机失败了$b次" | mail -s test1 root
       
done
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值