目录
第五章:处理海量数据的grep、cut、awk、sed 命令
第六章:神奇的循环控制语句if 、for、case、while
第一章:shell介绍
1、shell简介
Shell是一种脚本语言,又是一种命令语言,可以通俗一点来讲,Shell脚本就是一系列命令的集合,可以在Unix/linux上面直接使用,并且直接调用大量系统内部的功能来解释执行程序把一些重复性工作交给shell做,来实现自动化运维。
Shell 虽然没有C/C++、Java、Python等强大,但也支持了基本的编程元素。例如:if、for、while等循环,还有变量、数组、字符串、注释、加减乘除逻辑运算等。
2、shell应用场景
Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件
- 监控linux系统环境的使用情况
- 数据的处理。eg:日志的切割、分析、统计等
- 与数据库的交互,对数据库进行增,删,改,查等操作
- 监控进程,自动化启停服务进程
- 完成一些重复性的工作。eg:创建100个新用户;到服务器集群配置某个文件等
第二章:shell的使用技巧
1、vi编辑器的基本使用
【第三章第五节】
2、shell常见的解释器
(1)解释器理解
一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行
(2)常见解释器
# !/bin/bash(默认)
# !/bin/ksh
# !/bin/bsh
# !/bin/sh
(3)编写shell脚本
vi first.sh
//脚本内容
# !/bin/bash
# 作者:YYL
# 编写时间:2024-03-23
# 功能:this is my first shell !
echo "this is my first shell !"
注意:shell一定要有解释器吗?----------不一定
3、shell脚本文件权限与脚本执行
(1)shell脚本文件权限
文件权限
|
- rw- r-- r--
|
目录权限
|
d rw- r-- r--
|
(2)shell脚本执行
方法1:添加执行权限 chmod +x shell.sh 然后执行 ./shell.sh
方法2:sh shell.sh 或者bash shell.sh
方法3:source shell.sh
第三章:shell的变量以及常见符号
1、常见变量
不同于其他语言需要先声明变量再调用,shell的变量直接使用,如下:
//赋值
a=15
//调用变量
echo $a 或者 echo ${a}
常用的变量如下:
变量 | 含义 |
$? | 判断上一条命令执行的是否成功 |
$0 | 返回脚本的文件名称 |
$1-$9 | 返回对应的参数值,即第一个参数、第二个参数...... |
$* | 返回所有的参数值 |
$# | 返回参数的个数和 |
新建一个test脚本,简单使用上述变量,执行情况如下:
#!bin/bash
# 作者:YYL
# 编写时间:2024-03-25
# 功能:shell变量使用情况
echo "脚本名称:$0"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "第四个参数是:$4"
echo "共输入了 $# 个参数"
echo "输入的参数都有哪些:$*"
2、常用的几个符号
符号 | 含义 |
> | 追加内容会覆盖原有的内容 |
>> | 追加内容不会覆盖原有的内容 |
; | 执行多条命令 |
| | 管道符 |
&& | 前面的命令执行成功,后面的才可以执行 |
|| | 前面的命令执行失败,后面的才可以执行 |
"" | 会输出变量值 |
'' | 会直接输出引号内本身的内容 |
`` | 输出命令的结果 ,如:a=`date`;echo $a |
2> | 错误输出 如:2> /dev/null 错误输出到无底洞 |
1> | 正确输出 |
3、秒变计算器的运算符
(1)整数
计算方式 | 数字运算 | 变量运算 |
加 | expr 12 + 6 | expr $a + $b |
echo $[12 + 6] | echo $[a + b] | |
echo $((12 + 6)) | echo $((a + b)) | |
减 | expr 12 - 6 | expr $a - $b |
echo $[12 - 6] | echo $[a - b] | |
echo $((12 - 6)) | echo $((a - b)) | |
乘 | expr 12 \* 6 | expr $a \* $b |
echo $[12 * 6] | echo $[a * b] | |
echo $((12 * 6)) | echo $((a * b)) | |
除 | expr 12 / 6 | expr $a / $b |
echo $[12 / 6] | echo $[a / b] | |
echo $((12 / 6)) | echo $((a / b)) | |
求余 | expr 12 % 6 | expr $a % $b |
echo $[12 % 6] | echo $[a % b] | |
echo $((12 % 6)) | echo $((a % b)) |
(2)小数
在进行小数计算时,需要用到【bc计算器】,直接输入【bc】即可进入计算器,其中<scale>可以设置保留几位小数,不过它只对除法、取余数、乘幂有效,对加减无效
用命令使用bc计算器来计算,如下:
计算命令 | 计算结果 |
echo "scale=2;(0.2+0.3)/1" | bc | 计算出0.2+0.3的和并保留两位小数,此时bc计算器会省略掉个位数的0 |
echo "scale=2;(1.2+1.3)/1" | bc | 计算出1.2+1.3的和并保留两位小数 |
注意:使用bc计算器计算出来的结果如果是零点几,那么前面的零忽略不显示
4、常见的条件判断
条件判断语法:[ 判断表达式 ]
(1)文件(夹)/路径判断
参数 | 参数说明 | 举例 | 举例说明 |
-e | 目标是否存在 | [ -e for.sh ] || touch for.sh | 判断当前目录下是否有for.sh文件,假如没有就创建一个for.sh文件 |
-d | 是否为路径 | [ -d /home/LL ] && echo '/home/LL存在' | 查看 /home/LL 该路径是否存在,存在则返回【/home/LL存在】的信息;不存在则无信息返回 |
-f | 是否为文件 | [ -f first.sh ] && echo 'first.sh是一个文件' | 判断first.sh是否为文件,如果是,则输出【first.sh是一个文件】的信息,如果不是,则无信息返回 |
(2)权限判断
参数 | 参数说明 | 举例 | 举例说明 |
-r | 是否有读取权限 | [ -r for.sh ] && echo '有读取权限' | 判断for.sh文件有读取权限并输出信息 |
-w | 是否有写入权限 | [ -w for.sh ] && echo '有写入权限' | 判断for.sh文件有写入权限并输出信息 |
-x | 是否有执行权限 | [ -x first.sh ] && echo 'first.sh 文件有执行权限' | 判断first.sh文件是否有执行权限,如果有,则输出【first.sh 文件有执行权限】的信息,如果没有,则无 |
(3)整数型判断
参数 | 参数说明 | 举例 |
-eq | 等于(equal) | [ 8 -eq 8 ] && echo '8 等于 8' |
-ne | 不等于(not equal) | [ 9 -ne 8 ] && echo '9 不等于 8' |
-gt | 大于(greater than) | [ 9 -gt 8 ] && echo '9 大于 8' |
-lt | 小于(lesser than) | [ 7 -lt 8 ] && echo '7 小于 8' |
-ge | 大于或者等于(greater or equal) | [ 9 -ge 8 ] && echo '9 大于或者等于 8' |
-le | 小于或者等于(lesser or equal) | [ 7 -le 8 ] && echo '7 小于或者等于 8' |
(4)浮点型判断
浮点型判断应用偏少,需要用到【bc计算器】,这里简单举例:
[ `echo '1.2 < 1.3' | bc` -eq 1 ] && echo '1.2
小于 1.3
'
|
(5)字符串判断
参数 | 参数说明 | 举例 |
= | 相等 | [ 'kkkk' = 'kkkk' ] && echo '两个字符串相等' |
!= | 不相等 | [ 'kkkkk' != 'kkkk' ] && echo '两个字符串不相等' |
(6)练习
# 判断输入变量大小
新建一个【judge.sh】文件,编写shell脚本,并执行查看结果
#!/bin/bash
# 判断输入的第一个数是否大于输入的第二个数
# by YYL
if [ $1 -eq $2 ]
then
echo "$1 等于 $2"
else
echo "$1 不等于 $2"
fi
# 判断创建文件结果
新建一个【touch_1.sh】文件,编写shell脚本,并执行查看结果
#!/bin/bash
# 判断创建的文件是否创建成功
# by YYL
touch $1
if [ $? -eq 0 ];then
echo "$1 创建成功!"
fi
第四章:shell脚本的输入输出
1、shell脚本输入之read命令
语法:read -参数
(1)read常见参数
参数 | 参数说明 |
-p | 给出提示符,默认不支持 “\n” 换行 |
-s | 隐藏输入的内容(如果要使用,必须写在 -s 之前) |
-t | 给出等待的时间,超时会退出 read(如果要使用,必须写在 -s 之前) |
-n | 限制读取字符的个数,触发到临界值会自动执行(如果要使用,必须写在 -s 之前) |
(2)示例
新建一个【123.sh】文件,编写shell脚本,并执行查看结果,该脚本用于输入密码后再进行输出
方法1:
#!/bin/bash
# 输出所输入的密码
# by YYL
read -n 5 -p "请输入您的密码:" pass
echo -e "\n"
echo "您输入的密码是:$pass"
方法2:
#!/bin/bash
# 输出所输入的密码
# by YYL
echo "请输入您的密码:"
read pass
echo "您输入的密码是:$pass"
2、shell脚本输出上色
(1)脚本输出上色
语法: echo -e "\033[ 字背景颜色 ; 字体颜色 ; 特效字符串 \033[ 关闭属性 "
#字体色范围:30-37
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
#字背景颜色范围:40-47
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;30m 红底黑字 \033[0m"
echo -e "\033[42;34m 绿底蓝字 \033[0m"
echo -e "\033[43;34m 黄底蓝字 \033[0m"
echo -e "\033[44;30m 蓝底黑字 \033[0m"
echo -e "\033[45;30m 紫底黑字 \033[0m"
echo -e "\033[46;30m 天蓝底黑字 \033[0m"
echo -e "\033[47;34m 白底蓝字 \033[0m"
# 特效范围
echo -e "\033[0m 无任何特效 \033[0m"
echo -e "\033[1m 高亮度 \033[0m"
echo -e "\033[4m 下划线 \033[0m"
echo -e "\033[5m 闪烁 \033[0m"
(2)示例
#!/bin/bash
read -p "`echo -e "\033[45;30;5m 请输入您的密码: \033[0m"`" pass
echo $pass
第五章:处理海量数据的grep、cut、awk、sed 命令
1、grep命令
(1)应用场景
通常对数据进行行的提取
(2)语法
grep [选项]...[内容]...[file]
(3)选项说明
选项 | 选项说明 | 示例 |
-v | 对内容进行取反提取 | grep -v 'root' /etc/passwd |
-n | 对提取的内容显示行号 | grep -n 'root' /etc/passwd |
-w | 精确匹配 | grep -w 'user' /etc/passwd |
-i | 忽略大小写 | grep -i 'user' /etc/passwd |
^ | 匹配开头行首 | grep -i '^user' /etc/passwd //匹配以user为开头的行 |
-E | 正则匹配 | grep -E 'user|root|adm' /etc/passwd //匹配user、root、adm所在行 |
2、cut命令
(1)应用场景
通常对数据进行列的提取
(2)语法
cut [选项]...[file]
参考文章:Linux入门基础完整版【详解】-CSDN博客 (四-5)
3、awk命令
一个非常强大的数据处理命令,支持条件判断、数组、循环等功能,与grep、sed被称为linux三剑客
(1)应用场景
通常对数据进行列的提取
(2)语法
awk '条件 {执行动作}' 文件名
awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
(3)特殊要点以及举例说明
# 特殊字段
特殊字段 | 含义 | 参数 | 参数说明 | 示例 |
printf | 格式化输出,不会自动换行 | %ns | 字符串型,n代表有多少个字符 | printf '%s\t%s\t%s\t%s\t%s\t%s\n' 1 2 3 4 5 6 |
%ni | 整型,n代表输出几个数字 | |||
%nf | 浮点型,n代表的是小数点后有多少个小数 | |||
\t | 制表符 | echo "scale=2;0.13+0.1" | bc | awk '{printf "%.2f\n",$0}' //完整打印出0.23 | ||
\n | 换行符 | |||
打印出内容,默认会自动换行 | df -h | grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}' |
# 选项
选项 | 含义 | 举例 | 查询结果 |
$1 | 代表第一列 | df -h | grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}' | 打印出第二行第五列的数据 |
$2 | 代表第二列 | ||
$0 | 代表一整行 | echo "scale=2;0.13+0.1" | bc | awk '{printf "%.2f\n",$0}' | 完整打印出0.23 |
-F | 指定分隔符 | cat /etc/passwd | awk -F ":" '{print $1}' | 以【:】为分隔符,打印出第一列的数据 |
BEGIN | 在读取所有行内容前就开始执行,常常被用于修改内置变量的值 | cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}' | 以【:】为分隔符,打印出第一列的数据 |
FS | BEGIN时定义分隔符 | ||
END | 结束的时候执行 | cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1} END {printf "以上为执行结果 \n"}' | 执行结束胡输出一行“以上为执行结果” |
NR | 行号 | df -h | awk 'NR==2 {print $6}' | 打印出第二行第六列的数据 |
df -h | awk '(NR >=2 && NR <= 5) {print $6}' | 打印出第二到五行的第六列数据 |
4、sed命令
(1)sed应用场景
主要对数据进行处理(选取、新增、替换、删除、搜索)
(2)sed语法
sed [选项] [动作] 文件名
参考文章:Linux入门基础完整版【详解】-CSDN博客 (四-7)
第六章:神奇的循环控制语句if 、for、case、while
1、if 循环控制
(1)单分支
# 语法
if [ 条件判断 ];
then
执行动作
fi
if [ 条件判断 ];
then
执行动作
else
执行动作
fi
# 示例
例1:判断【/home/LL】目录下是否存在文件1.txt,返回信息如下:
- 存在:/home/LL目录下存在1.txt文件
- 不存在:/home/LL目录下不存在1.txt文件
# 单分支循环
#!/bin/bash
# 判断文件是否存在
if [ -e /home/LL/1.txt ];
then
echo '/home/LL目录下存在1.txt文件'
else
echo '/home/LL目录下不存在1.txt文件'
fi
例2:判断【/home/LL】目录下是否存在某个文件,该文件执行时输入,返回信息如下:
- 存在:/home/LL目录下存在目标文件
- 不存在:/home/LL目录下不存在目标文件
# 单分支循环
#!/bin/bash
# 判断文件是否存在
if [ -e /home/LL/$1 ];
then
echo '/home/LL目录下存在目标文件'
else
echo '/home/LL目录下不存在目标文件'
fi
(2)多分支
# 语法
if [条件判断];
then
执行动作
elif [条件判断];
then
执行动作
elif [条件判断];
执行动作
fi
# 示例
判断输入的一个数字,是否大于10
#多分支循环:
#!/bin/bash
# 判断输入的数字是否大于10
echo '请输入一个数字:'
read number
if [ $number -eq 10 ];
then
echo '等于10'
elif [ $number -lt 10 ]
then
echo '小于10'
elif [ $number -gt 10 ]
then
echo '大于10'
fi
2、for循环控制
(1)语法
for 变量名 in 值1 值2 值3
do
执行动作
done
for 变量名 in `命令`
do
执行动作
done
for ((条件))
do
执行动作
done
(2)示例
例1:依次打印出1-10这10个数字(写法1)
#!/bin/bash
# 依次打印出1-10这10个数字
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
sleep 2
done
例2:依次打印出1-10这10个数字(写法2)
#!/bin/bash
# 依次打印出1-10这10个数字
for i in `seq 1 10`
do
echo $i
sleep 2
done
例3:ping 对应网站查看是否连通
a.txt文件内容如下:
www.baidu.com
www.taobao.com
www.taobaooooo.com
www.qq.com
222.sh文件内容如下:
#!/bin/bash
# ping 网站是否连通
for i in $(cat a.txt)
do
ping -c 2 $i
echo -e "\n"
done
例4:依次打印出1-10这10个数字(写法3)
#!/bin/bash
# 依次打印出1-10这10个数字
for ((i=1;i<11;i++))
do
echo $i
sleep 2
done
3、case循环控制
(1)应用场景
case循环常使用于多重分支,与if不同的是,if可以判断多个条件,case一次只能判断一种条件
(2)语法结构
case 变量 in
值1 )
执行动作1
;;
值2 )
执行动作2
;;
值3 )
执行动作3
;;
....
esac
(3)示例
输入一个城市,查询该城市天气以及温度
#!/bin/bash
# 程序选择
echo '请输入你要查询天气的城市:'
read city
case $city in
'广州')
echo '广州多云,温度:23~25摄氏度'
;;
'上海')
echo '上海下雨,温度:12~17摄氏度'
;;
'北京')
echo '北京下雪,温度:1~14摄氏度'
;;
'深圳')
echo '深圳多云,温度:22~26摄氏度'
;;
* )
echo '输入有误请重新输入'
;;
esac
4、while 循环
(1)应用场景
while循环是条件循环也是不定循环,只要条件判断式成立,循环就会一直进行着,直到判断式不成立或者选择跳出循环才会结束
(2)语法结构
while [ 条件判断式 ]
do
执行动作
done
(3)示例
计算从0加到输入的数字的总和一共是多少
#!/bin/bash
# 计算从0加到输入的数字的总和一共是多少?
i=0
sum=0
while [ $i -le $1 ]
do
sum=$(($sum+$i))
i=$(($i+1))
done
echo 'the sum is:'$sum
第七章:shell实战
我们这里写一个shell脚本,有7个功能可供选择,选项如下,下面详细描述实现过程
- 1、算出你输入的目录下一共有多少文件 eg:/data
- 2、计算从0加到你输入的数字为止eg:0+1+2+3+...+你输入的数字
- 3、批量创建用户
- 4、测试用户名与密码是否匹配
- 5、测试ip通不通
- 6、巡检内存使用率
- 7、数据库里查询学生成绩
- q、退出
1、如何让shell实现可选择性执行的功能
新建一个shell文件【feature.sh】,里面存放选择功能的代码
#!/bin/bash
# 功能选项的选择
while [ 1 ]
do
cat <<EOF
**************************************************************
* 1、算出你输入的目录下一共有多少文件 eg:/data *
* 2、计算从0加到你输入的数字为止eg:0+1+2+3+...+你输入的数字 *
* 3、批量创建用户 *
* 4、测试用户名与密码是否匹配 *
* 5、测试ip通不通 *
* 6、巡检内存使用率 *
* 7、数据库里查询学生成绩 *
* q、退出 *
**************************************************************
EOF
echo '输入你想要的功能:'
read key
case $key in
1 )
clear
sh 1.sh
;;
2 )
clear
sh 2.sh
;;
3 )
clear
sh 3.sh
;;
4 )
clear
sh 4.sh
;;
5 )
clear
sh 5.sh
;;
6 )
clear
sh 6.sh
;;
7 )
clear
sh 7.sh
;;
q )
clear
echo '----感谢使用---程序退出!----'
break
;;
esac
done
2、巡检内存使用率
新建【6.sh】文件,代码如下:
#!/bin/bash
# 内存使用率
mem_total=`free -m | sed -n '2p' | awk '{print $2}'`
mem_used=`free -m | sed -n '2p' | awk '{print $3}'`
mem_free=`free -m | sed -n '2p' | awk '{print $4}'`
Percent_mem_used=`echo "scale=2;$mem_used / $mem_total * 100" | bc`
Percent_mem_free=`echo "scale=2;$mem_free / $mem_total * 100" | bc`
now_time=`date +"%Y-%m-%d %H:%M:%s 星期%w"`
echo -e "\n"
echo -e "$now_time\n内存的使用率是:$Percent_mem_used%"
echo -e "内存还剩:$Percent_mem_free%未使用"
# 检查负载是否有压力
if [ $mem_used -gt 1 ]
then
echo -e "\033[31;5m告警:\033[0m"
echo -e "\033[31;5m内存使用率已超过负载能力,目前使用率达到:$Percent_mem_used% \033[0m"
else
echo '目前内存负载正常'
fi
echo -e "\n"
备注:一般情况下,报警系统需要达到内存使用率90%以上才可,这里为了演示报警情况,所以设置为使用率大于1报警
3、批量创建用户
应用场景:公司想要做测试,需要10000个用户
#!/bin/bash
# 批量创建用户
read -p '请输入创建的用户名称:' name
read -p '请输入创建用户的数量:' number
for ((i=1;i<=$number;i++))
do
# 需要查看系统是否存在用户
cat /etc/passwd | grep "${name}$i" 1>/dev/null
exist=`echo $?`
if [ $exist -eq 1 ]
then
# 创建用户
useradd ${name}$i 2>/dev/null && echo "创建用户${name}$i成功!"
# 需要生成随机密码(MD5),MD5其实是一个算法,可以用来加密密码
password=`head -2 /dev/urandom | md5sum | cut -c 1-8`
# 给新用户设置密码并把用户名和密码放在文本中
echo $password | passwd --stdin ${name}$i 1>/dev/null && echo -e "用户名:${name}$i\t 密码:$password" >>/root/LL/shell/newuser_password.txt
else
echo "${name}$i已经存在了,无需再创建!"
echo -e "\n"
fi
done
4、数据库里查询学生成绩
(1)数据库中建表
首先需要登录mysql数据库,我这边数据库中【student】库下放了一个【user】表,表内容如下所示:
在【student】库中的建表语句如下:
CREATE TABLE user(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age int,
sex VARCHAR(100),
Math_score int,
Chinese_score int,
English_score int
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据插入情况如下:
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (1,'小东', 18,'男',99,86,67);
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (2,'小红', 17,'女',87,97,88);
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (3,'小西', 18,'男',88,95,66);
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (4,'小南', 19,'女',85,88,69);
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (5,'小北', 16,'女',95,86,84);
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (6,'小黑', 17,'男',94,89,78);
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (7,'小绿', 18,'男',90,85,91);
INSERT INTO user (id,name,age,sex,Math_score,Chinese_score,English_score) VALUES (8,'老王', 20,'男',89,94,99);
(2)新建shell脚本
新建【7.sh】文件,用于数据库中查询学生成绩(我这里是使用docker部署的mysql,因此登录方式略有差别)
#!/bin/bash
# 数据库查询成绩
read -p '请输入你要查询的学生姓名:' sname
read -s -p '请输入数据库用户:' user
echo -e "\n"
sql="select * from student.user where name='${sname}';"
docker exec -it YYL-mysql mysql -u${user} -p -e "${sql}"
exit
注意:常用的数据库命令如下:
登录数据库:docker exec -it YYL-mysql env LANG=C.UTF-8 /bin/bash (登录上去后可以输入中文)
操作 | 命令 |
登录数据库 | docker exec -it YYL-mysql mysql -uroot -p (登录上去后无法输入中文) |
docker exec -it YYL-mysql env LANG=C.UTF-8 /bin/bash (登录上去后可以输入中文) | |
查看所有库 | show databases; |
选择库 | use 库名; (如: use student;) |
查看所有表 | show tables; |
查询表语句 | select * from 库名.表名 ; |
5、实现高效率登录别的机器
一般情况下,其他机器ip地址会以以下形式放置在一个文件中,这里以【ip.txt】举例
新建shell脚本【login.sh】,执行时带入ip地址域名
#!/bin/bash
# 登录脚本
RegionIp=`cat /root/LL/shell/ip.txt | grep $1 | awk -F "|" '{print $2}'`
ssh ${RegionIp}