shell 练习附带参考答案,建以先看前面一条没有答案的练习,做完再参考_#! bin bash 通过位置变量创建 linux 系统账户及密码 #$1 是执行脚本的第一个参数

本文提供了一系列的Linux Shell脚本实战示例,包括创建和管理用户、部署软件、系统优化、日志管理、监控和服务控制等。脚本涵盖了自动化部署、文件操作、数据库管理、网络监控等多个方面,旨在帮助读者提升Linux系统管理和自动化运维能力。
摘要由CSDN通过智能技术生成

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

#!/bin/bash    自动为 user.sh 添加解释器信息

#先使用 grep 判断对象脚本是否已经有解释器信息,如果没有则使用 sed 添加解释器以及描述信息

if  !  grep  ‐q  “^#!”  $1; then

sed  ‘1i #!/bin/bash’  $1

sed  '2i #Description: ’

fi

#因为每个脚本的功能不同,作用不同,所以在给对象脚本添加完解释器信息,以及 Description 后还希望

#继续编辑具体的脚本功能的描述信息,这里直接使用 vim 把对象脚本打开,并且光标跳转到该文件的第 2 行

vim +2 $1

  1. 自动化部署 varnish 源码包软件

#!/bin/bash

#Author:丁丁历险(Jacob)

#本脚本需要提前下载 varnish‐3.0.6.tar.gz 这样一个源码包软件,该脚本即可用自动源码安装部署软件

yum ‐y install gcc readline‐devel pcre‐devel

useradd ‐s /sbin/nologin varnish

tar ‐xf varnish‐3.0.6.tar.gz

cd varnish‐3.0.6

#使用 configure,make,make install 源码安装软件包

./configure ‐‐prefix=/usr/local/varnish

make && make install

#在源码包目录下,将相应的配置文件拷贝到 Linux 系统文件系统中

#默认安装完成后,不会自动拷贝或安装配置文件到 Linux 系统,所以需要手动 cp 复制配置文件

#并使用 uuidgen 生成一个随机密钥的配置文件

cp redhat/varnish.initrc /etc/init.d/varnish

cp redhat/varnish.sysconfig /etc/sysconfig/varnish

cp redhat/varnish_reload_vcl /usr/bin/

ln ‐s /usr/local/varnish/sbin/varnishd /usr/sbin/

ln ‐s /usr/local/varnish/bin/* /usr/bin

mkdir /etc/varnish

cp /usr/local/varnish/etc/varnish/default.vcl /etc/varnish/

uuidgen > /etc/varnish/secret

  1. 编写 nginx 启动脚本

#!/bin/bash

#Author:丁丁历险(Jacob)

#本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本

#如果本脚本名为/etc/init.d/nginx,则 service nginx start 就可以启动该服务

#service nginx stop 就可以关闭服务

#service nginx restart 可以重启服务

#service nginx status 可以查看服务状态

program=/usr/local/nginx/sbin/nginx

pid=/usr/local/nginx/logs/nginx.pid

start(){

if  [  ‐f   $pid  ];then

echo  “nginx 服务已经处于开启状态”

else

$program

fi

stop(){

if  [  ‐!  ‐f  $pid  ];then

echo “nginx 服务已经关闭”

else

$program ‐s stop

echo  “关闭服务 ok”

fi

}

status(){

if  [  ‐f  $pid  ];then

echo “服务正在运行…”

else

echo “服务已经关闭”

fi

}

case   $1  in

start)

start;;

stop)

stop;;

restart)

stop

sleep 1

start;;

status)

status;;

*)

echo  “你输入的语法格式错误”

esac

  1. 自动对磁盘分区、格式化、挂载

#!/bin/bash

#Author:丁丁历险(Jacob)

#对虚拟机的 vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序 fdisk

#n(新建分区),p(创建主分区),1(分区编号为 1),两个空白行(两个回车,相当于将整个磁盘分一个区)

#注意:1 后面的两个回车(空白行)是必须的!

fdisk /dev/vdb << EOF

n

p

1

wq

EOF

#格式化刚刚创建好的分区

mkfs.xfs   /dev/vdb1

#创建挂载点目录

if [   ‐e /data  ]; then

exit

fi

mkdir  /data

#自动挂载刚刚创建的分区,并设置开机自动挂载该分区

echo ‘/dev/vdb1     /data    xfs    defaults        1 2’  >> /etc/fstab

mount ‐a

  1. 自动优化 Linux 内核参数

#!/bin/bash

#Author:丁丁历险(Jacob)

#脚本针对 RHEL7

cat >> /usr/lib/sysctl.d/00‐system.conf <<EOF

fs.file‐max=65535

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 5

net.ipv4.tcp_syn_retries = 5

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 30

#net.ipv4.tcp_keepalive_time = 120

net.ipv4.ip_local_port_range = 1024  65535

kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 5010 641280 5010 128

net.core.wmem_default=262144

net.core.wmem_max=262144

net.core.rmem_default=4194304

net.core.rmem_max=4194304

net.ipv4.tcp_fin_timeout = 10

net.ipv4.tcp_keepalive_time = 30

net.ipv4.tcp_window_scaling = 0

net.ipv4.tcp_sack = 0

EOF

sysctl –p

  1. 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)

#mkdir  /data/scripts

#vim   /data/scripts/nginx_log.sh

#!/bin/bash

logs_path=“/usr/local/nginx/logs/”

mv ${logs_path}access.log l o g s _ p a t h a c c e s s _ {logs\_path}access\_ logs_pathaccess_(date ‐d “yesterday” +“%Y%m%d”).log

kill ‐USR1  cat /usr/local/nginx/logs/nginx.pid

chmod +x  /data/scripts/nginx_log.sh

#crontab  ‐e                    #脚本写完后,将脚本放入计划任务每天执行一次脚本

0  1  *  *   *   /data/scripts/nginx_log.sh

  1. 检测 MySQL 数据库连接数量

#!/bin/bash

#Author:丁丁历险(Jacob)

#本脚本每 2 秒检测一次 MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行

#以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常

#本案例中的用户名和密码需要根据实际情况修改后方可使用

log_file=/var/log/mysql_count.log

user=root

passwd=123456

while :

do

sleep 2

count=mysqladmin  ‐u  "$user"  ‐p  "$passwd"   status |  awk '{print $4}'

echo “date +%Y‐%m‐%d 并发连接数为:$count” >> $log_file

done

  1. 根据 md5 校验码,检测文件是否被修改

#!/bin/bash

#Author:丁丁历险(Jacob)

#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件

#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次

#将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件

for  i  in  $(ls /etc/*.conf)

do

md5sum “$i” >> /var/log/conf_file.log

done

  1. 检测 MySQL 服务是否存活

#!/bin/bash

#Author:丁丁历险(Jacob)

#host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码

#这些信息需要根据实际情况修改后方可使用

host=127.0.0.1

user=root

passwd=123456

mysqladmin ‐h 127.0.0.1 ‐u root ‐p’$passwd’  ping  &>/dev/null

if  [  $?  ‐eq  0  ];then

echo  “MySQL is UP”

else

echo  “MySQL is down”

fi

  1. 备份 MySQL 的 shell 脚本(mysqldump 版本)

#!/bin/bash

#Author:丁丁历险(Jacob)

#定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)

#dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)

user=root

passwd=123456

dbname=mysql

date=$(date +%Y%m%d)

#测试备份目录是否存在,不存在则自动创建该目录

[  ! ‐d  /mysqlbackup  ] &&  mkdir  /mysqlbackup

#使用 mysqldump 命令备份数据库

mysqldump ‐u" u s e r "  ‐ p " user"  ‐p" user" ‐p"passwd" “ d b n a m e " > / m y s q l b a c k u p / " dbname" > /mysqlbackup/" dbname">/mysqlbackup/"dbname”‐${date}.sql

  1. 将文件中所有的小写字母转换为大写字母

#!/bin/bash

#$1 是位置参数,是你需要转换大小写字母的文件名称

#执行脚本,给定一个文件名作为参数,脚本就会将该文件中所有的小写字母转换为大写字母

tr  “[a‐z]”  “[A‐Z]”  < $1

  1. 非交互自动生成 SSH 密钥文件

#!/bin/bash

#‐t 指定 SSH 密钥的算法为 RSA 算法;‐N 设置密钥的密码为空;‐f 指定生成的密钥文件存放在哪里

rm  ‐rf  ~/.ssh/{known_hosts,id_rsa*}

ssh‐keygen ‐t RSA ‐N ‘’ ‐f ~/.ssh/id_rsa

  1. 检查特定的软件包是否已经安装

#!/bin/bash

#Author:丁丁历险(Jacob)

if [ $# ‐eq 0 ];then

echo “你需要制定一个软件包名称作为脚本参数”

echo “用法:$0 软件包名称 …”

fi

# @ 提取所有的位置变量的值 , 相当于 @提取所有的位置变量的值,相当于 @提取所有的位置变量的值,相当于*

for package in “$@”

do

if rpm ‐q ${package} &>/dev/null ;then

echo ‐e “${package}\033[32m 已经安装\033[0m”

else

echo ‐e “${p

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值