leo linux shell 脚本汇编

目录

项目难度key
输出一行文字1echo
输出若干行文字脚本2<< EOF
输出若干行文字到指定文件脚本3
1
1
创建若干文件夹脚本5seq
创建若干文件脚本10
1
1
验证本机某端口是否打开4lsof
验证本机若干端口是否打开10数组用法
1
批量启动zookeeper 服务器8
批量查看zk服务器是否启动4
1
定时备份数据库10mysqldump
批量关闭虚拟机(文件中读取列表)7
批量关闭虚拟机(手工指令列表)7
1
1

标题1

要求

实现过程描述

实现脚本

备注

01 输出一行文字

实现脚本

[root@shell37 ~]# vim echotxt.sh 
echo hello world!
[root@shell37 ~]# sh echotxt.sh 
hello world!

备注

02 输出若干行文字

实现脚本

[root@shell37 ~]# vim echosomeline.sh 
cat << EOF
hello wold!
i love u
this is tiza
this is leo
this is end
!
EOF

[root@shell37 ~]# sh echosomeline.sh 
hello wold!
i love u 
this is tiza
this is leo
this is end
!

备注

cat << EOF ----表示 将后面的输入交给cat 显示
在shell中,文件分界符(通常写成EOF,你也可以写成FOE或者其他任何字符串)紧跟在<<符号后,意思是分界符后的内容将被当做标准输入传给<<前面的命令,直到再次在独立的一行遇到这个文件分界符(EOF或者其他任何字符,注意是独立一行,EOF前面不能有空格)。通常这个命令是cat,用来实现一些多行的屏幕输入或者创建一些临时文件。

03 输出若干行文字到指定文件

实现脚本

把输出追加到文件 写法一:

[root@shell37 ~]# vim echosomeline2txt.sh 
cat << EOF > ./someline.txt
hello wold!
i love u
this is tiza
this is leo
this is end
!
EOF

[root@shell37 ~]# sh echosomeline2txt.sh 
当前目录下会有文件someline.txt 生成
-rw-r--r--. 1 root root   60 Mar 16 08:08 someline.txt
[root@shell37 ~]# cat someline.txt 
hello wold!
i love u
this is tiza
this is leo
this is end
!

把输出追加到文件 写法2:

cat >./someline2.txt << EOF
hello wold!
i love u
this is second someline
EOF
~

备注

2、把输出追加到 out.txt 文件
root@******:~# cat<out.txt


输出重定向到空设备文件

要求

实现过程描述

Linux下使用shell命令时经常使用类似这样的Shell输出重定向:
1>/dev/null 2>&1
在Shell命令的结尾,我们可以通过>符号来重定向输出。

  1. 标准输入stdin文件描述符为0,标准输出stdout文件描述符为1,标准错误stderr文件描述符为2
  2. /dev/null 空设备文件,相当于垃圾桶
  3. 重定向符号:>
    逐一解释上面的Shell重定向命令:
    (1) >符号代表输出重定向
    (2) >前面的数字:
    0代表标准输入
    1代表stdout标准输出,默认值为1,所以”1>/dev/null”可以简写为”>/dev/null”
    2代表stderr标准错误输出
    (3)2>&1代表把stderr标准错误输出 重定向 到stdout标准输出
    所以,1>/dev/null 2>&1的解释就是
    将stdout标准输出重定向到空设备文件/dev/null ,同时将stderr标准错误输出的重定向跟stdout标准输出重定向一致,也输出到空设备文件/dev/null。
    https://blog.csdn.net/sunxiaopengsun/article/details/83623495

实现脚本

// 正常 的输出打印 
[root@storm51 ~]# echo aaaa
aaaa
// 输出重定向到Null  
[root@storm51 ~]# echo aaaa 1>/dev/null 2>&1
[root@storm51 ~]# 

备注

04 创建文件夹

要求

/opt/leoShell/leoL1 文件夹下创建三个文件夹

实现过程描述

实现脚本

[root@aliyunleo leoShell]# vim shell_01_mkdir.sh
[root@aliyunleo leoShell]# sh shell_01_mkdir.sh 

for num in $(seq 1 3);
do
  mkdir -p /opt/leoShell/leoL1/leoL2_0${num}
done

备注

[root@aliyunleo leoShell]# pwd
/opt/leoShell
[root@aliyunleo leoShell]# tree
.
├── leoL1
│   ├── leoL2_01
│   ├── leoL2_02
│   └── leoL2_03
└── shell_01_mkdir.sh
4 directories, 1 file

11 创建文件

要求

/opt/leoShell/leoL2 文件夹下创建三个文件,并作有效输入内容

实现过程描述

实现脚本

[root@aliyunleo leoShell]# pwd
/opt/leoShell

[root@aliyunleo leoShell]# vim shell_02_mkfile.sh 
for num in $(seq 1 3);
do
        mkdir -p /opt/leoShell/leoL2
        touch /opt/leoShell/leoL2/script-00${num}.sh
        cat << EOF >/opt/leoShell/leoL2/script-00${num}.sh
this is num 00${num}; hello man!
EOF
done

[root@aliyunleo leoShell]# sh shell_02_mkfile.sh 
[root@aliyunleo leoShell]# tree leoL2
leoL2
├── script-001.sh
├── script-002.sh
└── script-003.sh
0 directories, 3 files
[root@aliyunleo leoShell]# cat leoL2/script-001.sh 
this is num 001; hello man!

备注

21 验证本机端口是否开启

要求

实现过程描述

实现脚本

[root@10-1-129-151 ~]# vim port_is_open.sh 

#!/bin/bash
port=80
str=`lsof -i:80 | wc -l`
if [ "$str" -gt "0" ];then
    echo "$port is open" 
else
    echo "$port is closed" 
fi

[root@10-1-129-151 ~]# sh port_is_open.sh 
80 is closed

备注

22 验证本机多个端口是否开启

要求

实现过程描述

实现脚本

[root@10-1-129-151 ~]# vim ports_is_open.sh 

#!/bin/bash
ports=(22 23 80 8080 6379)
echo "数组元素个数为: ${#ports[@]}"

for port in ${ports[@]};
do

str=`lsof -i:$port | wc -l`
if [ "$str" -gt "0" ];then
    echo "$port is open" 
else
    echo "$port is closed" 
fi

done


[root@10-1-129-151 ~]# sh ports_is_open.sh 
数组元素个数为: 5
22 is open
23 is closed
80 is closed
8080 is closed
6379 is closed


备注

31 验证多台服务器某个端口是否打开

要求

实现过程描述

实现脚本


[root@10-1-129-151 shelltest]# cat ip.txt 
10.1.129.151
10.1.129.161
[root@10-1-129-151 shelltest]# cat remote_port_is_open.sh 
#!/bin/bash

IP_FILES="./ip.txt"
COMMAND="$*"

for IP in `cat $IP_FILES`
do
  
  # 验证指定IP 22 端口是否开启 
   echo -e "\033[32mThe $IP : port 22  results:\033[0m"
   nc -zvw3 $IP 22
   echo 


done

[root@master ~]# chmod +x remote_port_is_open.sh

[root@10-1-129-151 shelltest]# sh remote_port_is_open.sh 

---- 22 已开启
The 10.1.129.151 : port 22  results:
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.1.129.151:22.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

---- 22 已开启
The 10.1.129.161 : port 22  results:
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.1.129.161:22.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

备注

31验证多台服务器多个端口是否打开

要求

实现过程描述

实现脚本

[root@10-1-129-151 shelltest]# cat ip.txt 
10.1.129.151
10.1.129.161

[root@10-1-129-151 shelltest]# cat port.txt 
22
80

[root@10-1-129-151 shelltest]# cat remote_multiple_port_is_open.sh 
#!/bin/bash
for ip in `more ip.txt`
do
   for port in `more port.txt`
   do
        echo -e "\033[32mThe $ip $port results:\033[0m"
        nc -zvw3 $ip $port
        echo 
   done

done

[root@10-1-129-151 shelltest]# chmod +x remote_multiple_port_is_open.sh 


结果

[root@10-1-129-151 shelltest]# sh remote_multiple_port_is_open.sh 
The 10.1.129.151 22 results:
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.1.129.151:22.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

The 10.1.129.151 80 results:
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.

The 10.1.129.161 22 results:
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.1.129.161:22.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

The 10.1.129.161 80 results:
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.

41 定时备份数据库

要求

平台已经安装过Mysql ,如果没有安装过mysql 详见
linux centos 安装 mysql5.7
https://blog.csdn.net/wei198621/article/details/115052757
可以通过下面语句测试mysql 是否安装,及是否可以正常使用,
本示例mysql 安装在 38 机器上面


Last login: Mon Mar 22 08:01:28 2021 from 192.168.121.1
[root@shell38 ~]# systemctl status mysqld
   Active: active (running) since Mon 2021-03-22 08:01:40 PDT; 22h ago
  ... ... 
[root@shell38 ~]# mysql -u root -p
Enter password: root198621
......
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| leodb              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use leodb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------+
| Tables_in_leodb |
+-----------------+
| myorder         |
+-----------------+
1 row in set (0.01 sec)

mysql> select * from myorder;
+------+------+
| id   | name |
+------+------+
|  100 | dog  |
+------+------+
1 row in set (0.09 sec)

mysql> 

实现过程描述

在这里插入图片描述

  1. 脚本在 /usr/sbin/mysql_db_backup.sh (root用户操作)
  2. crond 调度 leodb 到 /data/backup/db
  3. 备份后的文件要打包成 ###.tar.gz 形式 如2021-03-21_202020.tar.gz
  4. 检查是否有十天前的备份文件存在,如果有,删除
在这里插入代码片



--第一步验证  结果
 [root@shell38 sbin]# sh mysql_db_backup.sh 
2021-03-23_072605

--第二步验证  结果 
[root@shell38 2021-03-23_072605]# pwd
/data/backup/db/2021-03-23_072605


--第三步验证  结果 
[root@shell38 2021-03-23_072605]# pwd
/data/backup/db/2021-03-23_072605
[root@shell38 2021-03-23_072605]# ll
total 4
-rw-r--r--. 1 root root 750 Mar 23 07:26 2021-03-23_072605.sql.gz
---------------解压gz文件
[root@shell38 2021-03-23_072605]# gunzip 2021-03-23_072605.sql.gz 
[root@shell38 2021-03-23_072605]# ll
total 4
-rw-r--r--. 1 root root 2033 Mar 23 07:26 2021-03-23_072605.sql
[root@shell38 2021-03-23_072605]# cat 2021-03-23_072605.sql 
-- MySQL dump 10.13  Distrib 5.7.33, for Linux (x86_64)
--
-- Host: localhost    Database: leodb
-- ------------------------------------------------------
-- Server version       5.7.33
--
-- Current Database: `leodb`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `leodb` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `leodb`;
-- Table structure for table `myorder`
DROP TABLE IF EXISTS `myorder`; 
CREATE TABLE `myorder` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

INSERT INTO `myorder` VALUES (100,'dog');
 


--第四步验证  结果 
[root@shell38 db]# pwd
/data/backup/db
[root@shell38 db]# ll
total 4
-rw-r--r--. 1 root root 985 Mar 23 07:39 2021-03-23_073920.tar.gz
[root@shell38 db]# 


--第五步验证  结果 
[root@shell38 sbin]# sh mysql_db_backup.sh 
2021-03-23_074508
mysqldump: [Warning] Using a password on the command line interface can be insecure.
2021-03-23_074508/
2021-03-23_074508/2021-03-23_074508.sql.gz
backup database leodb success 

--第五步
[root@shell38 db]# crontab -l
30 2 * * * /usr/sbin/mysql_db_backup.sh

实现脚本

[root@shell38 sbin]# pwd
/usr/sbin
[root@shell38 sbin]# cat mysql_db_backup.sh 
#!/bin/bash

#backup dir
BACKUP=/data/backup/db
#current time 
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#------------------------------------stop and test 01 
echo $DATETIME

#address
HOST=localhost
#user
DB_USER=root
#pass
DB_PW=root198621
#db
DATABASE=leodb

# create backup dir if not exist then create 
# current shou test it could create a directory  
# /data/backup/db/2021-03-23_071543
#------------------------------------stop and test 02 
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#backup db
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

#------------------------------------stop and test 03 
#mk  gz to tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# delete  the dir before
rm -rf ${BACKUP}/${DATETIME}

#------------------------------------stop and test 04
 
# remove the files 10 days 
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm {} \;

echo "backup database ${DATABASE} success "
[root@shell38 sbin]# 

备注

批量关闭虚拟机(文件中读取列表)

要求

实现过程描述

仿照文章
https://blog.csdn.net/qq_43083688/article/details/109730518
在这里插入图片描述

实现脚本

[root@centos7-7 bin]# pwd
/usr/local/bin
[root@centos7-7 bin]# ll
-rw-r--r--. 1 root root 186 Apr 11 00:57 shutdownorder4stormlist.txt
-rwxr--r--. 1 root root 776 Apr 11 00:55 shutdownorder4storm.sh
[root@centos7-7 bin]# cat shutdownorder4storm.sh 
#!/bin/bash
while true ;do
host=`awk 'NR>1{print $1}' /usr/local/bin/shutdownorder4stormlist.txt | sort -r`
echo "
1. shutdown all hosts
2. reboot all hosts
3. exit
"
read -p "please input option: " option
case $option in  
1) 
        echo "===========shutdown now============"
        for hosts in ${host} 
        do 
                ssh -f $hosts  shutdown -h now && echo -e "\033[32m ${hosts} has closed 33[0m" || echo -e "\033[31;5m ${hosts} close failed  \033[0m"
                sleep 1;
        done
;;  
2)
    echo "===========reboot============"
    for hosts in ${host}
    do
                ssh -f $hosts reboot && echo -e "\033[32m ${hosts} has rebooted \33[0m" || echo -e "\033[31;5m ${hosts}reboot failed \033[0m"
                sleep 1;
    done
;;
3|exit|quit|e|q)
        exit;
;;
*)
        echo "INput args Error!!"
;;
esac
done
[root@centos7-7 bin]# 
[root@centos7-7 bin]# cat shutdownorder4stormlist.txt 
# current file is for storm  include storm  zk 
192.168.121.111  zk1
192.168.121.112  zk2
192.168.121.113  zk3
192.168.121.51   storm51
192.168.121.52   storm52
192.168.121.53   storm53

备注

批量关闭虚拟机(手工指令列表)

要求

实现过程描述

shutdownorder4anyhosts.sh zk1 zk2 zk3
zk1 zk2 为 /etc/hosts 中指定过的名称 ,也可以直接是Ip地址
shutdownorder4anyhosts.sh 192.168.121.111

实现脚本

[root@centos7-7 bin]# pwd
/usr/local/bin
[root@centos7-7 bin]# ll
-rwxr--r--. 1 root root 703 Apr 11 01:08 shutdownorder4anyhosts.sh
[root@centos7-7 bin]# cat shutdownorder4anyhosts.sh 
#!/bin/bash
while true ;do
host=$@
echo "
1. shutdown all hosts
2. reboot all hosts
3. exit
"
read -p "please input option: " option
case $option in  
1) 
        echo "===========shutdown now============"
        for hosts in ${host} 
        do 
                ssh -f $hosts  shutdown -h now && echo -e "\033[32m ${hosts} has closed 33[0m" || echo -e "\033[31;5m ${hosts} close failed  \033[0m"
                sleep 1;
        done
;;  
2)
    echo "===========reboot============"
    for hosts in ${host}
    do
                ssh -f $hosts reboot && echo -e "\033[32m ${hosts} has rebooted \33[0m" || echo -e "\033[31;5m ${hosts}reboot failed \033[0m"
                sleep 1;
    done
;;
3|exit|quit|e|q)
        exit;
;;
*)
        echo "INput args Error!!"
;;
esac
done
[root@centos7-7 bin]# 
[root@centos7-7 bin]# shutdownorder4anyhosts.sh zk1 zk2 zk3

1. shutdown all hosts
2. reboot all hosts
3. exit

please input option: 1
===========shutdown now============
...
...

备注

批量启动zookeeper 服务器

要求

实现过程描述

实现脚本

[root@centos7-7 bin]# pwd
/usr/local/bin
[root@centos7-7 bin]# cat ctlzookeeperauto.sh 
#!/bin/bash
case $1 in 
"start"){
    for i in zk1 zk2 zk3 
    do
        echo "***************$i***********"
        ssh $i "/root/zookeeper-3.4.12/bin/zkServer.sh start /root/zkdata/zoo.cfg"
    done
};;

"stop"){
    for i in zk1 zk2 zk3 
    do
        echo "***************$i***********"
        ssh $i "/root/zookeeper-3.4.12/bin/zkServer.sh stop /root/zkdata/zoo.cfg"
    done
};;
esac
[root@centos7-7 bin]# ll

备注

批量查看zk服务器是否启动

要求

实现过程描述

实现脚本

[root@centos7-7 bin]# cat xcallzk.sh 
#!/bin/bash
params=$@
i=1
for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do
    echo ============= zk$i $params =============
    ssh zk$i "$params"
done

执行过程 ,此过程需要配置 jps 指令的软连接

 xcallzk.sh jps  
[root@centos7-7 bin]# pwd
/usr/local/bin
[root@centos7-7 bin]# ll
-rwxr--r--. 1 root root 394 Apr  8 06:06 ctlzookeeperauto.sh
lrwxrwxrwx. 1 root root  36 Apr  8 06:09 jps -> /usr/local/java/jdk1.8.0_251/bin/jps
-rwxr--r--. 1 root root 145 Apr  8 06:06 xcallzk.sh

备注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值