shell编程100例不翻身的咸鱼

2、通过位置变量创建Linux系统账户及密码

#通过位置变量创建Linux系统账户及密码

#$1是执行脚本的第一个参数,$2是执行脚本的第二个参数

useradd"$1"

echo"$2"|passwd‐‐stdin"$1"

3、备份日志

#每周5使用tar命令备份/var/log下的所有日志文件

#vim/root/logbak.sh

#编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖

#注意date命令需要使用反引号括起来,反引号在键盘键上面

tar-czflog-`date+%Y%m%d`.tar.gz/var/log

#crontab‐e#编写计划任务,执行备份脚本

0003**5/root/logbak.sh

4、一键部署LNMP(RPM包版本)

#一键部署LNMP(RPM包版本)

#使用yum安装部署LNMP,需要提前配置好yum源,否则该脚本会失败

#本脚本使用于centos7.2或RHEL7.2

yum‐yinstallmariadbmariadb‐develmariadb‐server

yum‐yinstallphpphp‐mysql

5、监控内存和磁盘容量,小于给定值时报警

#实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员

#提取根分区剩余空间

disk_size=$(df/|awk'/\//{print$4}')

#提取内存剩余空间

mem_size=$(free|awk'/Mem/{print$4}')

while:

do

#注意内存和磁盘提取的空间大小都是以Kb为单位

if[$disk_size-le512000-a$mem_size-le1024000]

then

mail‐s"Warning"root<

Insufficientresources,资源不足

EOF

fi

done

6、猜数字游戏

#脚本生成一个100以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,

#猜小了或猜大了,直至用户猜对脚本结束。

#RANDOM为系统自带的系统变量,值为0‐32767的随机数

#使用取余算法将随机数变为1‐100的随机数

num=$[RANDOM%100+1]

echo"$num"

#使用read提示用户猜数字

#使用if判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),

#‐lt(小于),‐le(小于等于)

read-p"计算机生成了一个1‐100的随机数,你猜:"cai

if[$cai-eq$num]

echo"恭喜,猜对了"

exit

elif[$cai-gt$num]

echo"Oops,猜大了"

else

echo"Oops,猜小了"

7、检测本机当前用户是否为超级管理员,如果是管理员,则使用yum安装vsftpd,如果不是,则提示您非管理员(使用字串对比版本)

#检测本机当前用户是否为超级管理员,如果是管理员,则使用yum安装vsftpd,如果不

#是,则提示您非管理员(使用字串对比版本)

if[$USER=="root"]

yum‐yinstallvsftpd

echo"您不是管理员,没有权限安装软件"

8、检测本机当前用户是否为超级管理员,如果是管理员,则使用yum安装vsftpd,如果不是,则提示您非管理员(使用UID数字对比版本)

#是,则提示您非管理员(使用UID数字对比版本)

if[$UID-eq0];then

9、编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的123456作为默认密码。

#编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户

#不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默

#认的123456作为默认密码。

read-p"请输入用户名:"user

#使用‐z可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为2

#没有输入用户名脚本退出后,使用$查看的返回码为2

if[-z$user];then

echo"您不需输入账户名"

exit2

#使用stty‐echo关闭shell的回显功能

#使用sttyecho打开shell的回显功能

stty-echo

read-p"请输入密码:"pass

sttyecho

pass=${pass:‐123456}

useradd"$user"

echo"$pass"|passwd‐‐stdin"$user"

10、输入三个数并进行升序排序

#依次提示用户输入3个整数,脚本根据数字大小依次排序输出3个数字

read-p"请输入一个整数:"num1

read-p"请输入一个整数:"num2

read-p"请输入一个整数:"num3

#不管谁大谁小,最后都打印echo"$num1,$num2,$num3"

#num1中永远存最小的值,num2中永远存中间值,num3永远存最大值

#如果输入的不是这样的顺序,则改变数的存储顺序,如:可以将num1和num2的值对调

tmp=0

#如果num1大于num2,就把num1和和num2的值对调,确保num1变量中存的是最小值

if[$num1-gt$num2];then

tmp=$num1

num1=$num2

num2=$tmp

#如果num1大于num3,就把num1和num3对调,确保num1变量中存的是最小值

if[$num1-gt$num3];then

num1=$num3

num3=$tmp

#如果num2大于num3,就把num2和num3对标,确保num2变量中存的是小一点的值

if[$num2-gt$num3];then

tmp=$num2

num2=$num3

echo"排序后数据(从小到大)为:$num1,$num2,$num3"

11、石头、剪刀、布游戏

#编写脚本,实现人机<石头,剪刀,布>游戏

game=(石头剪刀布)

num=$[RANDOM%3]

computer=${game[$num]}

#通过随机数获取计算机的出拳

#出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是3中不同的可能

echo"请根据下列提示选择您的出拳手势"

echo"1.石头"

echo"2.剪刀"

echo"3.布"

read-p"请选择1‐3:"person

case$personin

1)

if[$num-eq0]

echo"平局"

elif[$num-eq1]

echo"你赢"

echo"计算机赢"

fi;;

2)

3)

*)

echo"必须输入1‐3的数字"

esac

12、编写脚本测试192.168.4.0/24整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for版本)

#编写脚本测试192.168.4.0/24整个网段中哪些主机处于开机状态,哪些主机处于关机

#状态(for版本)

foriin{1..254}

ping‐c2‐i0.3‐W1192.168.4.$i&>/dev/null

if[$-eq0];then

echo"192.168.4.$iisup"

echo"192.168.4.$iisdown"

13、编写脚本测试192.168.4.0/24整个网段中哪些主机处于开机状态,哪些主机处于关机状态(while版本)

#状态(while版本)

i=1

while[$i-le254]

leti++

14、编写脚本测试192.168.4.0/24整个网段中哪些主机处于开机状态,哪些主机处于关机状态(多进程版)

#状态(多进程版)

#定义一个函数,ping某一台主机,并检测主机的存活状态

myping(){

ping‐c2‐i0.3‐W1$1&>/dev/null

echo"$1isup"

echo"$1isdown"

}

myping192.168.4.$i&

#使用&符号,将执行的函数放入后台执行

#这样做的好处是不需要等待ping第一台主机的回应,就可以继续并发ping第二台主机,依次类推。

15、编写脚本,显示进度条

#编写脚本,显示进度条

jindu(){

echo-n'#'

sleep0.2

jindu&

cp-a$1$2

killall$0

echo"拷贝完成"

16、进度条,动态时针版本;定义一个显示进度的函数,屏幕快速显示|/‐\

#进度条,动态时针版本

#定义一个显示进度的函数,屏幕快速显示|/‐\

rotate_line(){

COUNT="0"#设置4个形状的编号,默认编号为0(不代表任何图像)

COUNT=`expr$COUNT+1`#执行循环,COUNT每次循环加1,(分别代表4种不同的形状)

case$COUNTin#判断COUNT的值,值不一样显示的形状就不一样

"1")#值为1显示‐

echo-e'‐'"\b\c"

sleep$INTERVAL

;;

"2")#值为2显示\\,第一个\是转义

echo-e'\\'"\b\c"

"3")#值为3显示|

echo-e"|\b\c"

"4")#值为4显示/

echo-e"/\b\c"

*)#值为其他时,将COUNT重置为0

COUNT="0";;

rotate_line

17、9*9乘法表

#9*9乘法表(编写shell脚本,打印9*9乘法表)

foriin`seq9`

forjin`seq$i`

echo-n"$j*$i=$[i*j]"

echo

18、使用死循环实时显示eth0网卡发送的数据包流量

#使用死循环实时显示eth0网卡发送的数据包流量

echo'本地网卡eth0流量信息如下:'

ifconfigeth0|grep"RXpack"|awk'{print$5}'

ifconfigeth0|grep"TXpack"|awk'{print$5}'

sleep1

19、使用user.txt文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码本脚本执行,需要提前准备一个user.txt文件,该文件中包含有若干用户名信息

#使用user.txt文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码

#本脚本执行,需要提前准备一个user.txt文件,该文件中包含有若干用户名信息

foriin`catuser.txt`

useradd$i

echo"123456"|passwd‐‐stdin$i

20、编写批量修改扩展名脚本

#编写批量修改扩展名脚本,如批量将txt文件修改为doc文件

#执行脚本时,需要给脚本添加位置参数

#脚本名txtdoc(可以将txt的扩展名修改为doc)

#脚本名docjpg(可以将doc的扩展名修改为jpg)

foriin"ls*.$1"

mv$i${i%.*}.$2

#删除~/.ssh/known_hosts后,ssh远程任何主机都会询问是否确认要连接该主机

rm‐rf~/.ssh/known_hosts

expect<

spawnssh192.168.4.254

expect"yes/no"{send"yes\r"}

#根据自己的实际情况将密码修改为真实的密码字串

expect"password"{send"密码\r"}

expect"#"{send"exit\r"}

22、一键部署LNMP(源码安装版本)

#一键部署LNMP(源码安装版本)

menu()

{

clear

echo"##############‐‐‐‐Menu‐‐‐‐##############"

echo"#1.InstallNginx"

echo"#2.InstallMySQL"

echo"#3.InstallPHP"

echo"#4.ExitProgram"

echo"########################################"

choice()

read-p"Pleasechoiceamenu[1‐9]:"select

install_nginx()

idnginx&>/dev/null

if[$-ne0];then

useradd-s/sbin/nologinnginx

if[-fnginx‐1.8.0.tar.gz];then

tar-xfnginx‐1.8.0.tar.gz

cdnginx‐1.8.0

yum-yinstallgccpcre‐developenssl‐develzlib‐develmake

make

makeinstall

ln-s/usr/local/nginx/sbin/nginx/usr/sbin/

cd..

echo"没有Nginx源码包"

install_mysql()

yum-yinstallgccgcc‐c++cmakencurses‐develperl

idmysql&>/dev/null

useradd-s/sbin/nologinmysql

if[-fmysql‐5.6.25.tar.gz];then

tar-xfmysql‐5.6.25.tar.gz

cdmysql‐5.6.25

cmake.

/usr/local/mysql/scripts/mysql_install_db‐‐user=mysql‐‐datadir=/usr/local/mysql/data/

‐‐basedir=/usr/local/mysql/

chown-Rroot.mysql/usr/local/mysql

chown-Rmysql/usr/local/mysql/data

/bin/cp-f/usr/local/mysql/support‐files/mysql.server/etc/init.d/mysqld

chmod+x/etc/init.d/mysqld

/bin/cp-f/usr/local/mysql/support‐files/my‐default.cnf/etc/my.cnf

echo"/usr/local/mysql/lib/">>/etc/ld.so.conf

ldconfig

echo'PATH=\$PATH:/usr/local/mysql/bin/'>>/etc/profile

exportPATH

echo"没有mysql源码包"

install_php()

#安装php时没有指定启动哪些模块功能,如果的用户可以根据实际情况自行添加额外功能如‐‐with‐gd等

yum-yinstallgcclibxml2‐devel

if[-fmhash‐0.9.9.9.tar.gz];then

tar-xfmhash‐0.9.9.9.tar.gz

cdmhash‐0.9.9.9

./configure

if[!‐f/usr/lib/libmhash.so];then

ln-s/usr/local/lib/libmhash.so/usr/lib/

echo"没有mhash源码包文件"

if[-flibmcrypt‐2.5.8.tar.gz];then

tar-xflibmcrypt‐2.5.8.tar.gz

cdlibmcrypt‐2.5.8

if[!-f/usr/lib/libmcrypt.so];then

ln-s/usr/local/lib/libmcrypt.so/usr/lib/

echo"没有libmcrypt源码包文件"

if[-fphp‐5.4.24.tar.gz];then

tar-xfphp‐5.4.24.tar.gz

cdphp‐5.4.24

./configure‐‐prefix=/usr/local/php5‐‐with‐mysql=/usr/local/mysql‐‐enable‐fpm‐‐

enable‐mbstring‐‐with‐mcrypt‐‐with‐mhash‐‐with‐config‐file‐path=/usr/local/php5/etc‐‐with‐

mysqli=/usr/local/mysql/bin/mysql_config

make&&makeinstall

/bin/cp-fphp.ini‐production/usr/local/php5/etc/php.ini

/bin/cp-f/usr/local/php5/etc/php‐fpm.conf.default/usr/local/php5/etc/php‐fpm.conf

echo"没有php源码包文件"

menu

choice

case$selectin

install_nginx

install_mysql

install_php

4)

echoSorry!

23、编写脚本快速克隆KVM虚拟机

#编写脚本快速克隆KVM虚拟机

#本脚本针对RHEL7.2或Centos7.2

#本脚本需要提前准备一个qcow2格式的虚拟机模板,

#名称为/var/lib/libvirt/images/.rh7_template的虚拟机模板

#该脚本使用qemu‐img命令快速创建快照虚拟机

#脚本使用sed修改模板虚拟机的配置文件,将虚拟机名称、UUID、磁盘文件名、MAC地址

#exitcode:

#65‐>userinputnothing

#66‐>userinputisnotanumber

#67‐>userinputoutofrange

#68‐>vmdiskimageexists

IMG_DIR=/var/lib/libvirt/images

BASEVM=rh7_template

read-p"EnterVMnumber:"VMNUM

if[$VMNUM-le9];then

VMNUM=0$VMNUM

if[-z"${VMNUM}"];then

echo"Youmustinputanumber."

exit65

elif[[${VMNUM}=~[a‐z]];then

exit66

elif[${VMNUM}-lt1-o${VMNUM}-gt99];then

echo"Inputoutofrange"

exit67

NEWVM=rh7_node${VMNUM}

if[-e$IMG_DIR/${NEWVM}.img];then

echo"Fileexists."

exit68

echo-en"CreatingVirtualMachinediskimage......\t"

qemu‐imgcreate-fqcow2‐b$IMG_DIR/.${BASEVM}.img$IMG_DIR/${NEWVM}.img&>/dev/null

echo-e"\e[32;1m[OK]\e[0m"

#virshdumpxml${BASEVM}>/tmp/myvm.xml

cat/var/lib/libvirt/images/.rhel7.xml>/tmp/myvm.xml

sed-i"/${BASEVM}/s/${BASEVM}/${NEWVM}/"/tmp/myvm.xml

sed-i"/uuid/s/.*<\/uuid>/$(uuidgen)<\/uuid>/"/tmp/myvm.xml

sed-i"/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/"/tmp/myvm.xml

#修改MAC地址,本例使用的是常量,每位使用该脚本的用户需要根据实际情况修改这些值

#最好这里可以使用便利,这样更适合于批量操作,可以克隆更多虚拟机

sed-i"/mac/s/a1/0c/"/tmp/myvm.xml

echo-en"Definingnewvirtualmachine......\t\t"

virshdefine/tmp/myvm.xml&>/dev/null

24、点名器脚本

#编写一个点名器脚本

#该脚本,需要提前准备一个user.txt文件

#该文件中需要包含所有姓名的信息,一行一个姓名,脚本每次随机显示一个姓名

#统计user文件中有多少用户

line=`catuser.txt|wc‐l`

num=$[RANDOM%line+1]

sed-n"${num}p"user.txt

25、查看有多少远程的IP在连接本机

#查看有多少远程的IP在连接本机(不管是通过ssh还是web还是ftp都统计)

#使用netstat‐atn可以查看本机所有连接的状态,‐a查看所有,

#-t仅显示tcp连接的信息,‐n数字格式显示

#LocalAddress(第四列是本机的IP和端口信息)

#ForeignAddress(第五列是远程主机的IP和端口信息)

#使用awk命令仅显示第5列数据,再显示第1列IP地址的信息

#sort可以按数字大小排序,最后使用uniq将多余重复的删除,并统计重复的次数

netstat-atn|awk'{print$5}'|awk'{print$1}'|sort-nr|uniq-c

26、对100以内的所有正整数相加求和(1+2+3+4...+100)

#对100以内的所有正整数相加求和(1+2+3+4...+100)

#seq100可以快速自动生成100个整数

sum=0

foriin`seq100`

sum=$[sum+i]

echo"总和是:$sum"

27、统计13:30到14:30所有访问apache服务器的请求有多少个

#统计13:30到14:30所有访问apache服务器的请求有多少个

#awk使用‐F选项指定文件内容的分隔符是/或者:

#条件判断$7:$8大于等于13:30,并且要求,$7:$8小于等于14:30

#最后使用wc‐l统计这样的数据有多少行,即多少个

28、统计13:30到14:30所有访问本机Aapche服务器的远程IP地址是什么

#统计13:30到14:30所有访问本机Aapche服务器的远程IP地址是什么

#日志文档内容里面,第1列是远程主机的IP地址,使用awk单独显示第1列即可

29、打印国际象棋棋盘

#打印国际象棋棋盘

#设置两个变量,i和j,一个代表行,一个代表列,国际象棋为8*8棋盘

#i=1是代表准备打印第一行棋盘,第1行棋盘有灰色和蓝色间隔输出,总共为8列

#i=1,j=1代表第1行的第1列;i=2,j=3代表第2行的第3列

#棋盘的规律是i+j如果是偶数,就打印蓝色色块,如果是奇数就打印灰色色块

#使用echo‐ne打印色块,并且打印完成色块后不自动换行,在同一行继续输出其他色块

foriin{1..8}

forjin{1..8}

sum=$[i+j]

if[$[sum%2]-eq0];then

echo-ne"\033[46m\033[0m"

echo-ne"\033[47m\033[0m"

30、统计每个远程IP访问了本机apache几次

#统计每个远程IP访问了本机apache几次

#方法1:

grep"bash$"/etc/passwd|wc-l

#方法2:

awk-f:'/bash$/{x++}end{printx}'/etc/passwd

32、统计/var/log有多少个文件,并显示这些文件名

#统计/var/log有多少个文件,并显示这些文件名

#使用ls递归显示所有,再判断是否为文件,如果是文件则计数器加1

cd/var/log

foriin`ls-r*`

if[-f$i];then

letsum++

echo"文件名:$i"

echo"总文件数量为:$sum"

33、自动为其他脚本添加解释器信息

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

if!grep-q"^#!"$1;then

sed'1i#!/bin/bash'$1

sed'2i#Description:'

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

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

vim+2$1

34、自动化部署varnish源码包软件

#自动化部署varnish源码包软件

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

yum-yinstallgccreadline‐develpcre‐devel

useradd-s/sbin/nologinvarnish

tar-xfvarnish‐3.0.6.tar.gz

cdvarnish‐3.0.6

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

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

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

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

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

cpredhat/varnish.initrc/etc/init.d/varnish

cpredhat/varnish.sysconfig/etc/sysconfig/varnish

cpredhat/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

35、编写nginx启动脚本

#编写nginx启动脚本

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

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

#servicenginxstop就可以关闭服务

#servicenginxrestart可以重启服务

#servicenginxstatus可以查看服务状态

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

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

start(){

if[-f$pid];then

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

$program

stop(){

if[-!-f$pid];then

echo"nginx服务已经关闭"

$program-sstop

echo"关闭服务ok"

status(){

echo"服务正在运行..."

echo"服务已经关闭"

case$1in

start)

start;;

stop)

stop;;

restart)

stop

status)

status;;

echo"你输入的语法格式错误"

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

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

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

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

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

fdisk/dev/vdb<

n

p

1

wq

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

mkfs.xfs/dev/vdb1

#创建挂载点目录

if[-e/data];then

mkdir/data

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

echo'/dev/vdb1/dataxfsdefaults12'>>/etc/fstab

mount-a

37、自动优化Linux内核参数

#自动优化Linux内核参数

#脚本针对RHEL7

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

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=102465535

kernel.shmall=2097152

kernel.shmmax=2147483648

kernel.shmmni=4096

kernel.sem=50106412805010128

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

sysctl–p

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

#mkdir/data/scripts

#vim/data/scripts/nginx_log.sh

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

logs_path="/usr/local/nginx/logs/"

mv${logs_path}access.log${logs_path}access_$(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#脚本写完后,将脚本放入计划任务每天执行一次脚本

01***/data/scripts/nginx_log.sh

39、检测MySQL数据库连接数量

#检测MySQL数据库连接数量

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

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

log_file=/var/log/mysql_count.log

user=root

passwd=123456

sleep2

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

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

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

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

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

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

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

foriin$(ls/etc/*.conf)

md5sum"$i">>/var/log/conf_file.log

41、检测MySQL服务是否存活

#检测MySQL服务是否存活

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

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

host=192.168.51.198

mysqladmin-h'$host'-u'$user'-p'$passwd'ping&>/dev/null

if[$-eq0]

echo"MySQLisUP"

echo"MySQLisdown"

42、备份MySQL的shell脚本(mysqldump版本)

#备份MySQL的shell脚本(mysqldump版本)

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

dbname=mysql

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

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

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

#使用mysqldump命令备份数据库

mysqldump-u"$user"-p"$passwd""$dbname">/mysqlbackup/"$dbname"-${date}.sql

43、将文件中所有的小写字母转换为大写字母

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

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

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

tr"[a‐z]""[A‐Z]"<$1

44、非交互自动生成SSH密钥文件

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

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

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

ssh‐keygen-tRSA-N''-f~/.ssh/id_rsa

45、检查特定的软件包是否已经安装

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

if[$#-eq0];then

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

echo"用法:$0软件包名称..."

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

forpackagein"$@"

ifrpm-q${package}&>/dev/null;then

echo-e"${package}\033[32m已经安装\033[0m"

echo-e"${package}\033[34;1m未安装\033[0m"

46、监控HTTP服务器的状态(测试返回码)

#监控HTTP服务器的状态(测试返回码)

#设置变量,url为你需要检测的目标网站的网址(IP或域名),比如百度

#‐o将curl下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)

date=$(date+%Y%m%d‐%H:%M:%S)

#生成报警邮件的内容

$url服务器异常,状态码为${status_code}.

#指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志

if[$status_code-ne200];then

sleep5

47、自动添加防火墙规则,开启某些服务或端口(适用于RHEL7)

#自动添加防火墙规则,开启某些服务或端口(适用于RHEL7)

#

#设置变量定义需要添加到防火墙规则的服务和端口号

#使用firewall‐cmd‐‐get‐services可以查看firewall支持哪些服务

port="80228080"

#循环将每个服务添加到防火墙规则中

foriin$service

echo"Adding$iservicetofirewall"

firewall‐cmd--add-service=${i}

#循环将每个端口添加到防火墙规则中

foriin$port

echo"Adding$iPorttofirewall"

firewall‐cmd--add-port=${i}/tcp

#将以上设置的临时防火墙规则,转换为永久有效的规则(确保重启后有效)

firewall‐cmd--runtime-to-permanent

48、使用脚本自动创建逻辑卷

#使用脚本自动创建逻辑卷

#清屏,显示警告信息,创建将磁盘转换为逻辑卷会删除数据

echo-e"\033[32m!!!!!!警告(Warning)!!!!!!\033[0m"

echo"+++++++++++++++++++++++++++++++++++++++++++++++++"

echo"脚本会将整个磁盘转换为PV,并删除磁盘上所有数据!!!"

echo"ThisScriptwilldestroyalldataontheDisk"

read-p"请问是否继续y/n:"sure

#测试用户输入的是否为y,如果不是则退出脚本

[$sure!=y]&&exit

read-p"请输入磁盘名称,如/dev/vdb:"disk

[-z$disk]&&echo"没有输入磁盘名称"&&exit

read-p"请输入卷组名称:"vg_name

[-z$vg_name]&&echo"没有输入卷组名称"&&exit

read-p"请输入逻辑卷名称:"lv_name

[-z$lv_name]&&echo"没有输入逻辑卷名称"&&exit

read-p"请输入逻辑卷大小:"lv_size

[-z$lv_size]&&echo"没有输入逻辑卷大小"&&exit

#使用命令创建逻辑卷

pvcreate$disk

vgcreate$vg_name$disk

lvcreate-L${lv_size}M-n${lv_name}${vg_name}

49、显示CPU厂商信息

#显示CPU厂商信息

awk'/vendor_id/{print$3}'/proc/cpuinfo|uniq

50、删除某个目录下大小为0的文件

#删除某个目录下大小为0的文件

#/var/www/html为测试目录,脚本会清空该目录下所有0字节的文件

dir="/var/www/html"

find$dir-typef-size0-execrm-rf{}\;

51、查找Linux系统中的僵尸进程

#查找Linux系统中的僵尸进程

#awk判断ps命令输出的第8列为Z是,显示该进程的PID和进程命令

psaux|awk'{if($8=="Z"){print$2,$11}}'

52、提示用户输入年份后判断该年是否为闰年

#提示用户输入年份后判断该年是否为闰年

#能被4整除并且并不能被100整除的年份是闰年

#能被400整除的年份也是闰年

read-p"请输入一个年份:"year

if["$year"=""];then

echo"没有输入年份"

#使用正则测试变量year中是否包含大小写字母

if[["$year"=~[a‐Z]]];then

echo"你输入的不是数字"

#判断是否为闰年

if[$[year%4]-eq0]&&[$[year%100]-ne0];then

echo"$year年是闰年"

elif[$[year%400]-eq0];then

echo"$year年不是闰年"

53、生成随机密码(urandom版本)

#生成随机密码(urandom版本)

#/dev/urandom文件是Linux内置的随机设备文件

#cat/dev/urandom可以看看里面的内容,ctrl+c退出查看

#查看该文件内容后,发现内容有些太随机,包括很多特殊符号,我们需要的密码不希望使用这些符号

#tr‐dc'_A‐Za‐z0‐9'

#该命令可以将随机文件中其他的字符删除,仅保留大小写字母,数字,下划线,但是内容还是太多

#我们可以继续将优化好的内容通过管道传递给head命令,在大量数据中仅显示头10个字节

#注意A前面有个下划线

tr-dc'_A‐Za‐z0‐9'

54、生成随机密码(字串截取版本)

#生成随机密码(字串截取版本)

#设置变量key,存储密码的所有可能性(密码库),如果还需要其他字符请自行添加其他密码字符

#使用$#统计密码库的长度

key="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

num=${#key}

#设置初始密码为空

pass=''

#循环8次,生成随机密码

#每次都是随机数对密码库的长度取余,确保提取的密码字符不超过密码库的长度

#每次循环提取一位随机密码,并将该随机密码追加到pass变量的最后

index=$[RANDOM%num]

pass=$pass${key:$index:1}

echo$pass

55、生成随机密码(UUID版本,16进制密码)

#生成随机密码(UUID版本,16进制密码)

uuidgen

56、生成随机密码(进程ID版本,数字密码)

#生成随机密码(进程ID版本,数字密码)

echo$$

57、测试用户名与密码是否正确

#测试用户名与密码是否正确

if["$user"=='tom'-a"$pass"=='123456'];then

echo"Loginsuccessful"

echo"LoginFailed"

58、循环测试用户名与密码是否正确

#循环测试用户名与密码是否正确

#用户名为tom并且密码为123456

foriin{1..3}

59、Shell脚本的fork炸弹

#Shell脚本的fork炸弹

#快速消耗计算机资源,致使计算机死机

#定义函数名为.(点),函数中递归调用自己并放入后台执行

.(){.|.&};.

60、批量下载有序文件(pdf、图片、视频等等)

#批量下载有序文件(pdf、图片、视频等等)

#本脚本准备有序的网络资料进行批量下载操作(如01.jpg,02.jpg,03.jpg)

echo"开始下载..."

type=jpg

echo"正在下载$i.$type"

curl$url/$i.$type-o/tmp/${i}$type

#curl使用-o选项指定下载文件另存到哪里.

61、显示当前计算机中所有账户的用户名称

#显示当前计算机中所有账户的用户名称

#下面使用3种不同的方式列出计算机中所有账户的用户名

#指定以:为分隔符,打印/etc/passwd文件的第1列

awk-F:'{print$1}'/etc/passwd

cut-d:-f1/etc/passwd

#使用sed的替换功能,将/etc/passwd文件中:后面的所有内容替换为空(仅显示用户名)

sed's/:.*//'/etc/passwd

62、制定目录路径,脚本自动将该目录使用tar命令打包备份到/data目录

#制定目录路径,脚本自动将该目录使用tar命令打包备份到/data目录

[!-d/data]&&mkdir/data

[-z$1]&&exit

if[-d$1];then

tar-czf/data/$1.-`date+%Y%m%d`.tar.gz$1

echo"该目录不存在"

63、显示进度条(回旋镖版)

#显示进度条(回旋镖版)

foriin{1..20}

echo‐e"\033[3;${i}H*"

sleep0.1

foriin{20..1}

64、安装LAMP环境(yum版本)

#安装LAMP环境(yum版本)

#本脚本适用于RHEL7(RHEL6中数据库为mysql)

yummakecache&>/dev/null

num=$(yumrepolist|awk'/repolist/{print$2}'|sed's/,//')

if[$num-lt0];then

yum-yinstallmariadbmariadb-servermariadb-devel

yum-yinstallphpphp-mysql

echo"未配置yum源..."

65、循环关闭局域网中所有主机

#循环关闭局域网中所有主机

#假设本机为192.168.4.100,编写脚本关闭除自己外的其他所有主机

#脚本执行,需要提前给所有其他主机传递ssh密钥,满足无密码连接

[$i-eq100]&&continue

echo"正在关闭192.168.4.$i..."

ssh192.168.4.$ipoweroff

66、获取本机MAC地址

#获取本机MAC地址

ipas|awk'BEGIN{print"本机MAC地址信息如下:"}/^[0‐9]/{print$2;getline;if($0~/link\/ether/){print$2}}'|grep-vlo:

#awk读取ip命令的输出,输出结果中如果有以数字开始的行,先显示该行的地2列(网卡名称),

#接着使用getline再读取它的下一行数据,判断是否包含link/ether

#如果保护该关键词,就显示该行的第2列(MAC地址)

#lo回环设备没有MAC,因此将其屏蔽,不显示

67、自动配置rsynd服务器的配置文件rsyncd.conf

#自动配置rsynd服务器的配置文件rsyncd.conf

#Seersyncd.confmanpageformoreoptions.

[!-d/home/ftp]&&mkdir/home/ftp

echo'uid=nobody

gid=nobody

usechroot=yes

maxconnections=4

pidfile=/var/run/rsyncd.pid

exclude=lost+found/

transferlogging=yes

timeout=900

ignorenonreadable=yes

dontcompress=*.gz*.tgz*.zip*.z*.Z*.rpm*.deb*.bz2

[ftp]

path=/home/ftp

comment=share'>/etc/rsyncd.conf

68、修改Linux系统的最大打开文件数量

#修改Linux系统的最大打开文件数量

#往/etc/security/limits.conf文件的末尾追加两行配置参数,修改最大打开文件数量为65536

cat>>/etc/security/limits.conf<

*softnofile65536

*hardnofile65536

69、设置Python支持自动命令补齐功能

#设置Python支持自动命令补齐功能

#Summary:Enabletabcompleteforpython

#Description:

Needsimportreadlineandrlcompletermodule

importreadline

importrlcompleter

help(rlcompleter)displaydetail:readline.parse_and_bind('tab:complete')

manpythondisplaydetail:PYTHONSTARTUPvariable

if[!-f/usr/bin/tab.py];then

cat>>/usr/bin/tab.py<

readline.parse_and_bind('tab:complete')

sed-i'$aexportPYTHONSTARTUP=/usr/bin/tab.py'/etc/profile

source/etc/profile

70、自动修改计划任务配置文件

#自动修改计划任务配置文件

read-p"请输入分钟信息(00‐59):"min

read-p"请输入小时信息(00‐24):"hour

read-p"请输入日期信息(01‐31):"date

read-p"请输入月份信息(01‐12):"month

read-p"请输入星期信息(00‐06):"weak

read-p"请输入计划任务需要执行的命令或脚本:"program

echo"$min$hour$date$month$weak$program">>/etc/crontab

71、使用脚本循环创建三位数字的文本文件(111-999的文件)

#使用脚本循环创建三位数字的文本文件(111-999的文件)

foriin{1..9}

forjin{1..9}

forkin{1..9}

touch/tmp/$i$j$k.txt

user=$(awk-F:'/bash$/{print$1}'/etc/passwd)

foriin$user

awk-F:-vx=$i'$1==x{print$1,$2}'/etc/shadow

73、统计/etc/passwd中root出现的次数

#统计/etc/passwd中root出现的次数

#每读取一行文件内容,即从第1列循环到最后1列,依次判断是否包含root关键词,如果包含则x++

awk-F:'{i=1;while(i<=NF){if($i~/root/){x++};i++}}END{print"root出现次数为"x}'/etc/passwd

running=0

sleeping=0

stoped=0

zombie=0

#在proc目录下所有以数字开始的都是当前计算机正在运行的进程的进程PID

forpidin/proc/[1‐9]*

procs=$[procs+1]

stat=$(awk'{print$3}'$pid/stat)

#每个pid目录下都有一个stat文件,该文件的第3列是该进程的状态信息

case$statin

R)

running=$[running+1]

T)

stoped=$[stoped+1]

S)

sleeping=$[sleeping+1]

Z)

zombie=$[zombie+1]

echo"进程统计信息如下"

echo"总进程数量为:$procs"

echo"Running进程数为:$running"

echo"Stoped进程数为:$stoped"

echo"Sleeping进程数为:$sleeping"

echo"Zombie进程数为:$zombie"

75、从键盘读取一个论坛积分,判断论坛用户等级

#从键盘读取一个论坛积分,判断论坛用户等级

#等级分类如下:

#大于等于90神功绝世

#大于等于80,小于90登峰造极

#大于等于70,小于80炉火纯青

#大于等于60,小于70略有小成

#小于60初学乍练

read-p"请输入积分(0‐100):"JF

if[$JF-ge90];then

echo"$JF分,神功绝世"

elif[$JF-ge80];then

echo"$JF分,登峰造极"

elif[$JF-ge70];then

echo"$JF分,炉火纯青"

elif[$JF-lt60];then

echo"$JF分,略有小成"

echo"$JF分,初学乍练"

76、判断用户输入的数据类型(字母、数字或其他)

#判断用户输入的数据类型(字母、数字或其他)

read-p"请输入一个字符:"KEY

case"$KEY"in

[a‐z]|[A‐Z])

echo"字母"

[0‐9])

echo"数字"

echo"空格、功能键或其他控制字符"

77、显示进度条(数字版)

#显示进度条(数字版)

#echo使用‐e选项后,在打印参数中可以指定H,设置需要打印内容的x,y轴的定位坐标

#设置需要打印内容在第几行,第几列

foriin{1..100}

echo-e"\033[6;8H["

echo-e"\033[6;9H$i%"

echo-e"\033[6;13H]"

78、打印斐波那契数列

#打印斐波那契数列(该数列的特点是后一个数字,永远都是前2个数字之和)

#斐波那契数列后一个数字永远是前2个数字之和

#如:011235813......

list=(01)

foriin`seq211`

list[$i]=`expr${list[‐1]}+${list[‐2]}`

echo${list[@]}

79、判断用户输入的是Yes或NO

#判断用户输入的是Yes或NO

read-p"Areyousure[y/n]:"sure

case$surein

y|Y|Yes|YES)

echo"youenter$a"

n|N|NO|no)

echo"error";;

80、显示本机Linux系统上所有开放的端口列表

#显示本机Linux系统上所有开放的端口列表

#从端口列表中观测有没有没用的端口,有的话可以将该端口对应的服务关闭,防止意外的攻击可能性

ss-nutlp|awk'{print$1,$5}'|awk-F"[:]"'{print"协议:"$1,"端口号:"$NF}'|grep"[0‐9]"|uniq

81、将Linux系统中UID大于等于1000的普通用户都删除

#将Linux系统中UID大于等于1000的普通用户都删除

#先用awk提取所有uid大于等于1000的普通用户名称

#再使用for循环逐个将每个用户删除即可

user=$(awk-F:'$3>=1000{print$1}'/etc/passwd)

userdel-r$i

82、使用脚本开启关闭虚拟机

#使用脚本开启关闭虚拟机

#脚本通过调用virsh命令实现对虚拟机的管理,如果没有该命令,需要安装libvirt‐client软件包

#$1是脚本的第1个参数,$2是脚本的第2个参数

#第1个参数是你希望对虚拟机进行的操作指令,第2个参数是虚拟机名称

list)

virshlist--all

virshstart$2

virshdestroy$2

enable)

virshautostart$2

disable)

virshautostart--disable$2

echo"Usage:$0list"

echo"Usage:$0[start|stop|enable|disable]VM_name"

cat<

#list显示虚拟机列表

#start启动虚拟机

#stop关闭虚拟机

#enable设置虚拟机为开机自启

#disable关闭虚拟机开机自启功能

83、调整虚拟机内存参数的shell脚本

#调整虚拟机内存参数的shell脚本

1.调整虚拟机最大内存数值

2.调整实际分配给虚拟机的内存数值

read-p"请选择[1‐2]:"select

read-p"请输入虚拟机名称"name

read-p"请输入最大内存数值(单位:k):"size

virshsetmaxmem$name--size$size--config

read-p"请输入实际分配内存数值(单位:k):"size

virshsetmem$name$size

echo"Error"

84、查看KVM虚拟机中的网卡信息(不需要进入启动或进入虚拟机)

#查看KVM虚拟机中的网卡信息(不需要进入启动或进入虚拟机)

#该脚本使用guestmount工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中

#Centos7.2中安装libguestfs‐tools‐c可以获得guestmount工具

#虚拟机可以启动或者不启动都不影响该脚本的使用

#将虚拟机磁盘文件挂载到文件系统后,就可以直接读取磁盘文件中的网卡配置文件中的数据

mountpoint="/media/virtimage"

[!-d$mountpoint]&&mkdir$mountpoint

read-p"输入虚拟机名称:"name

echo"请稍后..."

#如果有设备挂载到该挂载点,则先umount卸载

ifmount|grep-q"$mountpoint";then

umount$mountpoint

#只读的方式,将虚拟机的磁盘文件挂载到特定的目录下,这里是/media/virtimage目录

guestmount-r-d$name-i$mountpoint

echo"‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐"

echo-e"\033[32m$name虚拟机中网卡列表如下:\033[0m"

dev=$(ls/media/virtimage/etc/sysconfig/network‐scripts/ifcfg-*|awk-F"[/‐]"'{print$9}')

echo$dev

echo"+++++++++++++++++++++++++++++++++++++++++++"

echo-e"\033[32m网卡IP地址信息如下:\033[0m"

foriin$dev

echo-n"$i:"

grep-q"IPADDR"/media/virtimage/etc/sysconfig/network‐scripts/ifcfg-$i||echo"未配置IP地址"

awk-F='/IPADDR/{print$2}'/media/virtimage/etc/sysconfig/network-scripts/ifcfg-$i

85、不登陆虚拟机,修改虚拟机网卡IP地址

#不登陆虚拟机,修改虚拟机网卡IP地址

#该脚本使用guestmount工具,Centos7.2中安装libguestfs‐tools‐c可以获得guestmount工具

#脚本在不登陆虚拟机的情况下,修改虚拟机的IP地址信息

#在某些环境下,虚拟机没有IP或IP地址与真实主机不在一个网段

#真实主机在没有virt‐manger图形的情况下,远程连接虚拟机很麻烦

#该脚本可以解决类似的问题

read-p"请输入虚拟机名称:"name

ifvirshdomstate$name|grep-qrunning;then

echo"修改虚拟机网卡数据,需要关闭虚拟机"

virshdestroy$name

guestmount-d$name-i$mountpoint

read-p"请输入需要修改的网卡名称:"dev

read-p"请输入IP地址:"addr

#判断原本网卡配置文件中是否有IP地址,有就修改该IP,没有就添加一个新的IP地址

ifgrep-q"IPADDR"$mountpoint/etc/sysconfig/network‐scripts/ifcfg‐$dev;then

sed-i"/IPADDR/s/=.*/=$addr/"$mountpoint/etc/sysconfig/network‐scripts/ifcfg‐$dev

echo"IPADDR=$addr">>$mountpoint/etc/sysconfig/network‐scripts/ifcfg‐$dev

#如果网卡配置文件中有客户配置的IP地址,则脚本提示修改IP完成

awk-F=-vx=$addr'$2==x{print"完成..."}'$mountpoint/etc/sysconfig/network‐scripts/ifcfg-$dev

86、破解虚拟机密码,无密码登陆虚拟机系统

#破解虚拟机密码,无密码登陆虚拟机系统

echo"破解,需要关闭虚拟机"

#将passwd中密码占位符号x删除,该账户即可实现无密码登陆系统

sed-i"/^root/s/x//"$mountpoint/etc/passwd

87、Shell脚本对信号的处理,执行脚本后,按键盘Ctrl+C无法终止的脚本

#Shell脚本对信号的处理,执行脚本后,按键盘Ctrl+C无法终止的脚本

#使用trap命令可以拦截用户通过键盘或kill命令发送过来的信号

#使用kill‐l可以查看Linux系统中所有的信号列表,其中2代表Ctrl+C

#trap当发现有用户ctrl+C希望终端脚本时,就执行echo"暂停10s";sleep10这两条命令

#另外用户使用命令:[kill‐2脚本的PID]也可以中断脚本和Ctrl+C一样的效果,都会被trap拦截

trap'echo"暂停10s";sleep10'2

echo"gogogo"

88、一键部署memcached

#一键部署memcached

#脚本用源码来安装memcached服务器

#注意:如果软件的下载链接过期了,请更新memcached的下载链接

yum-yinstallgcc

tar-xfmemcached‐1.5.1.tar.gz

cdmemcached‐1.5.1

89、一键配置VNC远程桌面服务器(无密码版本)

#一键配置VNC远程桌面服务器(无密码版本)

#脚本配置的VNC服务器,客户端无需密码即可连接

#客户端仅有查看远程桌面的权限,没有鼠标和键盘的操作权限

rpm--quiet-qtigervnc‐server

yum-ytigervnc‐server

x0vncserverAcceptKeyEvents=0AlwaysShared=1\

AcceptPointerEvents=0SecurityTypes=Nonerfbport=5908

90、关闭SELinux

#关闭SELinux

sed-i'/^SELINUX/s/=.*/=disabled/'/etc/selinux/config

setenforce0

91、查看所有虚拟机磁盘使用量以及CPU使用量信息

#查看所有虚拟机磁盘使用量以及CPU使用量信息

virt‐df

read-n1"按任意键继续"key

virt‐top

92、使用shell脚本打印图形

#使用shell脚本打印如下图形:

#打印第一组图片

#for(())为类C语言的语法格式,也可以使用foriin;do;done的格式替换

#for((i=1;i<=9;i++))循环会执行9次,i从1开始到9,每循环一次i自加1

for((i=1;i<=9;i++))

for((j=1;j<=i;j++))

echo-n"$i"

echo""

#打印第二组图片

for((i=1;i<=5;i++))

echo-n"|"

echo"_"

#打印第三组图片

echo-n"*"

for((i=5;i>=1;i‐‐))

#00‐12点为早晨,12‐18点为下午,18‐24点为晚上

tm=$(date+%H)

if[$tm-le12];then

msg="GoodMorning$USER"

elif[$tm-gt12-a$tm-le18];then

msg="GoodAfternoon$USER"

msg="GoodNight$USER"

echo-e"\033[34m$msg\033[0m"

94、读取用户输入的账户名称,将账户名写入到数组保存

#读取用户输入的账户名称,将账户名写入到数组保存

#定义数组名称为name,数组的下标为i,小标从0开始,每输入一个账户名,下标加1,继续存下一个账户

#最后,输入over,脚本输出总结性信息后脚本退出

i=0

read-p"请输入账户名,输入over结束:"key

if[$key=="over"];then

break

name[$i]=$key

echo"总账户名数量:${#name[*]}"

echo"${name[@]}"

95、判断文件或目录是否存在

#判断文件或目录是否存在

echo"未输入任何参数,请输入参数"

echo"用法:$0[文件名|目录名]"

if[-f$1];then

echo"该文件,存在"

ls-l$1

echo"没有该文件"

echo"该目录,存在"

ls-ld$2

echo"没有该目录"

echo"显示星期简称(如:Sun)"

date+%a

echo"显示星期全称(如:Sunday)"

date+%A

echo"显示月份简称(如:Jan)"

date+%b

echo"显示月份全称(如:January)"

date+%B

echo"显示数字月份(如:12)"

date+%m

echo"显示数字日期(如:01号)"

date+%d

echo"显示数字年(如:01号)"

date+%Yecho"显示年‐月‐日"

date+%F

echo"显示小时(24小时制)"

date+%H

echo"显示分钟(00..59)"

date+%M

echo"显示秒"

date+%S

echo"显示纳秒"

date+%N

echo"组合显示"

date+"%Y%m%d%H:%M:%S"

97、使用egrep过滤MAC地址

#使用egrep过滤MAC地址

#MAC地址由16进制组成,如AA:BB:CC:DD:EE:FF

#[0‐9a‐fA‐F]{2}表示一段十六进制数值,{5}表示连续出现5组前置:的十六进制

egrep"[0‐9a‐fA‐F]{2}(:[0‐9a‐fA‐F]{2}){5}"$1

98、统计双色球各个数字的中奖概率

#统计双色球各个数字的中奖概率

#往期双色球中奖号码如下:

#01041128313216

#04070818232402

#02050616282904

#04192227303301

#05101819303103

#02061112192906

#统计篮球和红球数据出现的概率次数(篮球不分顺序,统计所有篮球混合在一起的概率)

awk'{print$1"\n"$2"\n"$3"\n"$4"\n"$5"\n"$6}'1.txt|sort|uniq-c|sort

awk'{print$7}'1.txt|sort|uniq-c|sort

99、生成签名私钥和证书

#生成签名私钥和证书

read-p"请输入存放证书的目录:"dir

if[!-d$dir];then

read-p"请输入密钥名称:"name

#使用openssl生成私钥

opensslgenrsa-out${dir}/${name}.key

#使用openssl生成证书#subj选项可以在生成证书时,非交互自动填写CommonName信息

opensslreq-new-x509-key${dir}/${name}.key-subj"/CN=common"-out${dir}/${name}.crt

100、使用awk编写的wc程序

#使用awk编写的wc程序

#自定义变量chars变量存储字符个数,自定义变量words变量存储单词个数

#awk内置变量NR存储行数

#length()为awk内置函数,用来统计每行的字符数量,因为每行都会有一个隐藏的$,所以每次统计后都+1

#wc程序会把文件结尾符$也统计在内,可以使用cat‐A文件名,查看该隐藏字符

awk'{chars+=length($0)+1;words+=NF}END{printNR,words,chars}'$1

THE END
1.双色球论坛,双色球,乐彩论坛乐彩双色球论坛汇集双色球名家,民间高手提供原创双色球预测,双色球分析,众家谈实时交流,双色球擂台https://h5.bbs.17500.cn/forum/2?typeid=9
2.浙江体彩浙江福彩双色球开奖结果彩票攻略浙江体彩,浙江福彩专业论坛,包含了各类彩票,双色球,福彩3D,超级大乐透,体彩排列3开奖结果分析[第1页]https://www.19lou.com/forum-1291-1.html
3.双色球双色球由中福彩中心发行和组织销售,由各省福彩机构在所辖区域内销售。采用计算机网络系统发行,在各省福彩机构设置的销售网点销售,每周二、周四、周日开奖。双色球投注区分为红色球号码区和蓝色球号码区,红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。投注时选择6个红色球号码和1个蓝https://www.cwl.gov.cn/fcpz/yxjs/ssq
4.hntcsh.com/xxxr68003885.htm本期双色球开奖号码 98.87MB 68%好评351人) 日韩大奶一区二区三区 白丝美女足交口交自慰 国产成人免费ā片在线观看 43.91MB 55%好评28人) 熟妇少妇av 美好奶头100% 中国少妇脚交 37.68MB 08%好评469人) 我要看黄色A级斤日B好看的一级毛片 操逼射精视频 日本欧亚州色噜噜视频 15.35MBhttp://hntcsh.com/xxxr68003885.htm
5.mhfx.menhoo.cn/apfccd98815831/946428【双色球开机号】双色球开机号查询_双色球开机号分析_双色_证券之星 702.56MB 3960好评 免费黄色视频播放器哪里有 《真人实拍女处被破www免费看》高清不卡在线观看 澳门2023最新开奖结果 997.92MB 674好评 空组艳谭1991完整版在线看片 色欲日日拍夜夜嗷嗷叫APP 极致体验!黄品汇——Windows软件安装包http://mhfx.menhoo.cn/apfccd98815831/946428
6.www.zhengyide.cn/xxxr14348477.shtml昨天,记者在多个酒店预订平台搜索发现,位于北京核心地段或景区周边的经济型连锁酒店,价格高的已经达到700元左右,例如汉庭酒店(北京水立方店)本周末价格达每晚724元,最贵的更是达到千元,如家商旅酒店(北京前门地铁站北京坊店)8月的安睡双床房价格一度高达每晚1038元。如果避开这些热门区域,经济型连锁酒店价格多在四五http://www.zhengyide.cn/xxxr14348477.shtml
7.彩吧彩吧网提供3d试机号排列三试机号3d图库开机号双色球论坛 一语断蓝|全国联销|欧阳小文|双色球字谜|字谜总汇|综合分析|彩民乐|双色球阳光探|山鹰|定红|定蓝|匡吉 双色球预测 双色球字谜 双色球杀号 双色球定胆 [更多] 双色球24140期红孩儿心水2蓝推荐12-05 双色球24140期 博蓝王蓝码推荐12-05 https://www.55125.cn/?_t_t_t=0.8442117420490831
8.牛彩网首页双色球 12-3 2024139期 15 16 20 22 23 29 14 奖池:22亿1912万 走势 详情 预测 专家 大乐透 12-4 24141期 02 06 07 16 20 02 11 奖池:9亿6680万 走势 详情 预测 专家 福彩3D 12-4 2024325期 1 5 8 走势 详情 预测 专家 排列3/5 12-4 24325期 0 2 3 0 7 走势 详情 预测 专家 https://www.cz89.com/
9.3D之家福彩3D开奖结果3D试机号走势图字谜分析双色球预测 双色球精准红球 更多>> 双色球2024140期名家精选号码推荐总汇 2024140期双色球历史上的今天开奖号码 双色球2024140期马哥精选一注号码参考 双色球2024140期文彬今日大复式参考 双色球2024140期刘胜缩水大复式参考 双色球2024140期威哥历史同期定位分析 https://www.ssqzj.com/?_t=b1579181347
10.84995澳门论坛王中王l,逻辑解释落实移动增强版32.48.4584|995澳门论坛王中王l,逻辑解释落实_移动增强版32.48.45 数学作为一门研究数量、结构、变化以及空间等概念的学科,其价值核心在于提供了精准的数据分析和推理能力。随着移动增强版32.48.45的推出,数学在现代社会中的应用得到了进一步的加强和拓展。本文将重点介绍数学在头部精准数据的应用、实现方式、具体应用场景以及逻辑http://www.xjche365.com/dodoc/baoji/396582.html
11.福彩3D字谜3D和值字谜3D字迷解释福彩3D字谜汇总P3杀码P3条件P3试机号P3开奖结果 双色球预测双色球杀号双色球胆码双色球字图 双色球条件双色球开机号双色球走势图双色球开奖 大乐透预测大乐透胆码大乐透杀号大乐透开奖 七乐彩预测七乐彩杀号七乐彩技巧七乐彩开奖 七星彩预测七星彩图谜七星彩杀号七星彩开奖https://www.800820.net/3d/list_8.html?tmsp=2.39292812398210996
12.www.yaohaigou.com/xxxr68404890.shtml大乐透双色球开奖结果 46.76MB 12%好评9516人) Chinese老熟妇乱伦 电梯小姐在线免费 牛仔裤不强奸电影 29.44MB 78%好评296人) 猛曰美女鲁片 手机看AV女优在线 越南被黑人内射 89.05MB 88%好评1407人) www少妇网 我和麻麻啪啪小说合集 黄色成人毛片 74.08MB 22%好评416人) 国产18岁美女尿口http://www.yaohaigou.com/xxxr68404890.shtml
13.www.zboht.com/yyys/202411性爱片大尺度无码 我爱原味论坛52yuanwei l激情毛片小说 筋肉雄汁GAY雄汁外送l 人与马成人黄色一级片 中国黄片毛片 美女黄网站 苍井空五十分钟 色综合久久久 色欲香影视综合 黄色网站看看中文的 小骚逼一边玩王者荣耀一边让我用力操她 人人爽人人插人人肏人人黄片 日本黄色人妻AAAAA 北岛玲淫荡的视频在线观https://www.zboht.com/yyys/2024-11-15/75950972
14.香港彩走势热门推荐 3D走势图 3D开奖结果 3D试机号 3D试后预测 双色球走势图 双色球开奖结果 大乐透走势图 大乐透开奖结果 广东11选5走势图 排列三走势图 排列三开奖结果 排列三试机号 七星彩走势图 排列五走势图 排列五开奖结果 七星彩开奖结果 七乐彩走势图 七乐彩开奖结果 https://www.55128.cn/zs/223_2061.htm
15.web.gz91人妻互换l论坛九色 605.45MB 9540好评 美女插逼视频p 埃及猫和小男孩躺着享受_第一财经 舔足游戏 762.08MB 863好评 幻星辰2021无砖专区黑星介绍 最美情侣2019中文版 公车上玩两个处 790.74MB 018好评 渣男和渣女在一起抹胸 番号sw269 俄罗斯人与物动性XXXXX 49.55MB 3053好评 3级黄色网http://web.gz-guangju.com/nodenews/57692229.shtml
16.web.zhengshunboli.com/nodenews/14254092.shtml「双色球开机号」今天_双色球开机号查询_双色球开机号近10_看看新闻网网 FrXXee中国XXee宾馆 神探狄仁杰第六部 老局长疯狂泄欲小说 把女的弄的第二天走不了路 欧美乱码1卡2卡三卡4卡 jdgx五十到六十多岁女 屈辱的性奴母畜小说 泳池里强摁做开腿啊 好多骚水真紧公交车 玄武娱乐 雀7IIII2扣长http://web.zhengshunboli.com/nodenews/14254092.shtml
17.lanxiang.0719cm.net/mmmj18449908/905857.htm双色球搜索一下香港三级片手机pp 38.34MB 54好评 狠狠操麻豆网 男女做哎爱过程图片 羞羞漫画官方登录页面免费漫画入口下载 93.84MB 290好评 美女和男生一起打扑克牌视频 陪读偷伦初尝小说 japantickle瘙痒拷问IVK 22.17MB 4816好评 闺房床榻粗喘H冉玥灵 国产一区二区三区水野朝阳 得得爱免费 https://lanxiang.0719cm.net/mmmj18449908/905857.htm
18.mm.szyikao.com/yyys/18712475.html双色球黄色电影片,不再见一片 黄色网站高清wwww 7天前 日本裸乳tickle痒罚Vk 亚洲免费AⅤ 3天前 特一级黄片 免费一级婬片AA70岁老人 9天前 香蕉视频欧美啊啊 ASSFree老女人 0天前 午夜激情片AⅤ无码 91丨九色丨熟女高潮 5天前 久久久久久成人热精品小说 翁吻乳婷婷小玲21章小莹 8天前 1000部http://mm.szyikao.com/yyys/18712475.html
19.xxadminapi.yhryj.com/kpf84373896.shtml日韩欧美一区二区中文字幕 精品人妻一区二区三区午夜四季av双色球 可以免费播放黄色视频网站 幼儿hiphop张婉莹仙踪网 华人被黑人粗大猛然进出到 中文又粗又黄又大又爽 4G玉蒲团奶水都喷出来了哺乳期 九婷av 美女曹鸡巴 公司出轨少妇:好痒呀··嗯喔嗯··喔··慢一点,我受 变形金刚 火影忍者 https://xxadminapi.yhryj.com/kpf84373896.shtml
20.dongjidi.cn/xxxr24363120.shtml色噜噜亚洲丰满熟妇AV片 殴美最猛性Ⅹ乂乂乂 成人18黄色视频下载 欧美女自慰国产网站 天天夜夜操恨恨操2020 亚洲成人人妻嗯嗯啊啊 人C交222o00zZZ00 舌L子伦熟妇αV 国语版国产免费黄色片 日来少妇aa一级毛片视频 比比东隐私视频免费网站 国产对白乱轮 女人脱精光让人桶爽的图片 双色球求黄色网站 http://dongjidi.cn/xxxr24363120.shtml
21.szsdjd.com.cn/xxxr97278017本期双色球开奖号码 61.07MB 98%好评28人) 翔田千里毛片基地 日韩特级毛片免费播放 全职法师真人版(色) 72.61MB 06%好评15人) 13一级毛片 艹逼男女 一级性生活黄色片子 94.30MB 56%好评8110人) 三级黄色视频 我和上司操逼高潮视频 欧美熟妇黑人ⅩXXXXX 23.01MB 83%好评293人) 日本的http://szsdjd.com.cn/xxxr97278017
22.一不小心养个魔头欧美99久久无色码中文字幕 99re8这里有精品热视频 免费自慰漫画 409.89MB 791好评 色色视频入桃桃 苏畅畅子1080P 肉欲横流在线观看 10.40MB 756好评 同桌插阴道小说 女生让男生随便玩己的坤坤视频 国内在钱 186.11MB 922好评 欧美三曰本三级少妇三2023 http://ak.akvtc.cn/moksolo/22975.htm
23.jiyinke.com/mmmj07698194.shtml如何玩自己的p眼 XXXXXL19D18用户评价双色球 大黄号女黄人手机福利视频 qvod午夜 美女菊花洞 小奶狗APP福引导2021 俄罗斯牛or猪or狗 四虎最新网站是多少贴吧 日韩欧美一区二区中文字幕 美女露胸视频无套内射 极悦注册 个7IIII2扣信用好 人妻爆乳三级AV 黑人强奸处女视频 日本牲交XXXX 熟女久久久久 日http://jiyinke.com/mmmj07698194.shtml
24.我有一卦六,双插狂操女的视频,,爱爱帝国社区偷拍 七,台湾swag沐沐知名百货 【联系我们】 客服热线:133-2881-646 加载更多 版本更新 V4.1.17 美美裸图 麻豆小凤新婚。。 jzz大全 嗯~啊~啊~嗯~啊~AAAA日本 重口味打肉洞狗交配人 99久热视 世子粗棒猛插嫩穴 http://crm.qcgips.cn/public/static/fiem.php/mokied/934084.html