admin管理员组

文章数量:1568354

Shell脚本50例-持续更新建议收藏

    • 不来点干货,这粉上不去呀
    • 可以直接前往我的码云地址里clone脚本-->shell脚本进阶<--
    • 01--利用xinput禁用及启用某设备.sh
    • 02--快速配置本地yum源.sh
    • 03--项目现场补丁安装.sh
    • 04--修改系统时间.sh
    • 05--同时ping多个IP.sh
    • 06--vnc一键配置.sh
    • 07--每隔X秒记录占内存高进程.sh
    • 08--清理旧的日志-按日志大小.sh
    • 09--清理旧的日志-按日志行数.sh
    • 10--监控内存容量并报警.sh
    • 11--快速收集日志到tar包.sh
    • 12--库状态一键查看.sh
    • 13--每隔X秒记录占cpu高进程并记录线程数.sh
    • 14--批量创建用户.sh
    • 15--循环ping以测试网络的连通性.sh
    • 16--批量分发文件到其他联网机器.sh
    • 17--bond配置_nmcli版.sh
    • 18--bond配置_改配置文件版.sh
    • 19--bond配置_ifenslave版.sh
    • 20--监控另一程序是否运行.sh
    • 21--循环ping测试网络连通性_简易版.sh
    • 22--记录某磁盘分区的io相关信息到日志.sh
    • 23--安全配置.sh
    • 24--快速占用cpu并持续高占用.sh
    • 25--批量配置机器间免密.sh
    • 26--使用logrotate对日志大小限制.sh
    • 27--监控cpu温度.sh
    • 28--监控进程打开文件数以及对应线程数.sh
    • 29--system-log-collection-reference.sh
    • 30--判断ip地址的合法性.sh
    • 31--重启测试脚本_简易版.sh
    • 32--向指定终端输出内容报警.sh
    • 33--快速启动httpd服务共享文件.sh
    • 34--iso文件生成.sh
    • 35--压缩解压工具集成.sh
    • 36--磁盘.sh
    • 37--monitor_another_top.sh
    • 38--monitor_another_dmesg.sh
    • 39--设置显示屏左右位置.sh
    • 40--不息屏脚本_鼠标定时移动规避.sh
    • 41--蓝屏规避脚本.sh
    • 42
    • 43--BootReplace.sh
    • 44--BootTest.sh
    • 45--LongTestTools.sh
    • 46--RebootReplace.sh
    • 47--RebootTest.sh
    • 48--SleepTest.sh
    • 49--SuspendTest.sh
    • 50--终极脚本-将所有脚本一键复制到博客.sh

不来点干货,这粉上不去呀

可以直接前往我的码云地址里clone脚本–>shell脚本进阶<–

01–利用xinput禁用及启用某设备.sh

#!/bin/bash
#脚本功能:该脚本可以识别到哪个是USB鼠标设备,然后将其禁用(可用作测试),可以参考这个脚本禁用、启用其他设备
#脚本思路:利用grep过滤,使用awk提取出id号,然后执行命令将其禁用,之所以不直接根据id禁用某设备,是因为插拔设备后id可能会变化,但是设备名一般不变
#使用方法:修改grep后的关键字,确保能“唯一识别”欲禁设备
#使用环境:不限
#脚本编写:徐金宝--国防事业本部
USB_Mouse=`xinput | grep Mouse | grep USB | awk -F "id=" '{print $2}' | awk '{print $1}'`
				#后边的两个awk是用来提取id的,所以请保证前边的grep能唯一过滤出想要的一行设备
xinput set-int-prop $USB_Mouse "Device Enabled" 8 0
#xinput set-int-prop $USB_Mouse "Device Enabled" 8 1			#某尾为1表示启用

02–快速配置本地yum源.sh

#!/bin/bash
#脚本功能:一键配置本地yum源
#脚本思路:该脚本会自动检测挂载,然后在挂载路径下搜寻repodata的路径,将其父路径设置为temp.repo的url,并展示出基本信息和包数量
#使用方法:非交互式脚本。使用时如果自动识别的挂载路径有问题时,此脚本便不可运行
#使用环境:R系操作系统
#脚本编写:徐金宝--国防事业本部

URL=/etc/yum.repos.d/

if [ $# == 0 ]
then
        a=`lsblk | grep sr0 | awk '{print $7}'`
        ls $a &> /dev/null
        if [ $? -eq 0 ]
        then
                b=`find $a -name repodata`
                c=`echo $b | awk -F '/repodata' '{print $1}'`
                mkdir $URL/bak
                mv $URL/*.repo /$URL/bak
                touch $URL/temp.repo
                echo '[temp]' > $URL/temp.repo
                echo 'name=temp' >> $URL/temp.repo
                echo "baseurl=file://$c" >> $URL/temp.repo
                echo "gpgcheck=0" >> $URL/temp.repo
                echo "enabled=1" >> $URL/temp.repo
                yum clean all
                yum makecache
                yum repolist
        else
                echo "自动识别到路径$a,但是此路径似乎有问题,请检查一下!"
        fi
else
        ls "$1" &> /dev/null
        if [ $? == 0 ]
        then
                mkdir $URL/bak
                mv $URL/*.repo /$URL/bak
                touch $URL/temp.repo
                echo '[temp]' > $URL/temp.repo
                echo 'name=temp' >> $URL/temp.repo
                echo "baseurl=file://'$1'" >> $URL/temp.repo
                echo "gpgcheck=0" >> $URL/temp.repo
                echo "enabled=1" >> $URL/temp.repo
                yum clean all
                yum makecache
                yum repolist
        else
                echo "运行脚本时,添加的yum源路径不存在"
        fi
fi

03–项目现场补丁安装.sh

#!/bin/bash
#脚本功能:一次给系统安装多种类型的补丁,并可以附带上其他操作
#脚本思路:封装多个函数,每个函数对应一个补丁的升级,定义的函数可以在后面随意调用
#使用方法:执行脚本后,会罗列出相应的选项,根据自己需要可以单独就某一个方面做补丁改动。函数体内的内容可以自行修改
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

#给系统升级SP1补丁
function sp1()
{
read -p"是否要升级SP1补丁,回复yes或者no:" g
if [ $g = yes ] || [ $g = y ]
then
        cd 1207-X7-SP1
        chmod +x NeoKylin-Server-5.0_U3-loongson-Release-Build14-X7-SP1-20200810.run
        ./NeoKylin-Server-5.0_U3-loongson-Release-Build14-X7-SP1-20200810.run
        for i in {1..10}
        do
                echo "你已经成功的升级了SP1补丁"
        done
        cd ..
else
        echo "你跳过了安装SP1补丁的操作!!!"
fi
}

#给系统去掉未授权
function authorize()
{
read -p"是否决定去掉系统未授权?回复yes或者no:" f
if [ $f = yes ] || [ $f = y ]
then
        cd NeoKylin_tt
        chmod +x NeoKylin-Server-5.0_U3-loongson_64-Release-B14-12X7_XYC_Activate-20200819.run
        ./NeoKylin-Server-5.0_U3-loongson_64-Release-B14-12X7_XYC_Activate-20200819.run
        for i in {1..10}
        do
                echo "你已经成功的把系统未授权信息给去除"
        done
        cd ..
else
        echo "你跳过了去掉系统未授权这一步操作!!!"
fi
}

#将有关lightdm-gtk的两个包降级
function lightdm()
{
read -p"是否确定要降级lightdm,回复yes或者no:" h
if [ $h = yes ] || [ $h = y ]
then
        cd lightdm-gtk
        rpm -Uvh lightdm-gtk-* --oldpackage
        rpm -qa | grep lightdm-gtk
        cd ..
else
        rpm -qa | grep lightdm-gtk
fi
}

#提醒把系统休眠相关的状态全部清除
function warn()
{
for i in {1..10}
do
        echo "记得检查系统,关闭一切休眠待机状态!"
done
}

#安装中标普华办公软件
function office()
{
read -p"是否确定要卸载旧的中标普华office并安装最新版的中标普华?" l
if [ $l = yes ] || [ $l = y ]
then
        yum remove neoshineoffice*
        cd zh-CN/neoshineoffice/data
        rpm -ivh *.rpm
        cd ../../../
        cp -r zh-CN/neoshineoffice/icons/libswofdsdk.so /usr/lib/
else
        echo "你跳过了安装最新版中标普华的步骤"
fi
}


j=${j:=0}
while [ $j != "exit" ]
do
        echo -e '\n有以下内容可以实现,请看清楚后决定选择哪项执行!'
        echo "1、修改系统时间"
        echo "2、升级系统SP1补丁包"
        echo "3、给系统去掉未授权"
        echo "4、给lightdm降级"
        echo "5、安装中标普华office"
        echo -e '如果需要退出脚本请输入exit'

        read -p"请输入你想要执行的步骤(只输入数字编号):" k
        echo -e '\n'
        if [ $k = 1 ]
        then
                changetime
        elif [ $k = 2 ]
        then
                sp1
        elif [ $k = 3 ]
        then
                authorize
        elif [ $k = 4 ]
        then
                lightdm
        elif [ $k = 5 ]
        then
                office
        else
                echo "你没有输入任何数字"
        fi
        j=$k
done

sp1
authorize
lightdm
office
warn

04–修改系统时间.sh

#!/bin/bash
#脚本功能:给系统修改日期和时间,此脚本可以添加在其他对时间有要求的脚本前面(比如系统授权等)
#脚本思路:更改系统日期和时间采用date -s的方式,封装一个函数,后面调用,想怎么用看自己发挥
#使用方法:执行脚本会有read -p提示,然后对应输入相应的信息进行修改
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

#两层if嵌套是判断系统时间是否想要的正确的时间,如果是则往下进行,如果不是则进行相应的时间设置
function changetime()
{
date
read -p"是否确定当前系统时间是正确的,回复yes或者no:" a
if [ $a = yes ] || [ $a = y ]
then
        echo  "现在开始进行其他配置"
else
        echo -e '你判定系统时间并非是自己想要的时间,接下来开始进行修改'
        read -p"日期是正确的吗,如果正确则回复yes,以便直接配置时间,回复其他则将日期与时间>一起修改:" b
        if [ $b = yes ] || [ $b = y ]
        then
                lsl 2> /dev/null
                until [ $? = 0 ]
                do
                        read -p"请输入想要修改的时间,请注意格式为XX:XX:XX   " c
                        date -s $c
                done
                for i in {1..10}
                do
                        date
                done
        else
                lsl 2> /dev/null
                until [ $? = 0 ]
                do
                        read -p"先修改日期,注意日期格式为XXXX/XX/XX   " d
                        date -s $d
                done
                lsl 2> /dev/null
                until [ $? = 0 ]
                do
                        read -p"现在修改时间,注意时间格式为XX:XX:XX   " e
                        date -s $e
                done
                for i in {1..10}
                do
                        date
                done
        fi
fi
}

changetime

05–同时ping多个IP.sh

#!/bin/bash
#脚本功能:可以打开多个标签,同时ping多个IP
		#批产车项目有的兵哥哥会希望有此功能,方便提前把一堆要ping的ip在列表里存好,用时直接ping即可
#脚本思路:通过循环,读取IP_list文件里的IP,每有一个IP就打开一个标签并执行ping命令
#使用方法:此脚本所在的目录下,需要有一个IP_LIST文件,文件中按行写入IP,ping时执行脚本即可
#使用环境:系统环境下需要保证mate-terminal可以调出,有的系统环境是gnome-terminal
#脚本编写:徐金宝--国防事业本部

for i in $(cat IP_LIST)
do
	mate-terminal --tab -x bash -c "echo 'ping $i';ping $i;exec bash"
done

06–vnc一键配置.sh

#!/bin/bash
#脚本功能:该该脚本传远端机器,并在远端运行,可以将vnc打开
#脚本思路:gsettngs设置vino的配置
#使用方法:将该脚本通过scp命令拷贝到远程主机,然后ssh -X root@IP	连接上远程主机,执行这个脚本即可在远程主机完成远程登录的授权
#使用环境:系统版本为kylin-5.0-B014(其他版本是否可用没有测验)
#脚本编写:徐金宝--国防事业本部

/usr/libexec/vino-server &
#export DISPLAY=:0.0

gsettings set org.gnome.Vino enabled true			#允许其他人查看您的桌面->勾选
gsettings set org.gnome.Vino view-only false			#允许其他用户控制您的桌面->勾选
gsettings set org.gnome.Vino prompt-enabled false		#您必须为本机器确认每次访问->取消勾选
gsettings set org.gnome.Vino authentication-methods "['none']"	#要求用户输入此密码->取消勾选
gsettings set org.gnome.Vino icon-visibility "'client'"		#显示通知区域图标->选择只在有用户连接时
#gsettings set org.gnome.Vino icon-visibility "'always'"		#显示通知区域图标->选择总是
#gsettings set org.gnome.Vino icon-visibility "'never'"		#显示通知区域图标->选择从不

#gsettings set org.gnome.Vino authentication-methods "['vnc']" / "['none']"	#需要密码/不需要密码
#gsettings set org.gnome.Vino vnc-password "'MQ=='"		#代表设置的密码

systemctl stop firewalld		#关闭防火墙
systemctl disable firewalld		#关闭防火墙开机自启

07–每隔X秒记录占内存高进程.sh

#!/bin/bash
#脚本功能:该脚本可以每隔一段时间记录一次占内存高的进程写在日志里
#脚本思路:使用ps查进程并跟管道进行过滤,只统计占的高的前40个进程,里边使用了死循环,目的就是记录内存变化规律
#使用方法:可以执行此脚本并加&符号,放在后台执行,另开一个终端输入tail -f /var/log/memory_percent查看这个日志里最新追加的信息
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

while :
do
        ps auxw | head -1 | >> /var/log/memory_percent
        ps auxw | sort -rn -k4 | head -40 >> /var/log/memory_percent
        echo -e "\n" >> /var/log/memory_percent
        echo -e "\n" >> /var/log/memory_percent
        echo -e "\n" >> /var/log/memory_percent
        sleep 10
done

08–清理旧的日志-按日志大小.sh

#!/bin/bash
#脚本功能:根据指定大小截断日志文件,保留截断后的最新的日志
#脚本思路:使用split截断工具
#使用方法:放到rc.local里,每次开机的时候执行一次
#使用环境:无校准时钟时使用
#脚本编写:徐金宝--国防事业本部

LogName=/var/log/syslog		#日志路径
TempUrl=/tmp			#临时目录

sudo cd /tmp
sudo split -b 500M -d $LogName label_
count=00
for i in `ls | grep label_`
do
	j=${i:6:2}
	if [ $j -gt $count ]
	then
		count=$j
	fi
done
sudo more label_$count > $LogName
sudo rm -rf $TempUrl/label_*

<< EOF
为什么不使用logrotate进行日志管理?是因为:
先前接触的工作环境是这样的:客户的机器因为要上飞机,没有硬件时钟可以为之校时,也没有网络为之校时,而logrotate是依据时间进行日志轮转的
若崩溃的程序不间断的往日志里打印日志,就可能会出现一定时间内日志爆满的情况,从而因为这个带来黑屏等其他问题
#使用logrotate进行日志管理请参见第26个脚本
EOF

09–清理旧的日志-按日志行数.sh

#!/bin/bash
#脚本功能:保留日志文件的最新的xxx行
#脚本思路:使用more配合管道以及tail截取最新xxx行再覆盖掉原文件
#使用方法:放到rc.local里,每次开机的时候执行一次
#使用环境:无校准时钟时使用
#脚本编写:徐金宝--国防事业本部

LogName=/var/log/syslog
TempUrl=/tmp

sudo more $LogName | tail -99999 > $TempUrl/temp.txt
sudo more $TempUrl/temp.txt > $LogName
sudo rm -rf $TempUrl/temp.txt

<< EOF
为什么不使用logrotate进行日志管理?是因为:
先前接触的工作环境是这样的:客户的机器因为要上飞机,没有硬件时钟可以为之校时,也没有网络为之校时,而logrotate是依据时间进行日志轮转的
若崩溃的程序不间断的往日志里打印日志,就可能会出现一定时间内日志爆满的情况,从而因为这个带来黑屏等其他问题
#使用logrotate进行日志管理请参见第26个脚本
EOF

10–监控内存容量并报警.sh

#!/bin/bash
#脚本功能:监控内存容量,如果小于指定值,则进行报警
#脚本思路:从df里提取信息,用判断触发报警
#使用方法:
#使用环境:不限

11–快速收集日志到tar包.sh

#!/bin/bash
#脚本功能:工作现场一键备份系统相关日志,以便排障
#脚本思路:先保存日志到/tmp目录下,最后打包成tar.gz包到当前目录
#使用方法:执行脚本时,可以加参数,加的参数会当做备份出来的日志名称,如果不加参数则默认以系统时间命名
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

CurDir=`pwd`				#当前目录
Time=`LANG=en date "+%Y%m%d%H%M%S"`	#当前时间
LogName=system-log-$Time		#默认保存的日志名称

#判断执行脚本时是否输入了参数
if [ $# -eq 0 ]
then
	echo "执行脚本时,未加参数,因此将使用默认名称保存日志!"
else
	LogName=$1
fi

TempUrl=/tmp/$LogName			#临时目录

#创建临时目录
sudo mkdir -p $TempUrl
sudo chmod -R 777 $TempUrl

#备份系统版本信息以及某些硬件信息
echo "系统版本是:" >> $TempUrl/version.txt 
cat /etc/.kyinfo >> $TempUrl/version.txt 2>&1
cat /etc/.productinfo >> $TempUrl/version.txt 2>&1
echo "内核版本是:"  >> $TempUrl/version.txt
uname -a >> $TempUrl/version.txt
uname -r >> $TempUrl/version.txt
echo "cpu信息:" >> $TempUrl/version.txt
sudo lscpu >> $TempUrl/version.txt

#备份系统日志
sudo cp -r /var/log  $TempUrl/

#备份dmesg日志
sudo dmesg > $TempUrl/dmesg.txt

#备份xsession日志
sudo mkdir $TempUrl/xsession
for i in `ls -a ~/ | grep xsession`
do
        A=${i:1}                                #截取字符串,把.去掉保存在变量A里
        sudo cp -r ~/$i $TempUrl/xsession/$A
done

#备份历史操作
HISTFILE=~/.bash_history
set -o history
history >> $TempUrl/history.txt

#备份磁盘信息
mkdir $TempUrl/smart
for i in `lsblk | grep └─ | awk '{print $1}' | awk -F─ '{print $2}'`
do
        B=${i:0:3}
        smartctl -a /dev/$B > $TempUrl/smart/$B.txt
done

#打包日志
cd /tmp
sudo tar -czvf $CurDir/$LogName.tar.gz $LogName
sudo rm -rf $TempUrl
cd $CurDir

12–库状态一键查看.sh

#!/bin/bash
#脚本功能:便捷为某环境变量添加内容
#脚本思路:通过判断环境变量里的内容是否已经包含想添加的内容,来实现把控,避免添来添去把原来的给添坏
#使用方法:执行脚本时添加两个参数,第一个是环境变量名,第二个是要添加的路径
#使用环境:有的用户对于添加环境变量不熟悉,不知道如何将自己所需的库的路径添加到环境变量里,这个脚本可以解决

echo "
如果想要为环境变量添加新的路径,可以这样:
sudo ./12--xxx.sh  PATH  /home/kylin
如果想要删除环境变量里的某个内容,可最后加--del,例如
sudo ./12--xxx.sh  PATH  /home/kylin  --del
"


#判断运行脚本时输入的参数是否合法
if [ $# -lt 2 ]
then
		echo -e "\033[31m运行脚本时请至少输入两个参数!
		第一个参数是环境变量名,第二个参数是要为环境变量添加的内容\033[0m"
		exit
elif [ $# -gt 3 ]
then
		echo -e "\033[31m检测到您运行脚本时,添加了过多的参数!\033[0m"
		exit
else
		echo -e "\n"
fi

#判断运行脚本时输入的第二个参数路径是否存在
if [ ! -d $2 ]
then
		echo -e "\033[31m不存在$2这个路径!\033[0m"
else
		echo -e "\n"
fi



<< EOF
1、首先判断用户输入了几个参数,需要输入2个或3个参数,否则都会报错
2、判断第二个参数的路径是否存在,如果不存在报错,存在再添加
3、判断第三个参数是否
EOF


<< EOF
echo $PATH | sed s/:/\\n/g
脚本,检测某环境变量里是否包含xxx路径,如果不包含,则可以添加,如果包含则可以删除

定义在如下函数设置变量添加
prepend() {
	[ -d "$2" ] && eval $1=\"$2 ':' \$$1    \" && export $1;
}
EOF

13–每隔X秒记录占cpu高进程并记录线程数.sh

#!/bin/bash
#脚本功能:每15秒记录一次占cpu前30的进程,并把每个进程对应的线程数量在末列显示,终端会输出结果,并另保存每次的结果记录到/var/log/cpu_percent中
#脚本思路:循环体里使用ps auxw查进程,并配合sort以及grep工具筛选前30个进程,使用awk提取PID,根据PID进一步查线程数量,线程数量提取后,与前面进程信息组合在一起,并将空格换为制表符,让输出结果简洁一些
#使用方法:可以执行此脚本并加&符号,放在后台执行,执行完之后可以ps -aux | grep name查一下这个脚本进程有没有确实在后台运行,以及开一个终端输入tail -f /var/log/cpu_percent查看这个日志里最新追加的信息
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

while [ 1 == 1 ]
do
        d=`ps -auxw | head -1`
        echo $d | sed 's/ /\t\t/' | sed 's/ /\t/' | sed 's/ /\t/' | sed 's/ /\t/' | sed 's/ /\t/'| sed 's/ /\t/' | sed 's/ /\t/'| sed 's/ /\t/' >>  /var/log/cpu_percent
        for i in `ps auxw |sort -rn -k3 | grep -v PID | head -30 | awk '{print $2}'`
        do
                a=`ps auxw | grep -v grep | grep $i | awk '{if($2=="'$i'")print $0}'`
                b=`pstree -p $i | wc -l`
                c="$a -->  $b"
                echo $c | sed 's/ /\t\t/' | sed 's/ /\t/' | sed 's/ /\t/' | sed 's/ /\t/' | sed 's/ /\t/'| sed 's/ /\t/' | sed 's/ /\t/'| sed 's/ /\t/' >>  /var/log/cpu_percent
        done
        echo -e "\n" >> /var/log/cpu_percent
        echo -e "\n" >> /var/log/cpu_percent
        echo -e "\n" >> /var/log/cpu_percent
        sleep 10
done


#这个脚本用的pstree查的线程,其实也可用通过查proc下对应文件的方式找出来线程数,脚本很早写的,实在懒得修改了,以后再说吧

14–批量创建用户.sh

#!/bin/bash
#脚本功能:批量添加用户
#脚本思路:每次运行脚本后,会首先判断是否有USER_LIST文件,如果没有则进行创建,并接收用户输入。读取USER_LIST并进行创建用户的时候会判断每行的用户是否已经存在,如果已经存在则不进行创建,并且会输出这行已经创建过的用户的信息(/etc/passwd)
#使用方法:此脚本是交互脚本
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

if [ ! -f "USER_LIST" ]
then
	touch USER_LIST
	chmod 777 USER_LIST
	a=1
	while [ $a != "exit" ]
	do
		read -p "请输入需要添加的用户(输入exit可结束输入): " a
		echo $a >> USER_LIST 
	done
	sed -i '/exit/d' USER_LIST	#去掉最后一次循环追加进去的exit
fi
sed -i '/^$/d' USER_LIST	#去掉USER_LIST里的空行

for i in $(cat USER_LIST)
do
	cat /etc/passwd | grep $i
	b=`echo $?`
	if [ $b != 0 ]
	then
		useradd $i
		echo "123123" | passwd --stdin $i
	fi
done
echo "您已经创建了USER_LIST列表里的用户,初始密码为123123"

15–循环ping以测试网络的连通性.sh

#!/bin/bash
#脚本功能:循环对IPping,测试IP的连通性
#脚本思路:对IP的ping结果封装到函数里,然后以读取IP列表的值的方式循环,每次循环放到后台
#使用方法:事先需要在同一目录下先创建IP_LIST文件,然后预先添加需要测的IP进去
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

#定义循环pingIP的函数
iping(){
	ping -c5 -i0.5 -W5 $1 &> /dev/null	#这里$1为该iping函数的第一个接收参数
	if [ $? -eq 0 ]
	then
		echo -e "\n"
		echo "$i is up"
	else
		echo -e "\n"
		echo "$i is down"
	fi
}

if [ ! -f IP_LIST ]
then
	echo "请在运行此脚本之前在同一目录下创建IP_LIST文件,并添加IP进去!"
	exit
fi
for i in $(cat IP_LIST)
do
	iping $i &		#此处调用函数iping,这种方式可以使得每次循环都可以放到后台执行,进而迅速进行下一次循环
done

16–批量分发文件到其他联网机器.sh

#!/bin/bash
#脚本功能:批量分发文件到其他机器
#脚本思路:使用expect处理交互输入
#使用方式:注意修改脚本前面的变量,设置了超时时间间隔为120秒,脚本完成前,切勿手动干预
#使用环境:使用前确保这些目标ip能ping通,或者已经设置了免密
#脚本编写:徐金宝--国防事业本部

front="172.25.90."	#ip地址前三段
array_ip=(102 104 105)	#ip地址最后一段
user="xu"		
password="123123"
script='/home/test/test.sh'	#本地脚本所在位置,注意写绝对路径,否则脚本不认
dir='~/'		#目标路径
for i in ${array_ip[*]}
do
	expect << EOF
		set timeout 120
		spawn scp -r $script $user@$front$i:$dir
		expect {
			"yes/no" {send "yes\n"; exp_continue}
			"password" {send "$password\n"; exp_continue}
	}
	expect eof
EOF
done

17–bond配置_nmcli版.sh

#!/bin/bash
#脚本功能:通过nmcli方式配bond双网卡绑定
#脚本思路:添加一个Team,然后伴随两个slave,Team的配置参考nmcli-examples的man帮助,输入/EXAMPLES查找,Team的策略参考Teamd.conf的man帮助
#使用方法:使用前修改脚本内IP以及两个网卡名称
#使用环境:需要运行NetworkManager
#脚本编写:徐金宝--国防事业本部

IP=192.168.87.111
ETH1=ens1
ETH2=ens2
nmcli con add type team con-name Team1 ifname Team1 config '{"runner": {"name": "activebackup"}}'
nmcli con add type team-slave con-name Team1-slave1 ifname "$ETH1" master Team1
nmcli con add type team-slave con-name Team1-slave2 ifname "$ETH2" master Team1
nmcli con mod Team1 ipv4.method manual ipv4.addresses "$IP" connection.autoconnect yes
nmcli con mod Team1-slave1 connection.autoconnect yes
nmcli con mod Team2-slave2 connection.autoconnect yes
nmcli connection up Team1
nmcli connection up Team1-slave1
nmcli connection up Team1-slave2
systemctl restart network
systemctl disable firewalld.service

18–bond配置_改配置文件版.sh

#!/bin/bash
#脚本功能:修改配置文件的方法给双网卡做bond绑定
#脚本思路:交互式等待输入网卡名等信息,对输入信息做匹配判断输入的网卡是否存在,存在的话,则根据名称在配置文件指定行添加做bond的配置信息
#关于bond0的配置写到了函数中,在后面会调用这个函数,如果已经有了bond0配置文件,则会直接调用函数刷新bond0的配置信息,如果没有bond0文件,则会先创建bond0文件,然后再调用函数写入配置信息
#使用方法:请务必保证两个网卡都能连上网,否则脚本跑完后输出的信息,会提示up状态的slave个数为0。请务必保证运行脚本时输入正确的配置值
#使用环境:不限,此脚本前几行会禁用NetworkManager,根据情况决定是否禁用它,不用则注释
#脚本编写:徐金宝--国防事业本部

NET=/etc/sysconfig/network-scripts/
systemctl stop NetworkManager
systemctl disable NetworkManager
read -p"请输入添加到bond的第一张网卡名称:" a
A=`ifconfig | grep $a | wc -l`
if [ $A != 0 ]
then
        ls "$NET"ifcfg-"$a" &> /dev/null
        if [ $? != 0 ]
        then
                echo "我找不到网卡$a的配置文件,请确认你添加的第一张网卡名称是否正确"
        else
                M=`cat "$NET"ifcfg-"$a" | grep "SLAVE=" | wc -l`
		if [ $M != 0 ]
		then
			sed -i '/SLAVE=/s/.\+/SLAVE=yes/' "$NET"ifcfg-"$a"
		else
			sed -i '/DEVICE=\"'"$a"'\"/ a\MASTER=bond0\nSLAVE=yes' "$NET"ifcfg-"$a"
		fi
        fi
else
        echo "没有名称为$a的网卡"
fi

read -p"请输入添加到bond的第二张网卡名称:" b
B=`ifconfig | grep $b | wc -l`
if [ $B != 0 ]
then
        ls "$NET"ifcfg-"$b" &> /dev/null
        if [ $? != 0 ]
        then
                echo "我找不到网卡$b的配置文件,请确认你添加的第二张网卡名称是否正确"
        else
                N=`cat "$NET"ifcfg-"$b" | grep "SLAVE=" | wc -l`
		if [ $N != 0 ]
		then
			sed -i '/SLAVE=/s/.\+/SLAVE=yes/' "$NET"ifcfg-"$b"
		else
			sed -i '/DEVICE=\"'"$b"'\"/ a\MASTER=bond0\nSLAVE=yes' "$NET"ifcfg-"$b"
		fi
        fi
else
        echo "没有名称为$b的网卡"
fi


function bond(){
	read -p"请输入bond需要配置的IP:" ip
	read -p"请输入IP的掩码位数:" prefix
	read -p"请输入bond需要配置的网关:" gateway
	cat << EOF > "$NET"ifcfg-bond0
	TYPE=Bond
	ONBOOT=yes
	DEVICE=bond0
	BONDING_MASTER=yes
	IPADDR=$ip
	PREFIX=$prefix
	GATEWAY=$gateway
	BOOTPROTO=none
	USERCTL=no
	BONDING_OPTS="mode=1 miimon=100"
EOF
}

if [ -f "$NET"ifcfg-bond0 ]
then
	bond
else
	touch "$NET"ifcfg-bond0
	bond
fi

systemctl restart network
ifconfig | grep bond0 -A 7
cat /proc/net/bonding/bond0

19–bond配置_ifenslave版.sh

#!/bin/bash
#脚本功能:双网卡绑定bond
#脚本思路:ifenslave方式的配bond重启后会失效,因此,添加到rc.local文件中
#使用方法:先修改脚本内变量值,在=后边加上需要修改的内容。在终端运行试过之后没问题后,可以将此脚本内的内容复制到/etc/rc.d/rc.local文件末尾
#使用环境:不限,先加权限再执行
#脚本编写:张瑞--国防事业本部

$IP=
$netmask=
$ens1=
$ens2=
modprobe bonding miimon=100 mode=1
sleep 2
ifconfig bond0 $IP netmask $netmask up
ifenslave bond0 $ens1 $ens2

sleep 3
ifconfig | grep bond0 -A 7
cat /proc/net/bonding/bond0

20–监控另一程序是否运行.sh

#!/bin/bash
#脚本功能:判断另一个程序是否运行,开始运行时和结束运行时打印日志到messages里
#脚本思路:最外层循环是死循环,然后判断另一程序开始运行时,打印开始日志,然后就开始内循环判断另一程序是否结束,直到结束时结束内循环,然后打印结束日志
#使用方法:使用之前把脚本前面的几个变量值修改一下,分别是循环检测的时间间隔、程序名称、开始时往messages输出的日志、结束时往messages输出的日志。此脚本添加到rc.local一直运行
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

time_span=1
name="nnn"
log_begin="xxx"
log_end="yyy"
while :
do
        b=`ps -aux | grep $name | grep -v grep | wc -l`
        if [ $b != 0 ]
        then
                logger "$log_begin"
                echo "begin"
                c=1
                until [ "$c" == 0 ]
                do
                        c=`ps -aux | grep $name | grep -v grep | wc -l`
                        sleep $time_span
                done
                logger "$log_end"
                echo "end"
        fi
        sleep $time_span
done

21–循环ping测试网络连通性_简易版.sh

#!/bin/bash
#脚本功能:循环pingIP
#脚本思路:嵌套循环,i和j分别是IP的第三位和第四位,以及修改一下默认的前两位
#使用方法:用前先修改脚本内的{}内的IP范围
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

iping(){
        ping -c5 -i0.5 -w5 $1 &> /dev/null
        if [ $? -eq 0 ]
        then
                echo "$IP is up"
        else
                sleep 5
                echo "$IP is down"
        fi
}


for i in {60..60}
do
        for j in {60..90}
        do
                IP="192.168.$i.$j"
                iping $IP &
        done
done

22–记录某磁盘分区的io相关信息到日志.sh

#!/bin/bash
#脚本功能:记录io信息
#脚本思路:超过一定行触发截断,保留较新的日志
#使用方法:该脚本是死循环,不用了记得kill掉
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

dev="/dev/sda2"		#需要监控的分区
maxline="999999"	#io日志行数上限,超过则触发保存最新的remains行日志
remains="99999"		#保留的最新的日志行数

ls /var/log/io &> /dev/null
if [ $? != 0 ]
then
	sudo touch /var/log/io
	sudo chmod 777 /var/log/io
	sudo touch /var/log/test
	sudo chmod 777 /var/log/test
fi

#死循环,不停地记录当时的io相关值到/var/log/io里
while :
do
	io=`sudo iostat -d -x -k $dev`
	sudo echo -e "\n" >> /var/log/io
	sudo echo "$io" >> /var/log/io
	line=`sudo more /var/log/io | wc -l`
	if [ "$line" -gt "$maxline" ]
	then
		sudo tail -"$remains" /var/log/io > /var/log/test
		sudo more /var/log/test > /var/log/io 
	fi
	
done

23–安全配置.sh

#!/bin/bash
echo "服务器和已建立连接的端口信息"
netstat -antpu


24–快速占用cpu并持续高占用.sh

#!/bin/bash
#脚本功能:快速占用cpu,用作测试
#脚本思路:使用cat,将无限大重定向到黑洞
#使用方法:需要输入整数,以便拉起n个占cpu的进程
#使用环境:R系
#脚本编写:徐金宝--国防事业本部

function high_cpu()
{
cat /dev/zero > /dev/null
}

read -p"确认需要几个占cpu的进程? " a
for i in ((i=0;i<"$a";i++))
do
	high_cpu &
done

25–批量配置机器间免密.sh

#!/bin/bash
#脚本功能:实现批量建立机器间免密
#脚本思路:使用expect自动处理交互
#使用方法:注意修改用户名、密码,以及把确认能ping通的ip写在数组里,跑脚本前,本机先用ssh-keygen生成pub公钥
#使用环境:确保每台机器用户名以及密码相同,保证要建立免密的ip地址是能ping的通的,可利用另一批量pingIP的脚本先测试互通性
#脚本编写:徐金宝--国防事业本部

front="172.25.90."		#ip地址前三段
array_ip=(102 104 105) 		#ip地址最后一段
user="xu"
password="123123"
for i in ${array_ip[*]}
do
	expect << EOF
		set timeout 120
		spawn ssh-copy-id -i $user@$front$i
		expect {
			"yes/no" {send "yes\n; exp_continue"}
			"password" {send "$password\n; exp_continue"}
		}	
		expect eof
EOF
done

26–使用logrotate对日志大小限制.sh

#!/bin/bash
#脚本功能:为某个日志文件进行配置,以实现定期轮替日志
#脚本思路:使用logrotate日志管理,添加配置文件方式实现轮替
#使用方法:使用前请按需修改脚本内定义的变量
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

url='/var/log/'
name='test.log'
config_url='/etc/logrotate.d/'
config_name='test'

function config()
{
	cat << EOF > "$config_url$config_name"
        	$url$name {
                missingok               #如果日志文件丢失,则忽略并返回(不对日志文件进行轮替)
                notifempty              #仅当源日志文件非空时才对其进行轮替
                size 30M                #限制执行轮替时的日志文件大小,可以M、k等
                        compress        #允许用gzip压缩日志文件
                daily                   #指定轮替的时间间隔,可用weekly、monthly、yearly或daily
                        rotate 5        #需要保留的旧的日志归档数量
                create 0600 root root
                }
EOF

}
#判断是否存在日志文件,如果没有则创建
if [ ! -f "$url$name" ]
then
	touch "$url$name"
	chmod 777 "$url$name"
fi

#判断是否存在日志轮替的配置文件,没有则创建
if [ ! -f "$config_url$config_name" ]
then
	touch "$config_url$config_name"
	chmod 777 "$config_url$config_name"
fi

config

27–监控cpu温度.sh

#!/bin/bash
#脚本功能:监控cpu温度
#脚本思路:使用sensors工具检测温度,输出结果重定向到日志文件
#使用方法:事先下载好sensors工具,软件名应该叫lm-sensors
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

if [ ! -f /var/log/sensors.log ]
then
	sudo touch /var/log/sensors.log
	sudo chmod 777 /var/log/sensors.log
fi
while :
do
	sudo date >> /var/log/sensors.log
	sudo sensors >> /var/log/sensors.log
	sudo echo -e "\n" >> /var/log/sensors.log
	sleep 2
done

28–监控进程打开文件数以及对应线程数.sh

#!/bin/bash 
#脚本功能:监控进程打开文件数以及对应线程数
#脚本思路:使用了lsof工具,以及通过直接统计proc/task/下的文件统计线程数
#使用方法:终端或后台运行
#使用环境:不限
#脚本编写:彭雁--国防支持总经理

echo > /tmp/test.log		#每次执行脚本先清空临时日志文件以便弄混

#遍历所有进程号,统计这些进程对应的打开文件数量以及线程总数,只有文件数量大于500或线程数量大于10的进程信息会进行记录
for i in `ls /proc| grep ^[0-9]`
do
    num=$(lsof -a -p $i 2>/dev/null |wc -l)
    threadnum=$(ls /proc/$i/task 2>/dev/null|wc -l)
    if [ $num -gt 500 -o  $threadnum -gt 10  ]
    then
    	comm=`cat /proc/$i/comm`
    	echo "$i $threadnum $num $comm" >> /tmp/test.log	#echo"pid 线程总数 该pid进程打开的文件数 进程名称"到临时日志文件
    fi
done

sleep 1

#下面开始读存好的信息
echo "pid thread_num file_num name"	#echo标题行

echo "文件数量大于500"
cat /tmp/test.log|awk '$3>500{print $0}'|sort -r -k 3 -n	#用awk打印出每行内容,用sort进行排序(-n按数字排序、-r逆序、-k 3按第三域进行排序)
echo "线程数量大于10"
cat /tmp/test.log|awk '$2>10{print $0}'|sort -r -k 2 -n

sleep 1

echo > /tmp/test.log			#清空临时日志文件

<< EOF
补充:
lsof(lists openfiles)其非常的全能,甚至能做netstat和ps的全部工作
可以使用lsof获得系统上设备的信息,能了解到指定的用户在指定的地点正在碰什么东西
当传递参数时,默认行为是对结果进行"或"运算。因此如果你用-i拉出一个端口列表的同时又用-p拉出进程列表,那么默认会得到两个的结果
-a	让结果进行"与"运算
-l	在输出显示用户ID而不是用户名
-t	仅获取进程ID
-U	获取UNIX套接口地址
-F	格式化输出结果,用于其他命令,可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名、并以空终止)
-p	查看制定进程ID已打开的内容

/proc/pid/下的一些信息:
/proc/pid/comm		应用程序或命令名字
/proc/pid/task/		此目录下是对应的线程信息
EOF

29–system-log-collection-reference.sh

#!/bin/sh
# Copyright (C), 2020, ChangSha JingJia Micro Electronics Co., Ltd.
# this script is used to collect system log for JM7200
# 此脚本来自于716所的一位同事之手,是用来收集景嘉微驱动以及其他一系列相关信息的脚本,见脚本写的很有借鉴意义,便要了一份过来,可以在写脚本的时候参考此脚本里的某些部分

# set -x

if [ -z ${DISPLAY} ]; then
	# echo "DISPLAY is null, set DISPLAY=:0"
	export DISPLAY=:0
fi

# 当前目录
CURDIR=`pwd`

# 当前系统时间
YMD=`LANG=en date "+%Y%m%d%H%M%S"`
# 创建存放系统信息的临时目录
LOGNAME=system-log-${YMD}
LOGHOME=/tmp/${LOGNAME}
sudo rm -rf ${LOGHOME}
mkdir -pv $LOGHOME > /dev/null 2>&1
sync

# dpkg、rpm命令
DPKG=`which dpkg 2>/dev/null`
RPM=`which rpm 2>/dev/null`
IMPORTCMD=`which import`

############# 获取mwv206软件包的二进制文件信息 #############
get_mwv206_file_info() {
# mwv206内核驱动文件
sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' > kernel_mwv206_ko.txt

echo "--------------------------------------------------" >> kernel_mwv206_ko.txt
echo "sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs md5sum" >> kernel_mwv206_ko.txt
sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs md5sum >> kernel_mwv206_ko.txt

echo "--------------------------------------------------" >> kernel_mwv206_ko.txt
echo "sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs ls -l" >> kernel_mwv206_ko.txt
sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs ls -l >> kernel_mwv206_ko.txt

echo "--------------------------------------------------" >> kernel_mwv206_ko.txt
echo "sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs -i nm {} " >> kernel_mwv206_ko.txt
sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs -i nm {} >> kernel_mwv206_ko.txt

echo "--------------------------------------------------" >> kernel_mwv206_ko.txt
echo "sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs strings" >> kernel_mwv206_ko.txt
sudo find  /lib/modules/`uname -r`/  -name '*mwv206*' | xargs -i strings {} >> kernel_mwv206_ko.txt



# mwv206核外驱动文件
ls -l  /usr/lib/*-linux-gnu*/  | grep -i mwv206 >> usr_lib_xorg_mwv206_so.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_xorg_mwv206_so.txt
ls -l  /usr/lib/*-linux-gnu*/libGL*.so* >> usr_lib_xorg_mwv206_so.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_xorg_mwv206_so.txt

sudo find  /usr/lib*/xorg/modules/ -name '*mwv206*' 2>/dev/null | xargs  ls -l >> usr_lib_xorg_mwv206_so.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_xorg_mwv206_so.txt
sudo find  /usr/lib*/xorg/modules/ -name '*mwv206*' 2>/dev/null | xargs  md5sum >> usr_lib_xorg_mwv206_so.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_xorg_mwv206_so.txt
sudo find  /usr/lib*/xorg/modules/ -name '*mwv206*' 2>/dev/null | xargs  strings >> usr_lib_xorg_mwv206_so.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt

sudo find  /usr/lib/*-linux-gnu*/  -maxdepth  1 -type f | grep -i mwv206 | xargs ls -l >> usr_lib_arch_mwv206_files.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
sudo find  /usr/lib/*-linux-gnu*/  -maxdepth  1 -type f | grep -i mwv206 | xargs -i ldd {} >> usr_lib_arch_mwv206_files.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
sudo find  /usr/lib/*-linux-gnu*/  -maxdepth  1 -type f | grep -i mwv206 | xargs md5sum >> usr_lib_arch_mwv206_files.txt 2>/dev/null
sudo find  /usr/lib/*-linux-gnu*/  -maxdepth  1 -type f | grep -i mwv206 | xargs -i strings {} >> usr_lib_arch_mwv206_files.txt 2>/dev/null
echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt

if [ ! -z $DPKG ]; then
    sudo find  /usr/lib/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs  ls -l >> usr_lib_arch_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
    sudo find  /usr/lib/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs -i ldd {} >> usr_lib_arch_mwv206_files.txt
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
    sudo find  /usr/lib/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs  md5sum >> usr_lib_arch_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
    sudo find  /usr/lib/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs -i strings {} >> usr_lib_arch_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
fi

if [ ! -z $RPM ]; then
    sudo find  /usr/lib64/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs  ls -l >> usr_lib_arch_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
    sudo find  /usr/lib64/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs -i ldd {} >> usr_lib_arch_mwv206_files.txt
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
    sudo find  /usr/lib64/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs  md5sum >> usr_lib_arch_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
    sudo find  /usr/lib64/*-linux-gnu*/mwv206/ -type f  2>/dev/null | xargs -i strings {} >> usr_lib_arch_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_arch_mwv206_files.txt
fi

if [ ! -z $RPM ]; then
    sudo find /usr/lib*/mwv206/ -type f 2>/dev/null | xargs ls -l >> usr_lib_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_mwv206_files.txt
    sudo find /usr/lib*/mwv206/ -type f 2>/dev/null | xargs -i ldd {} >> usr_lib_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_mwv206_files.txt
    sudo find /usr/lib*/mwv206/ -type f 2>/dev/null | xargs md5sum >> usr_lib_mwv206_files.txt 2>/dev/null
    echo "--------------------------------------------------" >> usr_lib_mwv206_files.txt
    sudo find /usr/lib*/mwv206/ -type f 2>/dev/null | xargs -i strings {} >> usr_lib_mwv206_files.txt 2>/dev/null
fi

}


#############
# 进入收集系统日志的临时目录
cd $LOGHOME
############# 获取系统信息 #############
# 当前内核日志
sudo dmesg > dmesg.log.txt

# 完整内核日志
if [ -e /var/log/kern.log ]; then
  sudo cp /var/log/kern.log .
fi

# 完整的syslog日志
if [ -e /var/log/syslog ]; then
  sudo cp /var/log/syslog .
fi

# Xorg日志文件
if [ -e /var/log/Xorg.0.log ]; then
  sudo cp /var/log/Xorg.0.log* .
fi


# JM7200 显卡的PCI信息
sudo lspci -d 0731:7200 -vvv > lspci-7200.txt

# 完整的PCI信息
sudo lspci -vvv > lspci.txt 2>/dev/null

# 当前CPU信息
sudo lscpu >> lscpu.txt

# JM7200 显卡信息
if [ -e /proc/gpuinfo_0 ]; then
cat /proc/gpuinfo_0 > gpuinfo_0.txt
fi
if [ -e /proc/gpuinfo_1 ]; then
cat /proc/gpuinfo_1 > gpuinfo_1.txt
fi

# 当前内存使用情况
free -m >> free.txt

# 当前进程信息
ps auxf > ps.auxf.txt

# xrandr信息
xrandr > xrandr.txt
echo "-----------------------------------" >> xrandr.txt
xrandr --verbose >> xrandr.txt

# 系统安装的软件包信息
if [ ! -z $DPKG ]; then
	dpkg -l >> dpkg-all.txt
	dpkg -l | grep mwv206 | awk '{ print $2 }' | xargs -i dpkg -s {} > dpkg-mwv206.txt
	echo "---------------------" >> dpkg-mwv206.txt
	
	FLS=`dpkg -l | grep mwv206 | awk '{ print $2 }' | xargs -i dpkg -L {} | xargs -i  echo {}`
	for FL in $FLS
	do
	   if [ -f $FL ]; then
	     ls -l $FL >> dpkg-mwv206.txt
	     md5sum $FL >> dpkg-mwv206.txt
	   fi
	done
fi
if [ ! -z $RPM ]; then
	rpm -qa >> rpm-qa.txt
	rpm -qa | grep mwv206 | awk '{ print $1 }' | xargs -i rpm -qi {} > rpm-mwv206.txt
	echo "---------------------" >> rpm-mwv206.txt
	FLS=`rpm -qa | grep mwv206 | awk '{ print $1 }' | xargs -i rpm -ql {}`
	for FL in $FLS
	do
	    if [ -f $FL ]; then
	      ls -l $FL >> rpm-mwv206.txt
	      md5sum $FL >> rpm-mwv206.txt
	    fi
	done
	
fi

# 当前内核版本信息
uname -a > uname-a.txt
echo "\n\n\n" >> uname-a.txt
# 内核启动参数
cat /proc/cmdline >> uname-a.txt

# 当前系统版本信息
if [ -e /etc/lsb-release ]; then
	cp /etc/lsb-release .
fi
if [ -e /etc/os-release ]; then
	cp /etc/os-release .
fi

# 获取mwv206软件包相关的信息
get_mwv206_file_info
sync

# 当前进程占用CPU情况
top -n 2 > top.txt

if [ ! -z ${IMPORTCMD} ]; then
    ${IMPORTCMD} -window root screen-import.png
fi


# 可以在此处添加新的系统信息收集命令


############# 获取系统信息 #############
sudo chmod -R 0777 ${LOGHOME}
cd /tmp/
sync
tar czf ~/${LOGNAME}.tgz ${LOGNAME}
sync
cd $CURDIR

echo "收集收集系统日志成功,日志文件位于 ~/${LOGNAME}.tgz "
# echo "System Log File ~/${LOGNAME}.tgz"

<< EOF 
使用方法
  ./system-log-collection.sh
  执行该命令的要求当前用户拥有sudo执行权限,执行时会提示输入当前用户执行sudo时的密码。
  执行成功后会提示"收集收集系统日志成功,日志文件位于 ~/system-log-20200525.tgz",将该文件导出即可。

system-log-yyyymmdd.tgz 文件包括如下系统日志文件
dmesg.log.txt                 : 当前内核日志
dpkg-all.txt                  : 系统安装的软件包信息
rpm-qa.txt                    : 系统安装的软件包信息
free.txt                      : 当前内存使用情况
gpuinfo_0.txt                 : JM7200 显卡信息
gpuinfo_1.txt                 : JM7200 显卡信息
kern.log                      : 完整内核日志
lsb-release                   : 当前系统版本信息
os-release                    : 当前系统版本信息
lscpu.txt                     : 当前CPU信息
lspci-7200.txt                : JM7200 显卡的PCI信息
lspci.txt                     : 整的PCI信息
ps.auxf.txt                   : 当前进程信息
syslog                        : 完整的syslog日志
uname-a.txt                   : 当前内核版本信息
Xorg.0.log                    : Xorg日志文件
Xorg.0.log.old                : Xorg日志文件
xrandr.txt                    : xrandr信息
kernel_mwv206_ko              : mwv206内核ko文件信息
usr_lib_arch_mwv206_files.txt : /usr/lib/*-linux-gnu*/mwv206/目录下的mwv206驱动文件信息
usr_lib_mwv206_files.txt      : /usr/lib*/mwv206/目录下的mwv206驱动文件信息
usr_lib_xorg_mwv206_so.txt    : /usr/lib*/xorg/modules/目录下的mwv206驱动文件信息
top.txt                       : 当前进程占用CPU情况
screen-import.png             : 保存当前截屏图片(ssh登录执行,将是黑屏图片)
EOF

30–判断ip地址的合法性.sh

#!/bin/bash
#脚本功能:判断IP是否合法
#脚本思路:使用awk以.分隔,判断每个部分的数字是否在255范围内
#使用方法:函数体内判断的是$IP,因此用这个函数的前提是有IP这个变量
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

IP=192.168.0.100
function isIP()
{
	Num=`echo $IP | awk -F. '{ print NF }'`
	No1=`echo $IP | awk -F. '{ print $1 }'`
	No2=`echo $IP | awk -F. '{ print $2 }'`
	No3=`echo $IP | awk -F. '{ print $3 }'`
	No4=`echo $IP | awk -F. '{ print $4 }'`
	if [ $Num != 4 ] || [ $No1 -gt 255 -o $No1 -lt 1 ] || [ $No2 -gt 255 -o $No2 -lt 0 ] || [ $No3 -gt 255 -o $No3 -lt 0 ] || [ $No4 -gt 255 -o $No4 -lt 0 ]
	then
		echo "IP不合法"
		return 1
	fi
}
isIP
echo $?

31–重启测试脚本_简易版.sh

#!/bin/bash
#脚本功能:自动重启的脚本,有计重启次数
#脚本思路:Total文件里为重启次数
#使用方法:如果想要取消重启,就echo任意内容到StatusFile文件中,示例:echo xxx > /tmp/status_file
#使用环境:将此脚本绝对路径加入到rc.local文件中
#脚本编写:徐金宝--国防事业本部

Delay=120		#这个时间强烈建议设置大一些,避免还没进入桌面,就又开始重启,确认了大概多少秒之后系统进入桌面的情况下再改小这个值
Times=30
StatusFile=/tmp/status_file
Temp=/tmp/tmp_file
Total=/tmp/total_file

#状态文件、临时文件、计数文件如果不存在则创建
if [ ! -f $StatusFile ]
then
	touch $StatusFile
	chmod 777 $StatusFile
fi
if [ ! -f $Temp ]
then
	touch $Temp
	chmod 777 $Temp
fi
if [ ! -f $Total ]
then
	touch $Total
	chmod 777 $Total
fi


Count=`cat $Temp | wc -l`
echo $Count > $Total					#相当于每次开机第一件事就是计数,然后脚本就开始睡觉,如果在睡觉期间打破了这种状态,那么就不会重启了

sleep $Delay

#判断状态文件,文件内容非空时,会执行重启命令
Num=`cat $StatusFile | wc -l`
if [ -f $StatusFile ] && [ $Num == 0 ] && [ $Count -lt $Times ]
then
	echo xxx >> $Temp
	reboot &
fi

32–向指定终端输出内容报警.sh

#!/bin/bash
10.5向用户终端发送消息

33–快速启动httpd服务共享文件.sh

#!/bin/bash
#脚本功能:共享当前目录,其他主机可通过浏览器输入IP:8000的方式访问
#脚本思路:使用python内置的功能
#使用方法:机器A运行脚本会拉起httpd服务,将脚本所在的路径以web的方式共享出去,机器B打开浏览器使用192.168.1.100:8000访问
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

CurDir=`pwd`
Py3=`which python3 | wc -l`
Py2=`which python2 | wc -l`
cd $CurDir
if [ $Py2 == 1 ] && [ $Py3 == 0 ]		#只有在python3解释器不存在且python2存在时使用python2
then
		python2 -m SimpleHTTPServer
else
		python3 -m http.server
fi

34–iso文件生成.sh

#!/bin/bash
#脚本功能:将文件做成iso
#脚本思路:无
#使用方法:按提示输入
#使用环境:不限
#脚本编写:徐金宝--国防事业本部

read -p"输入需要做成iso的源文件:" SourceDir
Num=`ls -a | grep $SourceDir | wc -l`
if [ $Num == 0 ]
then
	echo -e "不存在此文件!\n"
	exit
fi
read -p"输入需要生成的iso名称:" Name
sudo mkisofs -r -o $Name.iso $SourceDir
<< EOF
基本参数:
-o	设置输出文件名
-V	设置Volume ID
-v	verbose
-m	排除某目录或文件(其不会放入映像文件中)
启动光盘参数:
-b	指定在制作启动光盘时所需的开机映像文件
-J	生成Joliet格式信息(能在windows环境下使用)
-R	能在Unix/Linux环境下使用,文件名区分大小写,同时记录文件长度
其他参数:
-hide	使指定的目录或文件在ISO 9660或Rock RidgeExtensions系统中隐藏
-hide-joliet	使指定的目录或文件在Joliet系统中隐藏
-O	采用MD5空间优化
-C<盘区编号>	将许多节区合成一个映像文件时,使用此参数
-l	允许长文件名
-relaxed-filenames	扩展的文件名
-gbk4dos-filenames	DOS下支持中文
-gbk4win-filenames	WIN下支持中文
EOF

35–压缩解压工具集成.sh

36–磁盘.sh

37–monitor_another_top.sh

#!/usr/bin/expect -f
#脚本功能:监控另一台机器的top信息
#脚本思路:使用spswn处理交互
#使用方法:注意修改IP
#使用环境:不限
#脚本编写:徐琪琪

IP=172.25.90.50
spawn ssh root@IP
expect {
"*yes/no*" {send "yes\r"; exp_continue}
"*password*" {send "1\r"}
}
expect "#*"
send "top\r"
interact

38–monitor_another_dmesg.sh

#!/usr/bin/expect -f
#脚本功能:监控另外一台机器的demsg信息
#脚本思路:使用spawn处理交互
#使用方法:注意修改IP
#使用环境:不限
#脚本编写:徐琪琪

IP=172.25.90.50
spawn ssh root@IP
expect {
"*yes/no*" {send "yes\r"; exp_continue}
"*password*" {send "1\r"}
}
expect "#*"
send "dmesg -w\r"
interact

39–设置显示屏左右位置.sh

#!/bin/bash
#脚本功能:设置显示屏左右位置
#脚本思路:使用xrandr进行设置
#使用方法:修改显示屏标识,脚本方rc.local或其他合适位置
#使用环境:不限
#脚本编写:张瑞--国防事业本部

left=VGA-0
right=VGA-1
xrandr --output $left --auto --output $right --right-of $left --auto

40–不息屏脚本_鼠标定时移动规避.sh

#!/bin/bash
#脚本功能:不息屏脚本
#脚本思路:通过每隔一段时间移动鼠标规避
#使用方法:脚本所在的绝对路径到加rc.local或其他合适位置
#使用环境:不限
#脚本编写:李哲--国防事业本部

time=10		#间隔时间(单位秒)
while true
do
	xdotool mousemove_relative  1 1
sleep $time
done



41–蓝屏规避脚本.sh

#!/bin/bash
#脚本功能:蓝屏规避脚本
#脚本思路:使用xset设置屏幕信号源关闭一次,以此纠正某种错误信号
#使用方法:脚本绝对路径家到rc.local或其他合适位置
#使用环境:此脚本曾用在成都29所蓝屏问题上,用作规避方案
#脚本编写:徐金宝--国防事业本部

xset dpms force off
sleep 0.01
xset dpms force on

42

43–BootReplace.sh

#!/bin/bash
#脚本功能:恢复其他关机测试脚本执行后所带来的改动
#脚本思路:移除desktop、日志文件以及恢复其他相关状态
#使用方法:配合其他几个脚本使用,45--LongTestTools.sh这个脚本已经把另外的这些脚本整合起来了,所以最终执行时应该使用45
#使用环境:V10-desktop不要改这些脚本的名字

usrname=`cat /var/tmp/LogNames`;
if [ `cat /var/tmp/BootFinish.log` -eq 0  ]; then
        rm -rf  /etc/xdg/autostart/BootTest.desktop;
        rm -rf /etc/lightdm/lightdm.conf
        rm -f /var/tmp/BootFinish.log;
        mv /var/tmp/LogBootTest /var/tmp/LogBootTest-`date +'%Y-m-%d-%Hh%Mm%Ss'`
        mv /var/tmp/LogBootNo /var/tmp/LogBootNo-`date +'%Y-%m-%d-%Hh%Mm%Ss'`
        rm -rf /var/tmp/Bootfinish.log
        rm -rf /var/tmp/LogNames
        sed -i '/\/usr\/sbin\/43--BootReplace.sh/d' /etc/rc.local
        sed -i '/exit 0/d' /etc/rc.local
fi
if  [ `cat /var/tmp/BootCancel.log ` -eq 0 ] ;then
        rm -rf  /etc/xdg/autostart/BootTest.desktop;
        rm -rf /etc/lightdm/lightdm.conf
        rm -f /var/tmp/BootFinish.log;
        mv /var/tmp/LogBootTest /var/tmp/LogBootTest-`date +'%Y-m-%d-%Hh%Mm%Ss'`
        mv /var/tmp/LogBootNo /var/tmp/LogBootNo-`date +'%Y-%m-%d-%Hh%Mm%Ss'`
        rm -rf /var/tmp/Bootfinish.log
        rm -rf /var/tmp/LogNames
        sed -i '/\/usr\/sbin\/43--BootReplace.sh/d' /etc/rc.local
        sed -i '/exit 0/d' /etc/rc.local
fi

44–BootTest.sh

#!/bin/bash
#脚本功能:关机测试脚本
#脚本思路:
#使用方法:配合其他几个脚本使用,45--LongTestTools.sh这个脚本已经把另外的这些脚本整合起来了,所以最终执行时应该使用45
#使用环境:V10-desktop不要改这些脚本的名字

usrname=`cat /var/tmp/LogNames`;
total=`cat /var/tmp/LogBootNo`;
Timeout=30;
timeall=$(($Timeout*10))
if [ ! -e /etc/xdg/autostart/BootTest.desktop ] ; then
        echo -e  "[Desktop Entry]\nEncoding=UTF-8\nName=RebootTest\nType=Application\nExec=44--BootTest.sh --autostart\nTerminal=false\nType=Application\nX-UKUI-AutoRestart=true\nOnlyShowIn=UKUI\nX-UKUI-Autostart-Phase=Application\nNoDisplay=true">/etc/xdg/autostart/BootTest.desktop;
        chmod 666 /etc/xdg/autostart/BootTest.desktop;
fi

if [ ! -e /var/tmp/logBootTest ] ;then
        echo "0" > /var/tmp/logBootTest
        chmod 666 /var/tmp/logBootTest;
fi
var=`cat /var/tmp/logBootTest`
if [ $var -eq $total ]; then
        echo "0" > /var/tmp/BootFinish.log;zenity --info --text="您已经完成了系统关机测试,系统将重新启动以恢复设置";
        #echo "0" > /etc/xdg/autostart/BootTest.desktop;
        echo "0" > /var/tmp/logBootTest;
        echo "0" > /var/tmp/LogBootNo;
        reboot;
        exit ;
fi
if [ $var -gt $total ]; then
        echo "0">/var/tmp/logBootTest;
        var=`cat /var/tmp/logBootTest`;
fi
let Addvar=$var+1;
if [ $var -le $total ]; then
        for ((i=10;i<=100; ));do
                let Timeout=$Timeout-1;
                echo $i;
                echo "#共关机测试$total次,当前关机第$Addvar次.$Timeout秒后关机.";
                sleep 1;
                let i=$i+10;
        done | zenity --progress  --auto-close ;
        if [ `echo "$?"` -ne 0 ]; then
                echo "0" > /var/tmp/BootCancel.log; zenity --info --text="您取消了系统关机测试,系统将重新启动以恢复设置";
                echo "0" > /var/tmp/logBootTest;
                echo "0" > /var/tmp/LogBootNo;
                reboot;
                exit;
        fi
        echo $Addvar > /var/tmp/logBootTest;
        echo "+60"> /sys/class/rtc/rtc0/wakealarm;
        halt
fi

45–LongTestTools.sh

#!/bin/bash
#脚本功能:测试工具(关机、重启、待机、休眠测试)
#脚本思路:判断zenity界面里选中的哪一项,就调用哪一个脚本
#使用方法:配合其他几个脚本使用,45--LongTestTools.sh这个脚本已经把另外的那些脚本整合起来了,所以最终执行时应该使用这个
#使用环境:V10-desktop不要改这些脚本的名字

set -e
#Every script you write should include set -e at the top.
#This tells bash that it should exit the script if any statement returns a non-true return value. 
#The benefit of using -e is that it prevents errors snowballing into serious issues when they could have been caught earlier. 
#Again, for readability you may want to use set -o errexit.

uid=`echo "$UID"`;
if [ $uid -ne 0 ];then
	zenity --info --text="该程序每次以ROOT身份执行";
	exit;
fi;
SHUTDOWN="关机测试";
REBOOT="重启测试";
SUSPEND="待机测试";
SLEEP="休眠测试";
echo `logname` >/var/tmp/LogNames;
usrname=`cat /var/tmp/LogNames`;
lightdm_conf="/etc/lightdm/lightdm.conf"
rc_etc="/etc/systemd/system/rc-local.service"
rc_lib="/lib/systemd/system/rc-local.service"
if [ -e $lightdm_conf ];then
	rm -rf /etc/lightdm/lightdm.conf
	echo '[Seat:*]' >> /etc/lightdm/lightdm.conf
	echo 'autologin-user='$usrname >> /etc/lightdm/lightdm.conf
else
	touch /etc/lightdm/lightdm.conf
	echo '[Seat:*]' >> /etc/lightdm/lightdm.conf
	echo 'autologin-user='$usrname >> /etc/lightdm/lightdm.conf
fi



SELECTION=`zenity --list --radiolist --title="测试工具(V10desktop)"  --text="选择您想操作的一项功能"  --column "" --column "请您选择" True "$SHUTDOWN"  Fasle "$REBOOT"   Fasle "$SUSPEND" Fasle "$SLEEP" `   

if [ -e $SELECTION ] ; then 
	exit;
fi
if [ "$SELECTION"  =  "$SHUTDOWN"  ] ;then
#	sed -i "100a autologin-user=$usrname" /etc/lightdm/lightdm.conf
	TestNo=` zenity  --entry --text="请您输入需要开关机测试的次数" `;
	if [ -e $TestNo ] ;then 
		exit 
	fi
	echo $TestNo > /var/tmp/LogBootNo;
	chmod 666 /var/tmp/LogBootNo;
	if [ ! -e /etc/rc.local ]; then
        echo -e "#!bin/sh\n/usr/sbin/43--BootReplace.sh\nexit 0"> /etc/rc.local
        chmod 777 /etc/rc.local;

else
	echo -e "#!bin/sh\n/usr/sbin/43--BootReplace.sh\nexit 0"> /etc/rc.local
        chmod 777 /etc/rc.local;
	fi
	if [ ! -e $rc_etc ];then
		ln -s $rc_lit $rc_etc
       
	fi
	44--BootTest.sh;
fi
if [ "$SELECTION"  =  "$REBOOT"  ]; then
#	sed -i "100a autologin-user=$usrname" /etc/lightdm/lightdm.conf
	#chmod 666 /etc/lightdm/lightdm.conf;

	#V7.0系统分区安装 当前boot下不存在引导文件
	#if [ -e /boot/grub.cfg ] ; then 
	#	sed -i  "s/timeout=15/timeout=5/g" /boot/grub.cfg
	#	sed -i  "s/timeout 15/timeout 5/g" /boot/boot.cfg
	#	sed -i  "s/timeout 15/timeout 5/g" /boot/boot.conf
	#fi
	TestNo=` zenity  --entry --text="请您输入需要重启测试的次数" `;
	if [ -e $TestNo ] ;then 
		exit 
	fi
	echo $TestNo > /var/tmp/LogRebootNo;
	chmod 666 /var/tmp/LogRebootNo;
	if [ ! -e /etc/rc.local ]; then
        echo -e "#!bin/sh\n/usr/sbin/46--RebootReplace.sh\nexit 0"> /etc/rc.local
        chmod 777 /etc/rc.local;

else
	echo -e "#!bin/sh\n/usr/sbin/46--RebootReplace.sh\nexit 0"> /etc/rc.local
        chmod 777 /etc/rc.local;
	fi
	if [ ! -e $rc_etc ];then
		ln -s $rc_lit $rc_etc
       
	fi
	47--RebootTest.sh;
fi
if [ "$SELECTION" = "$SUSPEND"  ] ;then
	TestNo=` zenity  --entry --text="请您输入需要待机测试的次数" `;
	if [ -e $TestNo ] ;then 
		exit 
	fi
	echo $TestNo > /var/tmp/LogSuspendNo;
	chmod 666 /var/tmp/LogSuspendNo;
	49--SuspendTest.sh;
fi
if [ "$SELECTION"  =  "$SLEEP"  ] ;then
	TestNo=` zenity  --entry --text="请您输入需要休眠测试的次数" `;
	if [ -e $TestNo ] ;then 
		exit 
	fi
	echo $TestNo > /var/tmp/LogSleepNo;
	chmod 666 /var/tmp/LogSleepNo;
	48--SleepTest.sh;
fi

46–RebootReplace.sh

#!/bin/bash
#脚本功能:重置重启脚本改变的环境
#脚本思路:移除desktop、日志文件以及恢复其他相关状态
#使用方法:配合其他几个脚本使用,45--LongTestTools.sh这个脚本已经把另外的这些脚本整合起来了,所以最终执行时应该使用45
#使用环境:V10-desktop不要改这些脚本的名字

usrname=`cat /var/tmp/LogNames`;

if [ -e /var/tmp/Rebootfinish.log ] ;then
        rm -rf  /etc/xdg/autostart/RebootTest.desktop
        rm -rf /etc/lightdm/lightdm.conf
        mv /var/tmp/LogRebootTest /var/tmp/LogRebootTest-`date +'%Y-m-%d-%Hh%Mm%Ss'`
        mv /var/tmp/LogRebootNo /var/tmp/LogRebootNo-`date +'%Y-%m-%d-%Hh%Mm%Ss'`
        rm -rf /var/tmp/Rebootfinish.log
        rm -rf /var/tmp/LogNames
        sed -i '/\/usr\/sbin\/46--RebootReplace.sh/d' /etc/rc.local
        sed -i '/exit 0/d' /etc/rc.local

fi
if [ -e /var/tmp/RebootCancel.log ] ;then
        rm -rf  /etc/xdg/autostart/RebootTest.desktop
        rm -rf /etc/lightdm/lightdm.conf
        mv /var/tmp/LogRebootTest /var/tmp/LogRebootTest-`date +'%Y-%m-%d-%Hh%Mm%Ss'`
        mv /var/tmp/LogRebootNo /var/tmp/LogRebootNo-`date +'%Y-%m-%d-%Hh%Mm%Ss'`
        rm -rf /var/tmp/RebootCancel.log
        rm -rf /var/tmp/LogNames

        sed -i '/\/usr\/sbin\/46--RebootReplace.sh/d' /etc/rc.local
        sed -i '/exit 0/d' /etc/rc.local
fi

47–RebootTest.sh

#!/bin/bash
#脚本功能:重启测试脚本
#脚本思路:
#使用方法:配合其他几个脚本使用,45--LongTestTools.sh这个脚本已经把另外的这些脚本整合起来了,所以最终执行时应该使用45
#使用环境:V10-desktop不要改这些脚本的名字

uusrname=`cat /var/tmp/LogNames`;
total=`cat /var/tmp/LogRebootNo`;
Timeout=30;
timeall=$(($Timeout*10))

if [ ! -e /etc/xdg/autostart/RebootTest.desktop ]; then 
	echo -e  "[Desktop Entry]\nEncoding=UTF-8\nName=RebootTest\nType=Application\nExec=47--RebootTest.sh --autostart\nTerminal=false\nType=Application\nX-UKUI-AutoRestart=true\nOnlyShowIn=UKUI\nX-UKUI-Autostart-Phase=Application\nNoDisplay=true">/etc/xdg/autostart/RebootTest.desktop
	chmod 666 /etc/xdg/autostart/RebootTest.desktop
fi

if [ ! -e /var/tmp/LogRebootTest ] ;then
	echo "0">/var/tmp/LogRebootTest
	chmod 666 /var/tmp/LogRebootTest
fi

var=`cat /var/tmp/LogRebootTest`
if [ $var -eq $total ]; then 
	touch /var/tmp/Rebootfinish.log
	zenity --info --text="您已经完成了重启测试,系统将重新启动以恢复设置。"
	sync
	sleep 2
	sync
	reboot
	#exit
fi
#if [ $var -gt $total ]; then 
#	echo "0">/var/tmp/LogRebootTest;
#	var=`cat /var/tmp/LogRebootTest`;
#fi
let Addvar=$var+1
if [ $var -le $total ]; then  
        for ((i=10;i<$timeall;))
	do 
		let Timeout=$Timeout-1
		echo $i
		echo "#重启测试共$total次,系统将进行第$Addvar次重启测试,$Timeout秒后重启。"
		let i=$i+3
		sleep 1
	done | zenity --progress  --auto-close
	if [ `echo "$?"` -ne 0 ]; then 
		touch /var/tmp/RebootCancel.log
		zenity --info --text="您取消了重启测试,系统将重新启动以恢复设置"
		sync
		sleep 2
		sync
		reboot
		#exit
	fi

	echo $Addvar > /var/tmp/LogRebootTest
	sleep 2	
	sync
	reboot;
fi

48–SleepTest.sh

#!/bin/bash
#脚本功能:休眠测试脚本
#脚本思路:
#使用方法:配合其他几个脚本使用,45--LongTestTools.sh这个脚本已经把另外的这些脚本整合起来了,所以最终执行时应该使用45
#使用环境:V10-desktop不要改这些脚本的名字
#swapdisk=/dev/sda8

total=`cat /var/tmp/LogSleepNo`
Timeout=30;
timeall=$(($Timeout*10))
swapon -a;
while true
do
	if [ ! -e /var/tmp/logSleepTest ] ;then 
		echo "0" > /var/tmp/logSleepTest
	fi
	var=`cat /var/tmp/logSleepTest`
	if [ $var -eq $total ]; then  
		zenity --info --text="您已经完成了系统睡眠测试";
		echo "0" > /var/tmp/logSleepTest;
		echo "0" > /var/tmp/LogSleepNo;
		exit ;
	fi
	if [ $var -gt $total ]; then 
		echo "0" > /var/tmp/logSleepTest;
		 var=`cat /var/tmp/logSleepTest`;
	fi
	let Addvar=$var+1;
	if [ $var -le $total ]; then  
        	for ((i=10;i<$timeall;));do
			let Timeout=$Timeout-1;
			echo $i;
			echo "#共休眠测试$total次,当前睡眠第$Addvar次.$Timeout秒后休眠."; 
			sleep 1;
			let i=$i+3;
		done | zenity --progress  --auto-close ;
		if [ `echo "$?"` -ne 0 ]; then 
			zenity --info --text="您取消了休眠测试";
			echo "0" > /var/tmp/logSleepTest;
			echo "0" > /var/tmp/LogSleepNo;
			exit;
		fi
		echo $Addvar > /var/tmp/logSleepTest;
		echo "+60"> /sys/class/rtc/rtc0/wakealarm;
		#echo shutdown > /sys/power/disk; 
		echo reboot > /sys/power/disk; 
		echo disk > /sys/power/state;
	fi
done

49–SuspendTest.sh

#!/bin/bash
#脚本功能:待机测试脚本
#脚本思路:
#使用方法:配合其他几个脚本使用,45--LongTestTools.sh这个脚本已经把另外的这些脚本整合起来了,所以最终执行时应该使用45
#使用环境:V10-desktop不要改这些脚本的名字

total=`cat /var/tmp/LogSuspendNo`
Timeout=30;
timeall=$(($Timeout*10))
while true
do
	if [ ! -e /var/tmp/logSuspendTest ] ;then 
		echo "0" > /var/tmp/logSuspendTest
		chmod 666 /var/tmp/logSuspendTest
	fi
	var=`cat /var/tmp/logSuspendTest`
	if [ $var -eq $total ]; then  
		zenity --info --text="您已经完成了系统待机测试";
		echo "0" >  /var/tmp/logSuspendTest;
		echo "0" >  /var/tmp/LogSuspendNo;
		exit ;
	fi
	if [ $var -gt $total ];then 
		echo "0" > /var/tmp/logSuspendTest;
		var=`cat /var/tmp/logSuspendTest`
	fi
	let Addvar=$var+1;
	if [ $var -le $total ]; then  
        	for ((i=10;i<$timeall;));do
			let Timeout=$Timeout-1;
			echo $i;
			echo "#总共待机测试$total次,当前待机第$Addvar次.$Timeout秒后待机."; 
			sleep 1;
			let i=$i+3;
		done | zenity --progress  --auto-close ;
		if [ `echo "$?"` -ne 0 ]; then 
			zenity --info --text="您取消了系统待机测试";
			echo "0" >  /var/tmp/logSuspendTest;
			echo "0" >  /var/tmp/LogSuspendNo;
			exit;
		fi
		echo $Addvar > /var/tmp/logSuspendTest;
		echo "+60"> /sys/class/rtc/rtc0/wakealarm;
		echo  mem > /sys/power/state;
	fi
done

50–终极脚本-将所有脚本一键复制到博客.sh

#!/bin/bash
#脚本功能:将我所写好的脚本一键复制到博客,以便发布文章
#脚本思路:写博客的时候需要有标题,以及需要使用Markdown格式框住代码(powershell的形式),只需要echo出来脚本内容的同时,echo这些中间内容就好了
#使用方法:首先保证看得懂,看不懂也用不了。。。
#使用环境:首先是你得有脚本
#脚本编写:徐金宝--国防事业本部

for i in {01..50}
do
	j=`ls $i*` >> ~/test.sh			#把每个脚本的名称读出来,随便放到某个文件里,首先是得先创建这个文件
	echo "## $j" >> ~/test.sh		#给博客里每个脚本名称设置标题
	echo '```poweroff' >> ~/test.sh	#echo特定的Markdown格式符到文件
	cat $j >> ~/test.sh
	echo '```' >> ~/test.sh			#echo特定的Markdown格式结束符到文件
done
#这个第50个脚本跑一遍,能把这个目录里所有脚本(50个)的内容跑出来,并以博客形式存到文件里,写博客直接全复制即可,非常方便

本文标签: 脚本Shell