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
    评论
### 回答1: 《shell脚本实战》是一本介绍如何使用Shell编写脚本的电子书籍。Shell脚本是一种用于自动化任务和批处理的脚本语言,广泛应用于Unix、Linux和类Unix系统中。 这本电子书逐步引导读者从基础知识开始,包括Shell脚本的语法、变量、运算符、条件判断等。然后通过实例演示了如何编写各种常见的Shell脚本,例如文件操作、字符串操作、数学计算、循环、条件语句等。 《shell脚本实战》中还介绍了如何编写高级Shell脚本,例如函数、数组、正则表达式等。同时,它还展示了如何与系统命令、文件、网络、数据库等进行交互,从而帮助读者更好地掌握Shell脚本的灵活应用。 该电子书的实战部分还包括了一些实际场景下的应用示例,如日志分析、备份脚本、系统监控等。通过这些示例,读者可以学到如何解决实际问题,并将Shell脚本运用于自己的工作中。 总而言之,《shell脚本实战》是一本适合初学者和有一定基础的读者的实用电子书。通过学习本书,读者可以系统地了解Shell脚本的编写方法和应用技巧,提高工作效率,实现自动化任务,为日常工作带来便利。 ### 回答2: 《Shell脚本实战》,是一本针对Shell脚本编程的实战性电子书。本书主要面向对Shell脚本编程有一定基础的读者,旨在通过实际案例的讲解和实战练习的方式,帮助读者提升自己在Shell脚本编程方面的技能。 本书分为七个章节,分别介绍了Shell脚本编程的基础知识、字符串处理、文件操作、流程控制、函数、正则表达式以及常用工具等内容。每个章节都以案例为例,通过实际场景的描述和具体的代码示例,向读者展示了如何使用Shell脚本来解决实际问题。 书中的案例涵盖了各个领域,包括系统管理、日志分析、文本处理、数据清洗等等,读者可以通过学习这些案例来深入理解Shell脚本的应用场景和技巧。此外,书中还提供了练习题和实战项目,读者可以通过完成这些练习和项目来巩固和应用所学知识。 总的来说,《Shell脚本实战》是一本实用性很强的电子书,适合那些希望通过实践来提升Shell脚本编程能力的读者。无论是作为初学者的入门教材,还是作为有经验的开发人员的参考书,都具有一定的价值。读者可以通过阅读这本书,掌握Shell脚本编程的基础知识和技巧,提高自己的工作效率和编程水平。 ### 回答3: Shell脚本实战电子版是一本关于Shell脚本编程的实用指南。它适合编程新手和有一定编程基础的人士学习和使用。 本书首先介绍了Shell脚本的基础知识,包括Shell环境、Shell脚本的基本语法和变量、运算符、流程控制等内容。然后,书中以实际案例为例,详细介绍了如何使用Shell脚本解决各种问题。 在本书中,读者将学习如何创建和运行Shell脚本、使用Shell脚本进行文件和目录操作、处理文本文件和日志文件、在Shell脚本中使用正则表达式和通配符等技巧。此外,本书还介绍了如何使用Shell脚本编写简单的网络脚本、检测系统性能和使用Shell脚本进行系统管理等内容。 Shell脚本实战电子版内容丰富,实用性强。通过学习本书,读者可以有效地利用Shell脚本提高工作效率,解决实际问题。无论是在Linux、Unix还是Mac系统中,Shell脚本都是一种非常强大和灵活的工具,可以节省时间和精力。 总之,Shell脚本实战电子版是一本非常实用的书籍,对于希望学习和使用Shell脚本的读者来说,它是不可多得的参考资料。无论是初学者还是有一定经验的程序员,都可以从中获得实用的技巧和知识,提升自己的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值