Shell编程基础【详解】

目录

第一章:shell介绍

1、shell简介

2、shell应用场景

第二章:shell的使用技巧

1、vi编辑器的基本使用

2、shell常见的解释器

(1)解释器理解

(2)常见解释器

(3)编写shell脚本

3、shell脚本文件权限与脚本执行

(1)shell脚本文件权限

(2)shell脚本执行

第三章:shell的变量以及常见符号

1、常见变量

2、常用的几个符号

3、秒变计算器的运算符

(1)整数

(2)小数

4、常见的条件判断

(1)文件(夹)/路径判断

(2)权限判断

(3)整数型判断

(4)浮点型判断

(5)字符串判断

(6)练习

# 判断输入变量大小

# 判断创建文件结果

第四章:shell脚本的输入输出

1、shell脚本输入之read命令

(1)read常见参数

(2)示例

2、shell脚本输出上色

(1)脚本输出上色

(2)示例

第五章:处理海量数据的grep、cut、awk、sed 命令

1、grep命令

(1)应用场景

(2)语法

(3)选项说明

2、cut命令

(1)应用场景

(2)语法

3、awk命令

(1)应用场景

(2)语法

(3)特殊要点以及举例说明

# 特殊字段

# 选项

4、sed命令

(1)sed应用场景

(2)sed语法

第六章:神奇的循环控制语句if 、for、case、while

1、if 循环控制

(1)单分支

# 语法

# 示例

(2)多分支

# 语法

# 示例

​编辑2、for循环控制

(1)语法

(2)示例

3、case循环控制

(1)应用场景

(2)语法结构

(3)示例

4、while 循环

(1)应用场景

(2)语法结构

(3)示例

第七章:shell实战

1、如何让shell实现可选择性执行的功能

2、巡检内存使用率

3、批量创建用户

4、数据库里查询学生成绩

(1)数据库中建表

(2)新建shell脚本

5、实现高效率登录别的机器


第一章: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编辑器的基本使用

vi 编辑器是所有 unix Linux 系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器

参考文章:Linux入门基础完整版【详解】-CSDN博客

【第三章第五节】


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--
权限分为三列:每三个为一列,分别是所有者 (owner) ,所属组 (group) ,其他 (others)

(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 + 6expr $a + $b
echo $[12 + 6]echo $[a + b]
echo $((12 + 6))echo $((a + b))
expr 12 - 6expr $a - $b
echo $[12 - 6]echo $[a - b]
echo $((12 - 6))echo $((a - b))
expr 12 \* 6expr $a \* $b
echo $[12 * 6]echo $[a * b]
echo $((12 * 6))echo $((a * b))
expr 12 / 6expr $a / $b
echo $[12 / 6]echo $[a / b]
echo $((12 / 6))echo $((a / b))
求余expr 12 % 6expr $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 命令

前言:grep cut awk sed 常常应用在查找日志、数据、输出结果等等,并对我们想要的数据进行提取,通常grep sed 命令是对行进行提取, cut awk 是对列进行提取


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换行符
print打印出内容,默认会自动换行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}'以【:】为分隔符,打印出第一列的数据
FSBEGIN时定义分隔符
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加到你输入的数字为止eg0+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}

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值