条件表达式

文件判断

文件测试操作符

常用文件测试操作符 说明
-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 f2nt 的全拼为 newer than 文件fl比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算
fl -ot f2ot 的全拼为 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的更多相关文章

  1. Shell基础学习小结

    0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...

  2. Shell基础-环境变量配置文件

    Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...

  3. shell基础二十篇 一些笔记

    shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...

  4. shell基础(转)

    shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...

  5. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  6. shell基础及变量

    一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...

  7. Shell 基础教程

    一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html

  8. Linux基础学习(10)--Shell基础

    第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...

  9. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  10. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

随机推荐

  1. ORB-SLAM2 地图保存

    一.简介 在ORB-SLAM2的System.h文件中,有这样一句话:// TODO: Save/Load functions,让读者自己实现地图的保存与加载功能.其实在应用过程中很多场合同样需要先保 ...

  2. MNIST-神经网络的经典实践

    MNIST手写体数字识别是神经网络的一个经典的入门案例,堪称深度学习界的”Hello Word任务”. 本博客基于python语言,在TensorFlow框架上对其进行了复现,并作了详细的注释,希望有 ...

  3. centos配置ADSL拨号 配置阿里云的yum源

    如果系统yum源有问题可以更改yum源配置阿里云的yum源1)下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo(没有 wget命令可 ...

  4. tsar使用说明

    常用命令    tsar --nginx --live -i 1  查询1秒的状态每秒采样一次 系统模块 cpu 字段含义 user: 表示CPU执行用户进程的时间,通常期望用户空间CPU越高越好. ...

  5. 【转】在cmd/bat脚本中获取当前脚本文件所在目录

    一.关于cd的/d参数 关于cd 的/d参数,在cmd中敲入cd /?可以看到/d参数的解释如下: 使用 /D 命令行开关,除了改变驱动器的当前目录之外,还可改变当前驱动器.这句话不太好理解,我做个试 ...

  6. border和outline的区别

    如果有一个需求,给一个元素增加一条边框,想必大家会习惯且娴熟的使用border来实现,我也是这样   但其实outline也能达到同样的效果,并且在有些场景下会更适用,比如下面的demo 使用bord ...

  7. 图解Hyperf框架:Hyperf 的初始化

  8. 将服务器时间类型改为UTC(0000)

    方法一: # timedatectl  set-timezone UTC #  timedatectl set-time "YYYY-MM-DD HH:MM:SS" #  time ...

  9. fatal error compiling: tools.jar not found

    在Eclipse中使用Maven提供的Install(打包)命令插件的时候报错[Fatal error compiling: tools.jar not found]. 报错的原因 报错的原因从错误信 ...

  10. JSP是Servlet详解

    前言:前一段时间写了好多Servlet和JSP相关的博客,自以为理解的差不多了,岂不知人外有人,天外有天,代码外还有源码,受高人点拨,看了一下Servlet源码,感触颇深,再也不敢说懂了,不明白生活的 ...