个人Shell脚本汇总集合

1.批量免密非交互设置except脚本

#!/bin/bash
echo -e "\033[32m这是一个expect的非交互式脚本,设置免密功能,前提客户端的用户名和密码要知道\033[0m"
echo -e "\033[32m用户名和密码要一致才能批量免密设置\033[0m"
echo -e "\033[32m在根目录下创建address文件,一行一个ip地址,将所有需要免密的主机ip填入\033[0m"
User=root
passWord=1
address=`cat /address`
rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null
if [ $? -gt 0 ];then
yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit)
fi
[ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh
echo -e "\033[32m正在创建密钥对....\033[0m"
rm -rf ~/.ssh/*
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" &>/dev/null
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
for ip in $address
do
ping $ip -c1 &>/dev/null    
if [ $? -gt 0 ];then        
echo -e "\033[32m$ip无法ping通请检查网络\033[0m"         
continue       
fi 
sshpass -p "$passWord" ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no ${User}@$ip &>/dev/null    
echo -e  "\033[32m$ip 密钥分发成功\033[0m"
done

2.shell中各个$后面代表的含义内容

 shell中$#等含义

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

3.检查服务器运行状态脚本 通过交互式手动传递参数的方式

[root@tzPC ~]# cat check.sh
#!/bin/bash
if [ $# -ge 1 ] ;then
        systemctl status $1 > /dev/null
        if [ $? -eq 0 ];then
                echo "$1 服务正在运行!"
        else
                systemctl start $1
        fi
else
        echo "执行脚本的格式"
        echo "sh $0 服务名"
fi

4.找出192.168.1.1-10网段中,服务器已经关机的IP地址

[root@tzPC ~]#  cat ping.sh
#!/bin/bash
i=1
for (( i=1;i<10;i++ ))
do
        ping -c 3 192.168.1.$i &>/dev/null
        if [ $? -ne 0 ] ;then
                echo 192.168.1.$i is shutdown
        fi
done

5.配置本地yum源步骤如下

#!/bin/bash
mkdir /root/all.repo
cd /etc/yum.repos.d/
mv * /root/all.repo 
rm -rf * 
mount -t iso9660 /dev/sr0 /mnt
cat >local.repo<<EOF
[mnt]
name=mnt
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
yum clean all 
yum makecache
yum repolist
sleep 5
echo -e "\033[32mWelcome To Use Local Yum , Successfully\033[0m"
yum -y install lrzsz-*

6.关闭防火墙、Selinux,安装tab键、ifconfig命令,vim编辑器,rz、sz传书工具、下载工具wget等

#!/bin/bash
echo -e "\033[32m关闭防火墙和开机自启动\033[0m"
systemctl stop    firewalld
systemctl disable firewalld 

echo -e "\033[32m永久关闭Selinux\033[0m"
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'   /etc/selinux/config

echo -e "\033[32m安装tab、ifconfig命令、vim、lrzsz、wget软件包工具\033[0m"
yum -y install bash-completion* net-tools* vim* lrzsz* wget*

echo -e "\033[32m基本配置成功,Welcome To Use It ,Successfully\033[0m"

echo -e "\033[32m稍后重启系统,加载内核使更改生效\033[0m"
sleep 5
reboot

7.通过传递一个位置参数,判断文件是否存在,如果存在就备份,不存在就退出,存在每次被更改并记录到被更改的文件里记录每次增加了什么内容。

#!/bin/bash
date1=`date +'%Y-%m-%d_%H:%m:%S'`
cd $1                              #$1这里是传递一个参数到你想去的路径
aa="1.txt"                         #这个1.txt是你所在的路径下手动更改要找的文件名字,进行更改 

if [[ -f "./$aa"  ]];then
	echo -e "\033[32m配置文件存在\033[0m"
		if [ $? -eq 0 ];then
		echo -e "\033[32m备份存在的原文件\033[0m"
		cp "./$aa"  "/tmp/$aa-$date1.bak"
		fi
else
	echo -e "\033[32m配置文件不存在\033[0m"
	exit 0

fi

bb=`/usr/bin/md5sum  ./$aa`
echo "$date1" >>src-md5.log 
md5sum  $aa >>src-md5.log 
yuan=`/usr/bin/md5sum /tmp/$aa-$date1.bak`
md5sum /tmp/$aa-$date1.bak >>src-md5.log 


#if [[ -f "./$aa"  ]];then
#    cp "./$aa"  "/tmp/$aa-$date1.bak"
#fi

if [[ $bb = $yuan   ]];then
    echo "文件没有变化"
else
    echo "文件存在,已经备份原文件到/tmp/下"

sleep 10
echo  " "       >> /tmp/diff.log
echo  $date1   >> /tmp/diff.log
diff   `find /tmp/ -name "*.bak" |awk 'NR==1'`    /tmp/$aa-$date1.bak  &>>/tmp/diff.log
fi
  1. ISO镜像最小化安装完的Redhat操作系统配置本地redhat的本地yum源
#!/bin/bash
mkdir  /mnt/redhatyum01
cd /dev/cdrom
scp * root@192.168.217.149:/mnt/redhatyum01/    #这里的IP换成你自己客户端的相应IP
cd /etc/yum.repos.d/
rm -rf  /etc/yum.repos.d/*
cat >local.repo<<EOF
[rhel7]
name=rhel7
baseurl=file:///mnt/redhatyum01
enabled=1
gpgcheck=0
EOF

#命令行上执行如下
#yum clean all
#yum repolist
#yum -y install vim* lrzsz-* 

9.检查系统环境下的所有进程的pid

#!/bin/bash
#Date 2020-09-11
#Author Mr Wang
#This is a check System all of Users PIDS Scripts !
#检查内容输出结果包括users PIDS stat 
checkpid=`ps aux|awk -F ' ' '{ print $1 $2 $8 }'`
if [ $? -eq 0 ];then
	echo -e "\e[32m $checkpid is still exist\e[0m"
else
	echo -e "\e[32m $checkpid is not exist\e[0m"
	echo -e "\e[32m 如果您的进程不存在,请启动你想要的相关进程服务\e[0m"
fi

echo -e "\e[32mSystem PIDS Are Checked ,Successfully\e[0m"

10.给Root设置随机生成密码,并把相应的主机IP地址和实时随机密码记录到ip.txt文件中

#!/bin/bash
#随机给root设置密码并记录到文件
#Author Mr Wang
#Date 2020-09-23
#查看主机IP地址信息
IPAddress=`ifconfig |grep 'inet '|head -1|awk '{print $2}'|sed 's/addr://g'`
#输出实时时间信息
date=`date +"%y%m%d-%H:%M:%S"`
#把时间记录到ip.txt中
echo $date >>ip.txt
#把IP地址记录到IP文件列表中
echo "IPaddress Is :$IPAddress"  >>ip.txt
#设置root生成随机密码记录到文件中
Random=`date +%s |sha256sum |base64 |head -c 10`
echo "$IPAddress Passwd: $Random" >> ip.txt
#给root添加随机密码
echo "$Random" |passwd --stdin root 

如下是自我整理优化的部分内容

#!/bin/bash
#随机给root设置密码并记录到文件
#Author Mr Wang
#Date 2020-09-23
##mkdir -p  /root/Ipinfo/
#查看主机IP地址信息
IPAddress=`ifconfig |grep 'inet '|head -1|awk '{print $2}'|sed 's/addr://g'`
#输出实时时间信息
date=`date +"%y%m%d-%H:%M:%S"`
#把时间记录到ip.txt中
echo $date >>"/tmp/${IPAddress}_ip.txt"
#把IP地址记录到IP文件列表中
echo "IPaddress Is :$IPAddress"  >>"/tmp/${IPAddress}_ip.txt"
#设置root生成随机密码记录到文件中
Random=`date +%s |sha256sum |base64 |head -c 10`
echo "$IPAddress Passwd: $Random" >>"/tmp/${IPAddress}_ip.txt"
#给root添加随机密码
echo "$Random" |passwd --stdin root


#sleep 3
#
#function scpiptxt(){
   
#for i in `cat /root/iplist`
#do
#        scp root@$i:/tmp/${IPAddress}_ip.txt  /root/Ipinfo/
#
#done
#}

1.设置root密码脚本
首先执行脚本
bash /root/spawnpasswd.sh
最终都记录到了/tmp/*.txt
2.书写iplist列表把所有客户端ip都写进去
[root@node147 ~]# cat /root/iplist 
192.168.217.146
192.168.217.149
3.在ansible主机上单独执行拷贝客户端信息文件到/root/Ipinfo/
vim scpclient.sh

for i in `cat /root/iplist`
do
        scp root@$i:/tmp/*.txt  /root/Ipinfo/

done

#ansible all -m copy -a "src=/root/spawnpasswd.sh dest=/root/"
#ansible all -m shell -a 'bash /root/spawnpasswd.sh'

#在ansible主机上执行
#mkdir -p /root/Ipinfo
# bash scpclient.sh

11.通过如下代码Ansible本地脚本执行把密码本地和客户端各保存一份
a.先写好更改用户密码脚本
#vim /root/lianxi/random_change_rootpasswd.sh

#!/bin/bash
Userparamter="lisi"   #这里你要改成你自己的用户名
Hostipaddr=`ifconfig |grep 'inet '|head -1|awk '{print $2}'|sed 's/addr://g'`
#Randompasswd=`date +%s |sha256sum |base64 |head -c 12`
Randompasswd=`openssl rand -base64 32 |cut -c 1-12`
Tempdate=`date +"%y%m%d-%H:%M:%S"`

echo "$Tempdate,主机:$Hostipaddr,用户名:$Userparamter,密码:$Randompasswd"
echo "$Tempdate,主机:$Hostipaddr,用户名:$Userparamter,密码:$Randompasswd" >>/root/passwd.txt
echo "$Randompasswd"|passwd --stdin $Userparamter

b.之后用ansible管理主机把所有脚本传到客户端路径下
#ansible all -m copy -a “src=/root/lianxi/random_change_rootpassd.sh dest=/root/”
c.书写playbook用ansible在本地执行实时追加密码信息到相应的文件中
vim /root/lianxi/changeradom.yaml

---
- hosts: all
  remote_user: root
  tasks:
    - name: run this scripts
      shell: bash  /root/random_change_rootpassd.sh
      register: test
    - debug: var=test

d.执行yaml脚本并记录到本地信息保存密码数据
ansible-playbook changeradom.yaml >>/root/11.txt
f.在ansible本地用grep过滤出相应的信息查看密码数据
#grep 密码 /root/11.txt|grep -v stdout
g.最终我这里的随机生成的密码都在/root/passwd.txt中

12.关于playbook的书写小计整理

# 创建playbook文件
[root@ansible ~]# cat playbook01.yml
---                       #固定格式
- hosts: 192.168.1.31     #定义需要执行主机
  remote_user: root       #远程用户
  vars:                   #定义变量
    http_port: 8088       #变量

  tasks:                             #定义一个任务的开始
    - name: create new file          #定义任务的名称
      file: name=/tmp/playtest.txt state=touch   #调用模块,具体要做的事情
    - name: create new user
      user: name=test02 system=yes shell=/sbin/nologin
    - name: install package
      yum: name=httpd
    - name: config httpd
      template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify:                 #定义执行一个动作(action)让handlers来引用执行,与handlers配合使用
        - restart apache      #notify要执行的动作,这里必须与handlers中的name定义内容一致
    - name: copy index.html
      copy: src=/var/www/html/index.html dest=/var/www/html/index.html
    - name: start httpd
      service: name=httpd state=started
  handlers:                                    #处理器:更加tasks中notify定义的action触发执行相应的处理动作
    - name: restart apache                     #要与notify定义的内容相同
      service: name=httpd state=restarted      #触发要执行的动作

13.网络分析shell脚本(实时流量+连接统计)
链接地址:
https://www.cnblogs.com/yangjig/archive/2004/01/13/6085417.html
脚本下载地址:https://www.centos.bz/wp-content/uploads/2014/06/network-analysis.sh
下面贴出完整的脚本:

#!/bin/bash
 
#write by zhumaohai(admin#centos.bz)
#author blog: www.centos.bz
 
 
#显示菜单(单选)
display_menu(){
   
local soft=$1
local prompt="which ${soft} you'd select: "
eval local arr=(\${${soft}_arr[@]})
while true
do
    echo -e "#################### ${soft} setting ####################\n\n"
    for ((i=1;i<=${#arr[@]};i++ )); do echo -e "$i) ${arr[$i-1]}"; done
    echo
    read -p "${prompt}" $soft
    eval local select=\$$soft
    if [ "$select" == "" ] || [ "${arr[$soft-1]}" == ""  ];then
        prompt="input errors,please input a number: "
    else
        eval $soft=${arr[$soft-1]}
        eval echo "your selection: \$$soft"             
        break
    fi
done
}
 
#把带宽bit单位转换为人类可读单位
bit_to_human_readable(){
   
    #input bit value
    local trafficValue=$1
 
    if [[ ${trafficValue%.*} -gt 922 ]];then
        #conv to Kb
        trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'`
        if [[ ${trafficValue%.*} -gt 922 ]];then
            #conv to Mb
            trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'`
            echo "${trafficValue}Mb"
        else
            echo "${trafficValue}Kb"
        fi
    else
        echo "${trafficValue}b"
    fi
}
 
#判断包管理工具
check_package_manager(){
   
    local manager=$1
    local systemPackage=''
    if cat /etc/issue | grep -q -E -i "ubuntu|debian";then
        systemPackage='apt'
    elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then
        systemPackage='yum'
    elif cat /proc/version | grep -q -E -i "ubuntu|debian";then
        systemPackage='apt'
    elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then
        systemPackage='yum'
    else
        echo "unkonw"
    fi
 
    if [ "$manager" == "$systemPackage" ];then
        return 0
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值