shell-基础2
条件表达式
文件判断
文件测试操作符
| 常用文件测试操作符 | 说明 |
| -d文件,d的全拼为directory | 文件存在且为目录则为真,即测试表达式成立 |
| -f文件,f的全拼为file | 文件存在且为普通文件则为真,即测试表达式成立 |
| -e文件,e的全拼为exist | 文件存在则为真,即测试表达式成立。注意区别于“-f”,-e不辨别是目录还是文件 |
| -r文件,r的全拼为read | 文件存在且可读则为真,即测试表达式成立 |
| -s文件,s的全拼为size | 文件存在且文件大小不为0则为真,即测试表达式成立 |
| -w文件,w的全拼为write | 文件存在且可写则为真,即测试表达式成立 |
| -x文件,x的全拼为executable | 文件存在且可执行则为真,即测试表达式成立 |
| -L文件,L的全拼为link | 文件存在且为链接文件则为真,即测试表达式成立 |
| fl -nt f2,nt 的全拼为 newer than | 文件fl比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算 |
| fl -ot f2,ot 的全拼为 older than | 文件fl比文件f2旧则为真,即测试表达式成立。根据文件的修改时间来计算 |
判断文件是否存在
[root@client script]# [ -f /etc/hosts ]
[root@client script]# echo $?
0
[root@client script]# [ -f /etc/hosts1 ]
[root@client script]# echo $?
1
判断文件是否存在,返回方式
[root@client ~]# [ -f /etc/hosts ] && echo "文件存在" || echo "文件不存在"
文件存在
[root@client ~]# [ -f /etc/hosts1 ] && echo "文件存在" || echo "文件不存在"
文件不存在
判断目录是否存在
[root@client ~]# [ -d /tmp ] && echo "目录存在" || echo "目录不存在"
目录存在
[root@client ~]# [ -d /tmp1 ] && echo "目录存在" || echo "目录不存在"
目录不存在
使用变量的方法进行判断
[root@client ~]# dir=/etc1/;[ -d $dir ] && tar zcf etc.tar.gz $dir || echo "$dir目录不存在"
/etc1/目录不存在
字符串判断
字符串测试操作符
| 常用字符串测试操作符 | 说明 |
| -n "字符串" | 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero |
| -Z "字符串" | 若字符串的长度为0,则为真,即测试表达式成立,z可以理解为zero的缩写 |
| "串 1"== "串 2" | 若字符串1等于字符串2,则为真,即测试表达式成立,可使用"=="代替"=" |
| "串 1" != "串 2" | 若字符串1不等于字符串2,则为真,即测试表达式成立,但不能用"!=="代替"!=" |
|
1.对于字符串的测试,一定要将字符串加双引号之后再进行比较。 2.空格非空 |
|
-z 判断字符串长度
[root@client ~]# x= ; [ -z "$x" ] && echo "输入为空" || echo '输入有内容'
输入为空
[root@client ~]# x=1 ; [ -z "$x" ] && echo "输入为空" || echo '输入有内容'
输入有内容
-n 判断字符串长度
[root@client ~]# x=12 ; [ -n "$x" ] && echo "输入有内容" || echo '输入为空'
输入有内容
[root@client ~]# x= ; [ -n "$x" ] && echo "输入有内容" || echo '输入为空'
输入为空
"串 1" == " 串 2 " 使用定义变量的方式进行判断
[root@client ~]# cmd=start;[ "$cmd" == "start" ] && echo start
start
整数判断
整数二元比较操作符参考
| 在[]以及test中 | 在(())和[[]]中 | 说明 |
| 使用的比较符号 | 使用的比较符号 | |
| -eq | ==或= | 相等,全拼为equal |
| -ne | != | 不相等,全拼为not equal |
| -gt | > | 大于,全拼为greater than |
| -ge | >= | 大于等于,全拼为greater equal |
| -lt | < | 小于,全拼为丨ess than |
| -le | <= | 小于等于,全拼为less equal |
判断两数是否相等
[root@client ~]# [ 1 -eq 1 ]
[root@client ~]# echo $?
0
[root@client ~]# [ 1 -eq 2 ]
[root@client ~]# echo $?
1
大于等于
[root@client ~]# [ 11 -ge 1 ] && echo "成立" || echo "不成立"
成立
小于
[root@client ~]# [ 11 -lt 1 ] && echo "成立" || echo "不成立"
不成立
大于
[root@client ~]# [ 11 -gt 1 ] && echo "成立" || echo "不成立"
成立
不等于
[root@client ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立
逻辑符号
| 在[]和test中使用的操作符 | 说明 | 在[[]]和中使用的操作符 | 说明 |
| -a |
[ 条件A -a 条件B ] A与B都要成立,整个表达式才成立 |
&& | and,与,两端都为真,则结果为真 |
| -o |
[ 条件A -o 条件B] A与B都不成立,整个表达式才不成立 |
|| |
or,或,两端有一个为真,则结果为真 |
| ! | ! | not,非,两端相反,则结果为真 |
逻辑操作符与整数判断配合
[root@client ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立
取反
[root@client ~]# [ ! 11 -ne 1 ] && echo "成立" || echo "不成立"
不成立
两边都为真
[root@client ~]# [ 11 -ne 1 -a 1 -eq 1 ] && echo "成立" || echo "不成立"
成立
至少有一边为真
[root@client ~]# [ 11 -ne 1 -o 1 -eq 1 ] && echo "成立" || echo "不成立"
成立
感叹号的特殊用法
使用历史命令,感叹号加上history中的序号,即可执行
[root@client ~]# !38
echo $?
0
【练习题】开发3个shell脚本比较2个整数大小
要求:
1. 分别以定义变量,脚本传参以及read读入的方式写3个脚本。
2. 用条件表达式(禁止if语句)进行判断。
3. 将2个整数的比较结果输出到屏幕,出错需要提示。
使用定义变量方法
#!/bin/bash
#############################################################
# File Name: panduan1.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
############################################################# NUM1=6
NUM2=2 expr 1 + $NUM1 &>/dev/null
[ $? -eq 2 ] && echo "$NUM1 不是整数 " && exit 2
expr 1 + $NUM2 &>/dev/null
[ $? -eq 2 ] && echo "$NUM2 不是整数 " && exit 2 [ "$NUM1" -eq "$NUM2" ] && echo $NUM1 = $NUM2 && exit
[ "$NUM1" -gt "$NUM2" ] && echo $NUM1 \> $NUM2 && exit
[ "$NUM1" -lt "$NUM2" ] && echo $NUM1 \< $NUM2
[root@client script]# bash panduan2.sh
6 > 2
使用传参数的方法
[root@client script]# vi panduan1.sh
#!/bin/bash
#############################################################
# File Name: panduan1.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
[ $# -ne 2 ] && echo "UASGE $0 num1 num2 " && exit
NUM1=$1
NUM2=$2
expr 1 + $NUM1 &>/dev/null
[ $? -eq 2 ] && echo "$NUM1 不是整数 " && exit 2
expr 1 + $NUM2 &>/dev/null
[ $? -eq 2 ] && echo "$NUM2 不是整数 " && exit 2
[ "$NUM1" -eq "$NUM2" ] && echo $NUM1 = $NUM2 && exit
[ "$NUM1" -gt "$NUM2" ] && echo $NUM1 \> $NUM2 && exit
[ "$NUM1" -lt "$NUM2" ] && echo $NUM1 \< $NUM2
[root@client script]# bash panduan1.sh 2 3
2 < 3
使用read读入
[root@client script]# vi panduan_read.sh
#!/bin/bash
#############################################################
# File Name: panduan1.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
read -p "请输入第一个整数:" NUM1
read -p "请输入第二个整数:" NUM2
expr 1 + $NUM1 &>/dev/null
[ $? -eq 2 ] && echo "$NUM1 不是整数 " && exit 2
expr 1 + $NUM2 &>/dev/null
[ $? -eq 2 ] && echo "$NUM2 不是整数 " && exit 2
[ "$NUM1" -eq "$NUM2" ] && echo "$NUM1 = $NUM2" && exit
[ "$NUM1" -gt "$NUM2" ] && echo "$NUM1 > $NUM2" && exit
echo "$NUM1 < $NUM2"
[root@client script]# bash panduan_read.sh
请输入第一个整数:2
请输入第二个整数:4
2 < 4
if条件语句
# 条件表达式和if语句可以互相转换
单分支语句
if [ -f /etc/hosts ]
then
echo '文件存在'
fi
双分支语句
if [ -f /etc/hosts ] then echo "文件存在" else echo "文件不存在" echo "..." >>/tmp/test.log fi
多分支语句
if [ -f /etc/hosts ] then echo " hosts文件存在" elif [ -f /etc/host ] then echo " host文件存在" fi
if条件语句小结
单分支:一个条件一个结果
双分支:一个条件两个结果
多分支:多个条件多个结果
【练习题1】输入2个数字,比较大小(使用if语句结合条件表达式实现)
说明:
3个脚本:使用直接赋值,传参,read任一种方法写3种脚本(单分支,双分支,多分支)
示例脚本一:
[root@client script]# vi panduan5.sh
#!/bin/bash
#############################################################
# File Name: panduan1.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
read -p "请输入第一个整数:" NUM1
expr 1 + $NUM1 &>/dev/null
if [ $? -eq 2 ]
then
echo "$NUM1 不是整数 "
exit 2
fi
read -p "请输入第二个整数:" NUM2
expr 1 + $NUM2 &>/dev/null
if [ $? -eq 2 ]
then
echo "$NUM2 不是整数 "
exit 2
fi
# 判断输入数值大小
if [ $NUM1 -eq $NUM2 ]
then
echo "$NUM1 = $NUM2"
exit
fi
if [ $NUM1 -gt $NUM2 ]
then
echo "$NUM1 > $NUM2"
exit
fi
"panduan5.sh" 43L, 962C written
[root@client script]# bash panduan5.sh
请输入第一个整数:4
请输入第二个整数:9
4 < 9
示例脚本二:
[root@client script]# vi if_panduan_2.sh
#!/bin/bash
#############################################################
# File Name: if_panduan_2.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
read -p "请输入第一个整数:" NUM1
expr 1 + $NUM1 &>/dev/null
if [ $? -eq 2 ]
then
echo "$NUM1 不是整数 "
exit 2
fi
read -p "请输入第二个整数:" NUM2
expr 1 + $NUM2 &>/dev/null
if [ $? -eq 2 ]
then
echo "$NUM2 不是整数 "
exit 2
fi
# 判断输入数值大小
if [ $NUM1 -eq $NUM2 ]
then
echo "$NUM1 = $NUM2"
exit
else
if [ $NUM1 -gt $NUM2 ]
then
echo "$NUM1 > $NUM2"
exit
else
if [ $NUM1 -lt $NUM2 ]
then
echo "$NUM1 < $NUM2"
fi
fi
fi
"if_panduan_2.sh" 43L, 1072C written
[root@client script]# bash if_panduan_2.sh
请输入第一个整数:7
请输入第二个整数:0
7 > 0
示例脚本三:
[root@client script]# vi if_panduan_2.sh
#!/bin/bash
#############################################################
# File Name: if_panduan_2.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
read -p "请输入第一个整数:" NUM1
expr 1 + $NUM1 &>/dev/null
if [ $? -eq 2 ]
then
echo "$NUM1 不是整数 "
exit 2
fi
read -p "请输入第二个整数:" NUM2
expr 1 + $NUM2 &>/dev/null
if [ $? -eq 2 ]
then
echo "$NUM2 不是整数 "
exit 2
fi
# 判断输入数值大小
if [ $NUM1 -eq $NUM2 ]
then
echo "$NUM1 = $NUM2"
exit
elif [ $NUM1 -gt $NUM2 ]
then
echo "$NUM1 > $NUM2"
exit
elif [ $NUM1 -lt $NUM2 ]
then
echo "$NUM1 < $NUM2"
fi
[root@client script]# bash if_panduan_2.sh
请输入第一个整数:10
请输入第二个整数:20
10 < 20
模拟编写启动nginx脚本
[root@client script]# cat nginx.sh
#!/bin/bash
##############################################################
# File Name: nginx.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-05 20:56:06
# Description:
##############################################################
. /etc/init.d/functions
StartCheck=`netstat -lntup |grep -c 80`
StartCMD='/usr/local/nginx/sbin/nginx '
StopCMD='/usr/local/nginx/sbin/nginx -s stop '
StatusCheck=`netstat -lntp|grep -c nginx`
ReloadCMD='/usr/local/nginx/sbin/nginx -s reload'
CheckCMD='/usr/local/nginx/sbin/nginx -t'
UsaGe="Usage: $0 {start|stop|status|reload|check}"
COMMAND=$1
if [ $# -ne 1 ]
then
echo $UsaGe && exit 2
fi
if [ $COMMAND = start ]
then
if [ $StartCheck == 1 ]
then
action "启动Nginx失败,端口被占用" /bin/false
else
$StartCMD
action "启动Nginx" /bin/true
fi
elif [ $COMMAND = stop ]
then
$StopCMD &>/dev/null
if [ $? -eq 0 ]
then
action "停止Nginx" /bin/true
else
action "停止Nginx" /bin/false
fi
elif [ $COMMAND = status ]
then
if [ $StatusCheck -eq 1 ]
then
echo "nginx 正在运行..."
else
echo "Nginx 未运行."
fi
elif [ $COMMAND = reload ]
then
$ReloadCMD
action "reload" /bin/true
elif [ $COMMAND = check ]
then
$CheckCMD
else
echo $UsaGe
exit 2
fi
[root@client script]# chmod 755 nginx.sh
[root@client script]# ./nginx.sh
Usage: ./nginx.sh {start|stop|status|reload|check}
[root@client script]# ./nginx.sh stop
停止Nginx [ 确定 ]
[root@client script]# ./nginx.sh start
启动Nginx [ 确定 ]
[root@client script]# ./nginx.sh check
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Web及MySQL服务异常监测案例
用if条件语句实现对Nginx Web服务以及MySQL数据库服务是否正常进行检测,如果服务未启动,则启动相应服务。
脚本编写思路:
判断web服务器正常 ↓
1、进程 ps -ef |grep [n]ginx
2、端口 netstat ss losf telnet nc nmap
3、curl 页面 返回值
4、curl check.html 的内容
判断mysql服务器正常 ↓
1、端口 netstat ss losf telnet nc nmap
2、进程 ps -ef |grep [m]ysql
3、mysql 登录访问看一下
4、mysql insert一个数据 select一个数据
web服务监控脚本示例
[root@client script]# cat web_check.sh
#!/bin/bash
#############################################################
# File Name: web_check.sh
# Version: V.
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : -- ::
# Description:
#############################################################
. /etc/init.d/functions
JinChen=`ps -ef |grep -c [n]ginx`
QiDong='/usr/local/nginx/sbin/nginx'
StatuS=`curl -I -w "%{http_code}\n" -o /dev/null -s 192.168.1.220`
StatuS2=`curl -s 192.168.1.220/index.html|grep -c ok`
StartNginx='/server/script/nginx.sh start'
if [ $JinChen -ge 2 ]
then
if [ "$StatuS" -eq 200 ]
then
if [ "$StatuS2" -eq 1 ]
then
action "Nginx 服务运行正常" /bin/true
else
action "请检查chenk.html文件!" /bin/false
fi
else
action "请检查首页文件!" /bin/false
fi
else
action "Nginx 未正常运行!" /bin/false
$StartNginx
fi
[root@client script]# ./web_check.sh
Nginx 服务运行正常 [ 确定 ]
[root@client script]# ./nginx.sh stop
停止Nginx [ 确定 ]
[root@client script]# ./web_check.sh
Nginx 未正常运行! [失败]
启动Nginx [ 确定 ]
case条件结构语句
case "字符串变量" in
值1)
指令1
;;
值2)
指令2
;;
值*)
指令
esac
1.3.2 case与if的对比
case书写方式
case $name in
值1)
指令1
;;
值2)
指令2
;;
*)
指令
esac
if书写方式
if [ $name == "值1" ]
then
指令1
elif [ $name == "值2" ]
then
指令2
else
指令
fi
1.3.3 case值的书写方式
apple)
echo -e "$RED_COLOR apple $RES"
;;
也可以这样写,输入2种格式找同一个选项
apple|APPLE)
echo -e "$RED_COLOR apple $RES"
;;
case语句小结
- case语句就相当于多分支的if语句。case语句的优势是更规范、易读。
- case语句适合变量的值少,且为固定的数字或字符串集合。(1,2,3)或(start,stop,restart)。
- 系统服务启动脚本传参的判断多用case语句,多参考rpcbind/nfs/crond脚本;菜单脚本也可以使用case
使用case编写一个菜单脚本
[root@ljj scripts]# cat menu.sh
#!/bin/bash
#############################################################
# File Name: menu.sh
# Version: V.
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : -- ::
# Description:
#############################################################
#cat<<EOF
echo "1. install rsync"
echo "2. install nfs"
echo "3. install mysql"
echo "4. install all"
#EOF
read -p '请输入你的选择:' chs
case $chs in
1)
echo install rsync success
;;
2)
echo install nfs success
;;
3)
echo install mysql success
;;
4)
echo install rsync/nfs/mysql success
;;
*)
echo "你输入有误"
esac
[root@ljj scripts]# bash menu.sh
1. install rsync
2. install nfs
3. install mysql
4. install all
请输入你的选择:1
install rsync success
输出带有颜色的水果菜单
[root@ljj scripts]# vi fruits.sh
#!/bin/bash
#############################################################
# File Name: fruits.sh
# Version: V.
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : -- ::
# Description:
#############################################################
#cat <<EOF
echo "======================="
echo "1.apple"
echo "2.pear"
echo "3.banana"
echo "4 .exit"
echo "======================="
#EOF
read -t 10 -p "你要看什么水果:" Menu_Num
case "$Menu_Num" in
1)
echo -e "\033[31m apple \033[0m"
;;
2)
echo -e "\033[32m pear \033[0m"
;;
3)
echo -e "\033[33m banana \033[0m"
;;
4)
exit
esac
[root@ljj scripts]# bash fruits.sh
=======================
1.apple
2.pear
3.banana
4 .exit
=======================
你要看什么水果:3
banana
写脚本规范及注意事项
1.变量名称不能和系统已经存在的命令等重复 free == > Free
2. 判断单位要统一
3. 脚本一行不超过一屏的一半。
4. 能写成变量的内容尽量写成变量
监控Memcached缓存服务是否正常
监控Memcached缓存服务是否正常,模拟用户(web客户端)检测。
使用nc命令加上set/get来模拟检测。
memecached安装:http://www.cnblogs.com/clsn/p/7999510.html
脚本内容:
vim memcache_check.sh
#!/bin/bash
#############################################################
# File Name: memcache_check.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-07 15:50:03
# Description:
#############################################################
. /etc/init.d/functions
. /etc/init.d/run # 函数 jingdutiao 使用
MemPort=`netstat -lntp |grep -c 0.0.0.0:11211`
Set_Key='printf "set clsn2017 0 10 8\r\nclsn2018\r\n"|nc 10.0.0.180 11211'
Get_Key='printf "get clsn2017\r\n" |nc 10.0.0.180 11211 |grep -c clsn2018'
ReStart='systemctl restart memcached.service' if [ $MemPort -eq 1 ]
then
$Set_Key
$Get_Key
if [ $? -ne 1 ]
then
action "Memcached 运行正常!" /bin/true
else
action "Memcached 服务异常!" /bin/false
fi
else
action "服务未启动!" /bin/false
$ReStart
jingdutiao
fi
未测试过。
使用(case)编写rsync管理脚本
写网络服务独立进程模式下Rsync的系统启动脚本,例如:/etc/init.d/rsyncd {start|stop|restart}。
要求:
1.要使用系统函数库技巧。
2.要用函数,不能一坨
shell-基础2的更多相关文章
- Shell基础学习小结
0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...
- Shell基础-环境变量配置文件
Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- shell基础(转)
shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- Shell 基础教程
一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html
- Linux基础学习(10)--Shell基础
第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
- Linux shell基础知识(上)
Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...
随机推荐
- LG2444/BZOJ2938 「POI2000」病毒 AC自动机
问题描述 LG2444 BZOJ2938 I \(\mathrm{AC}\)自动机 \(\mathrm{AC}\)自动机是一种多模式串匹配算法,本萌新今天刚学了它qwq 约定在构造\(\mathrm{ ...
- luoguP4248 [AHOI2013]差异
题意 考虑式子前面那段其实是\((n-1)*\frac{n*(n+1)}{2}\),因为每个后缀出现了\(n-1\)次,后缀总长为\(\frac{n*(n+1)}{2}\). 现在考虑后面怎么求: \ ...
- Django cache (缓存)
五种配置 1.开发调试 # 此为开始调试用,实际内部不做任何操作 # 配置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backend ...
- Python高级应用程序设计任务要求
Python高级应用程序设计任务要求 用Python实现一个面向主题的网络爬虫程序,并完成以下内容:(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台) 一.主题式网络爬虫设计方案( ...
- 补充: SpringBoot
SpringBoot Spring Boot 约定大于配置 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程. 该框 ...
- MySQL实战45讲学习笔记:第四十五讲
一.本节概述 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长.虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限.比如,无符 ...
- windows上安装python和python开发工具
一.python安装: 登录python官网,下载需要的安装包:https://www.python.org/downloads/windows/.,一般就下载 executable installe ...
- 动态修改maven的jdk版本
当环境变量jdk为1.7,项目为jdk1.8,用mvn clean package指令打包项目时,想不修改环境变量的情况下,修改maven的jdk版本 方法如下: 官网给出了方法 https://ma ...
- 物联网架构成长之路(37)-基于C#开发串口工具
0. 前言 作为物联网平台开发,最基础的工具链还是要有的.前几篇博客,介绍了用C#开发一个MQTT的客户端,用于模拟设备连接平台,并发送数据到平台.但是对于一些硬件来说,可能会用到串口uart来发送数 ...
- Python连载41-yield from详解、委派生成器
一. 1.yield from (1)调用协程为了得到返回值,协程必须正常终止 (2)生成器正常终止会发出StopIteration异常,异常对象的value属性保存返回值. (3)yield fro ...