linux基础以及mysql基础

linux

7.6 文件的创建

  • 目录选项

    • 创建目录

      • mkdir

        mkdir -p a/b
        建立一个a目录,a目录下同时创建一个b目录,-p为递归
        
        mkdir -p a{a1,a2} b
        同时建立一个a和b目录,a目录下新建两个目录分别为a1 a2
        
    • 删除空目录

      • rmdir

        rmdir a
        删除空目录 a 
        
  • 文件操作选项

    • 复制文件

      • cp

        cp text text2
        将text文件复制并且改名为text2
        
        cp text a 
        将text文件复制到a目录下
        
    • 移动文件

      • mv

        mv text a
        将 text文件移动到a目录下
        
        mv text text1
        将text文件改名为text1
        
        mv a/*.txt b
        将a目录下所有的txt后缀的文件都移动到b目录下
        
    • 删除文件

      • rm

        rm -rf a
        递归强制删除a目录或文件
        
    • 新建文件

      • touch

        touch abc
        新建文件abc
        

7.7 命令的查看

  • 查看文件

    • cat 命令
      • cat a 查看a文件的内容
      • cat -n a 带行号查看a文件的内容
      • cat -b a 将文件空行去掉后重新带行号显示内容
      • cat text1 >> text2 将text1文件追加text2文件中
      • cat text1 text2 > text3 将text1和text2合并成text3文件
      • cat -A text 将text所有的内容显示出来
    • more 命令
      • more a 查看a文件的内容
      • more -num a 一次性显示num行的a文件的内容
      • more +num a 从num行开始显示a内容
        • b回滚到文件头,enter向下翻动一行,s/空格向下翻一页,d翻动半页
    • less 命令
      • less -m a 带百分比显示a内容
      • b向上回滚一页,u向上回滚半页, y向上回滚一行,d向下翻半页,空格向下翻一页,enter向下翻一页
    • head 命令
      • head -n 【n】a 显示a文件的n行内容
      • head -c 【n】 a 显示a文件的前n个字节
    • tail 命令
      • tail a 显示a文件后十行内容
      • tail -n 【n】a 显示a文件的后n行内容
      • tail -c 【n】a 显示a文件的后n个字节
    • echo 命令
      • echo “aaaaa” >> a 将 aaaaa 写入到a文件的最后一行
      • echo “aaaaa” > a 将aaaaa写入到a文件的第一行
  • vim编辑器的使用

    • 末行模式命令
      • wq 保存退出
      • q不保存退出
      • set nu 显示行号
      • set nonu 不显示行号
      • :n 跳转到n行
      • /n 查找指定字符n
      • 1,3d 删除前三行
      • 1,$d 删除所有行
      • s/a/A 将光标所在行第一个a替换成A
      • s /a/A/g 将光标所在行全局替换,将a替换成A
      • 1,$ s/a/A/g 将所有的a替换成A
      • % s/a/A/g 将所有的a都替换成A
      • 1,2 m10 1-2行移动到10行之后
      • 1,10 copy 20 1-10行复制到20行之后
      • w <路径>/<文件名> 另存为
      • noh 取消高亮光标
    • 命令模式下
      • ZZ 保存退出
      • ZQ 不保存退出
      • G跳转到文档末尾
      • u 撤销,后退一步
      • yy 复制光标所在行
      • 33yy 复制光标所在开始的三行
      • p 粘贴到光标所在下一行
      • dd 删除光标所在行
      • 3dd删除光标所在三行
      • x 删除光标所在字符
      • #x 删除光标所在处的#个字符
      • X 向前删除一个字符
      • #X 向前删除#个字符
      • r(按住)直接替换光标所在字符
    • 插入模式
    • i 光标所在字符进入
    • o 光标所在下一行进入
    • a 光标所在字符之后进入
  • 用户权限

    • cat /etc/passwd 所有的用户
    • cat /etc/group 所有的组
      • groups 组名 查看所属组
root :    x    : 0 :  0 :  root :/root:/bin/bash
用户名:密码占位符:UID:GID:用户信息:家目录:shell
  • 用户分为

    • 超级用户: root
    • 虚拟用户/系统用户/程序用户:nologin(centos7:1-999)不允许本地登录
    • 普通用户 1000-5
  • 用户的创建

    • useradd 用户名

      -u指定UID
      -d指定家目录
      -g指定用户主组(原始组)前提是存在的
      -G指定用户次要组
      -s指定用户登录的shell
      -M不建立家目录
    • passwd 用户名 (设置密码)

      -d清空用户密码
      -l锁定用户账号
      -s查看用户当前状态
      -u解锁用户账号
    • usermod 修改用户的属性

      -l更改账户的登录名称
      -L锁定账户
      -U解锁用户
      -u更改用户UID
      -g更改用户主组
      -G更改用户次要组
      -d更改用户家目录
      -s更改用户shell
      -a追加
    • userdel 删除选项

      • userdel -r 用户名
  • 添加用户组

    • groupadd 创建组
      • groupadd fu 直接添加fu组
      • group -g 666 fu 建立组的同时设置GID
    • groupmod 更改组属性
      • groupmod -n fu666 fu 更改组名
      • groupmod -g 666 fu 更改组gid
  • 删除用户组

    • groupdel 删除用户组
      • -f 强制
    • groups 查询用户组
    • id 查询用户id
  • 查询用户信息

    • w
    • who
    • users
    • who am i
  • etc/shadow

    nginx:!!:18450:0:99999:7:::
    用户名:密码:最后一次修改密码的时间:密码不可更改的时间:密码失效时间:密码失效提前多少天警告:密码过期宽限时间:账号失效时间:标志
    
    • change修改
      • change [用户名]
      • change --help : 获取帮助
    • [外链图片转存中…(img-I2DaGT2r-1595321676866)]
  • su 切换用户命令

  • etc/group

    user2:x:10000:
    组名:密码:组管理员:组内用户(附属组)
    
    • gpasswd命令也可以修改组

7.8 用户的权限

  • 用户的权限

    • u用户所有者(属主)

    • g组成员(属组)

    • o其他

      • r 读权限
      • w 写权限
      • x 执行权限
    • chmod 更改文件/目录的权限

      chmod [选项] 权限 <目标>
      
      -R递归改变目录及其成员的权限
      -v改变权限时显示详细过程
      -f忽略错误信息
      • 例子:

        chmod u+x ,g+w, o-r f1
        文件属主增加执行权限,属组成员增加写权限,其他去掉读权限
        
    • 利用八进制模式

      • r = 4
      • w = 2
      • x = 1
chmod 755  f1
为f1文件属主权限设置为读写执行权限,属组用户设置为读写权限,其他人设置为读写权限 
  • umask 默认为0022,即创建的目录,默认权限为755

    • 更改umask可以更改新创建目录的默认权限,但是文件会多减一即644,不给执行权限(x)

      umask 0033
      mkdir f2
      新创建的f2目录默认权限变成了744
      
  • chown更改文件所属命令

    • chown[选项] [属主:属组] <目标>

      • -R递归选项

      • -v执行时显示详细信息

        chown text text1  
        将text1属主改成text
        
        
        chown text:text text1
        将text1的属主和属主改成 text
        
        chown  : text text1
        直降text1属组改成text,须保留前面的:(冒号)
        
  • chgrp更改文件属组

    • chgrp [选项] [属组] <目标>
      • -R递归选项
      • -v显示详细信息
  • 通配符

    • 通配符是匹配符合条件的文件名,通配符是完全匹配,ls、find、cp不支持正则表达式,只能使用shell的通配符来进行匹配。
*通配符**含义**实例*
*匹配 0 或多个字符a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
?匹配任意一个字符a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]匹配 list 中的任意单一字符a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]或[^list]匹配 除list 中的任意单一字符a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2]匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b… a9b。
[!c1-c2]或[^c1-c2]匹配不在c1-c2的任意字符a[!0-9]b 如acb adb
{string1,string2,…}匹配 sring1 或 string2 (或更多)其一字符串a{abc,xyz,123}b 列出aabcb,axyzb,a123b
  • 正则表达式

    • 正则表达式是用来在文件中匹配符合条件的字符串,正则表达式是包含匹配,grep、awk、sed等命令都支持正则表达式。

      *一)* *基础正则表达式*

      *符号**含义**举例*
      *匹配前一个字符≥0次"abc*"满足的例子abbb、abcdk
      *.*任意字符"a.c"满足的例子abc、fapcc
      .*任意字符
      ^开始标记"^abc"满足的例子abc、abcd
      $结束标记”abc$”满足的例子abc、mmabc
      +匹配前一个字符≥1次"abc+"满足的例子abcd、abcccdd
      [][]内如果不是范围,选其一;是范围的话,范围内选其一"m[abc]p"满足的例子acpd;m[1-9]p满足的例子m8pp
      [^]非(在[]内)"[^abc]"满足的例子:ddd、mpd
      1grep “^13[0-9]” text
      {}\ {m\ }、\ {m,n\ }、\ {m,\ }、\ {,n\ }分别为匹配前一个字符m次、m到n次、≥m次、≤n次abc \ {3,5 \ }满足的例子abcccc、abcccccc
      扩展
      *符号**含义**举例*
      +匹配前一个字符≥1次"abc+"满足的例子abcd、abcccdd
      AA|BB匹配AA或者BB
      {}{m}、{m,n}、{m,}、{,n}分别为匹配前一个字符m次、m到n次、≥m次、≤n次****“abc{3,5}”****满足的例子abcccc、abcccccc
      ?匹配前一个字符0或1次"abc?"满足的例子ab、mabcd
      ()将候选的所有元素放在()内,用|隔开"a(1|2|3)bc"满足的例子a1bc、mba3bcd
      <word>匹配单词

      [外链图片转存中…(img-MqLCqcpp-1595321676871)][外链图片转存中…(img-QRcd6qP0-1595321676878)]

7.9 输出命令选项

  • grep 命令

    • 搜索与正则表达式匹配的行,并将结果输出

      • grep [选项] <关键字> <文件名>

        *选项**含义**功能描述*
        -iignore case忽略大小写
        -o只输出匹配的部分
        -vinvert match不匹配匹配的
        -lfile-with-match输出匹配的文件名
        -Lfile-without-match输出不匹配的文件名
        -ccount输出匹配的数目(行数)次数
        -nnumber输出匹配行的同时在前面加上文件名及在文件名中的行数
        -hno-filename抑制文件名的输出
        –color=auto表示使用颜色填充匹配到的内容,使其高亮显示
  • cut 命令:

    • 截取命令

      • cut [选项] <文件名>

        • ​ -d 自定义分隔符,默认为制表符

          ​ -f 与-d一起使用,提取第几列

  • 管道命令 |

    • 可结合cut 、grep的命令使用

      cut -d ":" -f 1,6 /etc/passwd |grep -i root > a.txt
      以:为分隔符,将/etc/passwd文件的1,和6列打印,并使用grep命令将包含root的内容输出到a.txt文件中
      
    • 输出重定向 >

    • 追加 >>

    • 0 输入,1 正确,2 错误

      grep -i root /etc/passwd 2> a.txt
      将此命令错误的信息放在a.txt中(默认是1,就是讲正确的信息放进去)
      
  • printf格式化输出

    • printf [选项] <输出内容>

      %s字符串
      %f浮点格式
      %cASCII字符,即显示对应参数的第一个字符
      %d,%i十进制整数
      %o八进制值
      %u不带正负号的十进制值
      %x十六进制值(a-f)
      %X十六进制值(A-F)
      %%表示%本身
printf "字符串:%s , 整数:%d, 小数:%.3f  "  字符串  100  100.33333
% .3f 保留小数点后三位

[外链图片转存中…(img-PQd5he6b-1595321676885)]

常用转义字符
\a警告字符,通常为ASCII的BEL字符
\b后退
\f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\表示\本身
printf "字符串:%-20s , 整数:%-5d, 小数:%4.3f  "  字符串  100  100.33333
-20: 左对齐,保留20位
-5:左对齐保留五位
4:右对齐保留四位(即+)默认是右对齐
  • awk

    • 作用:AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
  • 用法:awk [-F|-f|-v] ‘ BEGIN{} [pattern] {command1; command2} END{} ’ file

    • BEGIN{} awk开始 时第一个执行的

      • [pattern] 正则表达式

      • {command1;command2} awk、内容

      • END{} awk结束要显示的内容

    *运算符*

    *运算符**描述*
    = += -= *= /= %= ^= **=赋值
    ?:C条件表达式
    ||逻辑或
    &&逻辑与
    ~ 和 !~匹配正则表达式和不匹配正则表达式
    < <= > >= != ==关系运算符
    空格连接
    + -加,减
    * / %乘,除与求余
    + - !一元加,减和逻辑非
    ^ ***求幂
    ++ –增加或减少,作为前缀或后缀
    $字段引用
    in数组成员

    *内建变量*

    *变量**描述*
    $n当前记录的第n个字段,字段间由FS分隔
    $0完整的输入记录
    FILENAME当前文件名
    FNR各文件分别计数的行号
    FS字段分隔符(默认是任何空格)
    IGNORECASE如果为真,则进行忽略大小写的匹配
    NF一条记录的字段的数目
    NR已经读出的记录数,就是行号,从1开始
    OFMT数字的输出格式(默认值是%.6g)
    OFS输出字段分隔符, 默认也是空格
    ORS输出记录分隔符(默认值是一个换行符)
    RS记录分隔符(默认是一个换行符)

    [外链图片转存中…(img-1R7IyWgB-1595321676889)][外链图片转存中…(img-J5qHAiX3-1595321676891)]

    ![img](c:/Users/Administrator/AppData/Local/cts/image/200709211503191.png

[外链图片转存中…(img-9Nu43PAh-1595321676892)]

awk '{print $10}' 2020708.log |grep -c "admin_login.php"
1、统计登录页面/upload/admin/admin_login.php被访问多少次

[外链图片转存中…(img-yURs9f27-1595321676895)]

awk '{print $10}' 2020108.log | grep -c "admin_.*.php" 
2、统计admin_****.php 类文件共被访问次数 

[外链图片转存中…(img-lETMkvI3-1595321676897)]

[外链图片转存中…(img-EbecvW5G-1595321676899)]

awk '{print $10}' 2020708.log |grep -o "admin_.*.php" | awk '{if(arr[$1]==0){print $1; arr[$1]=1}}'|wc -l
  统计2020608.log文件以admin_开头以.php 结尾的文件共有多少种
  awk '{print $10}' 2020708.log |grep -o "admin_.*.php" | sort -u

[外链图片转存中…(img-jtC4V02W-1595321676900)]

[外链图片转存中…(img-KOrNwUAj-1595321676901)]

[外链图片转存中…(img-l8I0F2vO-1595321676903)]

awk '{if($5>="[08/jul/2020/2020:21:00:00" && $5 <= "[08/jul/2020/2020:21:59:59") printf $5 "\n"}' 2020708.log | wc -l       (如果用print自带换行,不需要加“\n”否则会多出来一倍结果)
4、21:00:00 - 21:59:59 共有多少次访问

[外链图片转存中…(img-8scWRG6i-1595321676904)]

5、登录页/upload/admin/admin_login.php 21:00:00 - 21:59:59期间共有多少次访问。

[外链图片转存中…(img-ACkwlqox-1595321676907)]

6、统计使用POST方式访问/upload/admin/admin_login.php页面的共多少次

[外链图片转存中…(img-Zunw4rvc-1595321676907)]

6、统计使用POST方式访问/upload/admin/admin_login.php页面的共多少次

[外链图片转存中…(img-PMel4egt-1595321676909)]

6、统计使用POST方式访问/upload/admin/admin_login.php页面的共多少次

[外链图片转存中…(img-jAPEOwud-1595321676912)]

7、统计使用POST方式访问/upload/admin/admin_login.php并且登录成功的有多少次

[外链图片转存中…(img-lWdutmiY-1595321676913)]

7、统计使用POST方式访问/upload/admin/admin_login.php并且登录成功的有多少次

[外链图片转存中…(img-z6jed77v-1595321676916)]

/ :代表本身     \: 代表转义  

[外链图片转存中…(img-oiAOuKjy-1595321676917)]

7、统计使用POST方式访问/upload/admin/admin_login.php并且登录成功的有多少次

[外链图片转存中…(img-90RABXQz-1595321676918)]

7、统计使用POST方式访问/upload/admin/admin_login.php并且登录成功的有多少次   将次数打印在结尾

[外链图片转存中…(img-A9I9Lat9-1595321676921)]

7、统计使用POST方式访问/upload/admin/admin_login.php并且登录成功的有多少次  使用END方法将次数打印出来

[外链图片转存中…(img-L35jWqn4-1595321676922)]


[外链图片转存中…(img-OHDkNzRq-1595321676925)]

7.10 shell

  • sed命令

    • 作用:sed是一个流编辑器,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替- -换、删除、新增、选取等特定工作。而vi编辑器不能当作管道命令。
    • 用法:sed [-nefri] ‘command’ 文件名
      • 常用选项:

    -n∶在一般 sed 的用法中,sed会把所有资料一般都会被输出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来;

​ -e∶允许对输入数据使用多条sed命令编辑;

​ -f∶直接将 sed的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

​ -i∶直接修改读取数据的文件内容,而不是由屏幕输出,注:该选项会更改原文件的内容;

  • 常用命令:

​ a\∶行追加,在指定行后追加内容,当追加多行内容时,除最后一行不加\外,其他行的行尾都要加\,表示数据未输入完;

​ c\∶行替换,c的后面可以接字串,这些字串可以取代 n1,n2 之间的行;

​ i\∶行插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

d∶删除,删除指定的行;

​ p∶打印,输出指定的行;

​ s∶字串替换,通常搭配正规表达式,例如 1,20s/old/new/g ;

  • shell

    • vim one.sh              (新建一个名字为one.sh 的shell)  
      #!/bin/bash             (在vim内第一行必须写这个)
      #这是第一个shell          (#为注释符)
      echo "你好世界"           
      
      chmod u+x one.sh        (为one.sh增加执行权限)
      ./one.sh                (由于one.sh不在bin目录下,所以需要在前面加上./执行)
      
  • 声明shell的变量

    • 用法:declare [+/-] [选项] 变量名

      选项:

      ​ +/-  "-“可用来指定变量的属性,”+"则是取消变量所设的属性。

      ​ -p   显示指定变量的被声明的类型。

      ​ -r   将变量设置为只读。

      ​ -x   指定的变量会成为环境变量,可供shell以外的程序来使用。

      ​ -i   将变量声明为整数型。

[外链图片转存中…(img-dOUTv0w4-1595321676926)]

[外链图片转存中…(img-cHndspVd-1595321676930)]

  • 特殊变量

    *表11-1-6 特殊变量*

    *位置参数变量**实例*
    $?上个命令的退出状态,或函数的返回值。一般情况下,大部分命令执行成功会返回 0,失败返回1。
    $$当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
    $!表示最近一个后台命令的进程ID。
    $PPID父进程ID
    $HOME表示当前用户家目录
    $PATH环境变量
    $PWD当前工作目录
  • 位置参数变量

*表11-1-5 位置参数变量*

*位置参数变量**实例*
$nn为数字,$0代表脚本本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 使 用 在 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数需要使用在括号包含,如 9,使,{10}。
$*该变量代表命令行中所有参数,$*将所有参数当成一个整体。
$@该变量代表命令行中所有参数,但$@把每个参数区分对待。
$#该变量代表命令行中所有参数的个数。
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b… a9b。
匹配 sring1 或 string2 (或更多)其一字符串a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。
  • test 比较运算符不可用,用英文缩写代替

    >-gt
    <-lt
    >=-ge
    <=-le
    =-eq
    !=-ne
    &&逻辑与-a
    ||逻辑或-o

    [外链图片转存中…(img-pcpLESVZ-1595321676932)][外链图片转存中…(img-Op3G8TRN-1595321676932)][外链图片转存中…(img-JTyQGn5x-1595321676934)]

  • shell脚本的编写

    • 1.求和计算,如果和等于66 ,显示你真六。

      vim 1.ch
      #!/bin/bash
      #这是求和shell
      a=$[$1+$2];
      echo $a;
      if test $a eq 66 ;then
      echo "你真六";
      fi
      
    • 2、编写shell 脚本,实现传入两个参数,判断两个参数的大小

      vim 2.ch
      #!/bin/bash
      #这是比较大小shell
      if test $1 -gt $2; then
      echo "$1大于$2";
      else
      echo "$2大于$1";
      fi
      
    • 3、编写shell脚本,实现传入三个参数,打印出3个数字中最大的数字(不考虑相等的情况)。

      vim 3.ch
      #!/bin/bash
      #这是比较大小shell
      a=$[$1-$2];
      b=$[$1-$3];
      c=$[$2-$3];
      if test $a -gt 0 -a $b -gt 0 ;then
      echo $1;
      elif test $a -lt 0 -a $c -gt 0 ;then
      echo $2;
      else test $b -lt 0 -a $c -lt 0 ;then
      echo $3;
      else 
      echo "相等";
      fi
      
      
    
    
  • [外链图片转存中…(img-PzmTLWDP-1595321676936)]或者

    • [外链图片转存中…(img-grOAHOI6-1595321676939)]

    • 4、编写shell脚本,实现传入学员分数,判断并输出学员分数等级。

      vim 4.ch
      #!/bin/bash
      #这是成绩判断
      if test $1 -lt 60 ; then
      echo "不及格";
      elif test $1 -gt 50 -a $1 -lt 71; then
      echo "及格";
      elif test $1 -gt 70 -a $1 -lt 81; then 
      echo "良好";
      elif test $1 -gt 80 -a $1 -lt 91; then
      echo "优秀";
      else
      echo "太秀了";
      fi
      
      
    • 5、编写shell,实现判断传入的参数是否同时是3和5的整数倍,是输出”Yes” 否者输出”NO”

      vim 5.ch
      #!/bin/bash
      #这是判断取余
      a=$[$1 % 5];
      b=$[$1 % 5];
      if test $a -eq 0 -a $b -eq 0 ;then
      echo "yes";
      else
      echo "no";
      fi
      
    - 6、编写shell脚本,实现传入年份判断年份是否为闰年
    
     闰年:能被400整除或者(能被4整除,但不能被100整除)
    
    

    vim 6.ch
    #!/bin/bash
    #这是判断闰年
    a=$[ 1 b = 1 % 4]; b= 1b=[ 1 c = 1 % 100]; c= 1c=[$1 % 400];
    if $a -eq 0 -a $b -ne 0 ; then
    echo “闰年”;
    elif $b -eq 0 -a $c -eq 0 ;then
    echo “闰年”;
    else
    echo “平年”;
    fi

    
    - read -p 
    

[外链图片转存中…(img-tF6VHStE-1595321676940)][外链图片转存中…(img-oTBoq52E-1595321676944)]

[外链图片转存中…(img-B30lWEFW-1595321676944)]

  • SHELL里的括号

    name=zhangsan
    echo $name
    zhangsan
    
    echo ${name}name1         #打印变量时将后面的一起加上去
    zhangsanname1
    
    num=1
    num1=2
    num3=$[$num+num1]         #逻辑运算时使用
    echo $num3
    3
    
    num=1
    num1=2
    echo (($num3=$num+$num1))   
    
    echo $((num+num1))
    3
    
    ((num++))
    echo $num
    2
    
    let $num=$num+$num1         #let运算时不用加括号
    echo $num
    3
    
    [ 1==1 ]      判断 中括号两头必须加空格
    
    

[外链图片转存中…(img-ixygVujH-1595321676946)]

7.11 for循环

  • 嵌套分支结构

    • if [ 条件一 ];then
        echo "";
        if [满足条件一时进入此];then
        echo "";
        else
        echo"";
        fi         #主分支结束
      else
        echo "不满足条件一时直接进入此条件";
        fi
      

[外链图片转存中…(img-tGgnqFRV-1595321676951)]

  • for 循环
#!/bin/bash
#循环
for ((i=10;i<10;i++));do
    echo $1;
done
echo "我是循环";
  • 嵌套循环(最多就三次,多了会特别慢)
#!/bin/bash
#嵌套循环
for ((i=0;i<10;i++));do
    for((j=0;j<10;j++));do
        echo '$i='$1'$j='$j;
    done
done
echo "我是循环体"
  • crontab 定时任务

    • -e修改计划任务
      -l查看计划任务
      -r删除所有计划任务列表
      -u为指定用户设定计划任务
    • 分:时:日: 月 :周

      0-59
      0-23
      1-31
      1-12
      0-6
      分  时   日   月   周
      1  20   3   *   * echo "呵呵" >> /home/ujiuye/cron.txt
      每月的三号 20:01 执行任务
      
      • 定义连续时间: 1-5 8-10
      • 定义不连续时间: 1,3,5
      • 周期间隔: */5
      • 任意时间: *

      [外链图片转存中…(img-C7Q5y7Hp-1595321676953)]

  • wget 下载

  • for in循环

    #!for S in $(ls /home);do
       echo $s;
       done
    
    #!/bin/bash
    arr=(a b c 1 2 3);       #建立一个数组
    for var in ${arr[@]};do  #@/*将所有的数组内容都打出来
    echo $var'
    done
    
  • while循环

    #!/bin/bash
    num=0;
    while [ $num -lt 10 ]
        do
            echo $num;
            (($num++));
    done
    
  • 函数

#!/bin/bash
function say(){
echo "我是say、方法";
} 
say;

#!/bin/bash
function say(){
echo $[$1+$2];
} 
say 110 120 ;

  • 九九乘法口决表

[外链图片转存中…(img-YPfJIJMh-1595321676957)]

[外链图片转存中…(img-DesSB84K-1595321676959)]

7.13 mysql数据库

  • 配置环境变量 安装路径/bin 配置到path下

    • gb2312、gbk、unicode(国际兼容各种格式)、utf8

    • create database <库名> character set <字符集> collate <校对集>

      create database test character set="utf8" ;
      (创建一个test库编码格式为utf8)
      
      show create database test;
      查看text 库的字符集
      
      create database ujiuye character set="utf8" collate="utf8_general_ci";
      设置字符集、校对集
      

      [外链图片转存中…(img-LkmoFHhM-1595321676960)]

    • 查看当前字符集命令

      • show variables like ‘%char%’ ;
    • 查看字符集默认的排序方式

      • show variables like ‘%collation_%’;
  • 排序方式的命名规则

    • 1._ci,区分大小写的排序方式
      2._cs,不区分大小写的排序方式
      3._bin,二进制排序方式,大小比较将根据字符编码,不涉及人类语言
    • 开启日志信息
      • set global general_log = “on”; 开启日志
      • show variable like ‘%general%’; 查看日志是否开启
create database if not exists test ;
[if not exists]    如果test库不存在就建立存在就省略
drop database if not exists test ;
如果test存在就删除,不存在不会报错
  • 字符类型

    • 字符串类型
    *类型**存储空间(字节)**最小值(理论)*
    char(n)固定长度,最多255个字符n代表字符的个数
    varchar(n)可变长度,最多65535个字符编码不同字符数不同: Gbk<=32767 Utf8<=21845
    tinyText,text,mediumText,longtext可变长度,最大长度分别为 255, 65535, 2^24-1, 2^32-1个字符定义时,通常不用指定长度,可以自己计算。
    enum1、2。枚举选项量(65535)内部存储是整型表示。字段值只能是某一个
    Set1、2、3、4、8。元素数量:64字段值可以选择多个
    Binary,varbinary,blobBinary(char),varbinary(varchar),blob(text) 做类比二进制数据(字节而非字符)
    • 数字类型
      • 整型
    *类型**字节**最小值(有符号/无符号)**最大值(有符号/无符号)*
    TINYINT1-128/0127/255
    SMALLINT2-32768/032767/65535
    MEDIUMINT3-8388608/08388607/16777215
    INT/INTEGE4-2147483648/02147483647/4294967295
    BIGINT8-9223372036854775808/09223372036854775807/18446744073709551615
    • int (11)zerofill 当不足11位的时候,用0来补齐到十一位

    • tinyint(1) unsigned 非负数,最多到255

    • 浮点型

      *类型**存储空间(字节)**最小值(理论)**最大值(理论)*
      FLOAT4-3.402823466E+383.402823466E+38
      DOUBLE8-1.7976931348623157E+3081.7976931348623157E+308
      DECIMAL如果M>D,为M+2否则为D+2M,最大是65DECIMAL
  • 时间类型

    *名称**格式**取值范围**存储空间**零值*
    DATEYYYY-MM-DD'1000-01-01’到’9999-12-313字节0000-00-00
    TIMEHH:MM:SS-838:59:59’到’838:59:59’3字节00:00:00
    DATETIMEYYYY-MM-DD HH:MM:SS‘1000-01-01 00:00:00’到’9999-12-31 23:59:59’8字节0000-00-00 00:00:00
    TIMESTAMPYYYY-MM-DD HH:MM:SS是‘1970-01-01 00:00:00’到2038-01-19 03:14:074字节0000-00-00 00:00:00
    YEARYYYY1901到21551字节0000
Bit       B      KB       MB     GB        TB
8 bit = 1b
1024 B = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
create table users(
name varchar(20) not null default '' comment '姓名' ,       #设置姓名为可变长20,不能为空,默认值为空字符,注释为姓名
num_code tinyint(1) ,      #设置num_code类型为tinyint(1),二进制位(01010101)十进制为255
age tinyint(1) ,  
b_date date ,              #设置出生日期
sex enum('男','女') ,       #设置性别为枚举
)
engine 'innodb' ;          #设置引擎为innodb
  • desc <表名> 查看表字段

  • alter table users add phone varchar(11) not null default '' after sex;
    在sex字段后插入一个新的phone字段
    
    alter table users change sex xingbie enum('男','女') not null default '男' ;
    修改 sex字段 为 xingbie
    
    alter table users modify phone int(11) not null default '0' comment '手机号';
    修改 phone 字段类型 
    
    
    alter table users drop phone ;
    删除 phone 字段
    
    alter table users rename new_user;
    将users 表修改表明为new_user
    
    • 单行注释 # –
    • 多行注释 /* */
    • /*! */只在mysql里面执行,在其他是注释

7.14 增删改查

  • 增:

    • insert into <表名> values (字段值1,字段值二…) ; #必须写全
    • insert into <表名> (字段名1,字段名2…) values (字段值1,字段值二…) ;可以给想要的字段增加值,不写的给默认值或为空
    • insert into <表名> set 字段名1=值 , 字段名2=值 , … ;
    • delete from <表名> where [条件]
      • delete from users where id=1 ;
    • update <表名> set 字段1=值 , 字段2=值 where <条件> ;
    • select <字段> /* from [表名]

      • 可以使用比较运算符 、逻辑运算符
        • = != in and or > < <= >= between…and
    • select * from users where uid in (1,2,3) ;
      把uid 值为1,2,3的都打出来,不存在就忽视
      
      select * from users where uid not in (1,2,3) ;
      把uid不等于1,2,3的都打印出来
      
      select * from users where uname like 'li%' ;
      把uname里面开头是li的都打印出来   like 模糊查询
      

      ![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB1BE.tmp.jpg)

      select * from users where uid >=1 and uid <=3 ;
      查询uid大于等于1和uid小于等于3同时成立的
      
      select * from users where uid between 2 and 3 ;
      查询uid 等于2-3的,包含2和3
      
      select * from users where uid != 1 ;
      select * from users where not (uid=1);
      select * from users where !(uid=1);
      查询uid不等于1的,以上三种方式都可以
      
      • like 模糊查询,助逐行匹配,比较慢最好别用,占用大量的cpu。

        like '%li%' ;
        只要里面包含li 就会匹配出来
        
      • ()可以调整逻辑运算符的优先级,否则默认优先级为先and后or

    • show full columns from users ; 查看字段的注释

    • show create table <表名> ; 查看表注释

  • group by 分

select * from users group by sex;
对性别进行分组,每一组只显示第一个或最后一个
聚合函数
select max(score) from users group by sex;
将性别(sex)每一组里的最高分(max(score))显示出来
  • 聚合函数

    • max、min、avg(平均数)、sum(求和)、count(数量)

      select sex,max(score),min(score),avg(score),sum(score),count(scroe) from users group by sex;
      

[外链图片转存中…(img-mgUEA5Ly-1595321676961)]

select uid as id,uname as u, score as s, score*10 as ss from users;
as: 后面跟别名,可以省略;    score*10 单独扩列出一列,对score列内容进行乘法运算别名为ss
  • 去重

    select distinct sex from users;
    对users表的sex项去重
    

    [外链图片转存中…(img-SZIymiQF-1595321676962)][外链图片转存中…(img-ZKb3h5SV-1595321676964)]

  • select score,name from student order by score limit 10 ;
    1、查询全校成绩倒数10名的学员都有谁。
    
    select count(class_name),class_name from student where score < 60  group by class_name;  
    2、查询各个班级分数小于60的人数;
    
    select count(class_name),class_name from student where class_name in ('1班','3班','4班','7班') and score > 90 group by class_name ;
    3、查询1,3,4,7班中分数大于90的人数分别有多少。
    
    select count(class_name),class_name,sex from student where class_name in ('1班','3班','4班','7班') and score > 90 and sex = '女' group by class_name ;
    4、查询1,3,4,7班中分数大于90的女生分别有多少。
    
    select count(sex),sex from (select sex from student order by score desc limit 100) a group by a.sex ;
    5、查询成绩前100名中的学生的男女生各多少人
    
    select class_name,count(class_name),max(score),min(score),avg(score) from student group by class_name ;
    6、统计每个班级有多少人,最高分,最低分,平均分;
    
    select class_name,count(sex),sex,max(score),min(score),avg(score) from student group by class_name,sex ;
    7、统计各班男女生分别有多少人,其中最高分,最低分,平均分分别是多少;
    
    select * from student where class_name="8班" order by score desc limit 10;
    8、查询8班成绩的前10名;
    
    select class_name,avg(score) from student group by class_name having avg(score) > 40;
    9、查询所有班级中平均分大于40的班级。
    
    select class_name,count(*) from student where score > 80 group by class_name having count(*) > 30 ;
    10、查询分数大于80的人超过30个人的班级。
    
    select score,name,add_time from student where add_time between '2020-07-01' and '2020-08-01';
    11、查询入学日期在2020-7-1至2020-8-1的学员成绩。
    
    select class_name,avg(score) from student group by class_name order by avg(score) desc limit 1;
    12、查询所有班级中,平均分最高的班级是哪个班。
    

7.15 join联合查询

  • 联合查询 join

    • 外联查询

      • 左联接 <表1> left join <表2> on [拼接条件]
      select * from student left join class_info on student.class_name=class_info.class_name limit 10;
      

      [外链图片转存中…(img-ZgNYZriN-1595321676968)]

      • 右联接 <表1> right join <表2> on [拼接条件]
        • 左联接以左表为主,右表内容不存在时用null补齐,右联接也相似
    • 内联查询

      • 内联查询 <表1> inner join <表2> [连接条件]
      select * from student inner join class_info on student.class_name=class_info.class_name limit 10;
      

      [外链图片转存中…(img-15KoDbHl-1595321676969)]

      • 交叉链接 cross,不需要写联接条件
      select * from users cross join class_info ;
      

      [外链图片转存中…(img-kRbY5FD7-1595321676970)]

[外链图片转存中…(img-GZpWTMtN-1595321676971)]

  • 子查询

    • select *,(select ) from <表名> (select ) where [条件] (select ) 三种形式

      • select 子查询

        select * , (select user()) from student;
        
        select *(select count(*) from student as c where c.class_name =s.class_name )as total from student as s; 
        
        select class_name,count(*) as total,(select count(*) from student as s1 where score < 60 and s1.class_name=s.class_name) as '不及格' from student as s group by s.class_name ;
        
      • from 子查询

      select * from (select * from users where uid > 10 ) as s where  s.uid > 15 ;
      
      select * from where score in (select score from student where class_name='1班' and score > 90 ) and class_name != '1班' ;
      
      查询student表所有成绩和一班成绩大于九十分的学生信息,不包含一班
      
      select * from student where score > any (select score from student where class_name='1班' and score > 90 );
      查询所有成绩大于任意   一班成绩 大于九十分 的学员信息
      
      select * from users where exists (select * from class_info where users.class_name=class_info.class_name);
      查询class_info表和users表 class_name都一样的数据打印出来
      
      select name , id from student where exists (select * from good where student.id = good.id and num> 5) ;
      查询 student表 ,当student表里的id 在 good表里的uid存在的时候,打印出来num>5符合条件的结果
      
      • where 子查询
    
    
  • union 合并查询

    • union all 不去重复合并查询

[外链图片转存中…(img-EvxWDTgu-1595321676972)][外链图片转存中…(img-BXoKlXz7-1595321676972)]

  • 函数

    • concat 拼接字段
    select concat(uname, '-' , sex) as full_name from users ;
    字符串拼接
    
    select class_name , group_concat(uname) from users group by class_name ;
    

    [外链图片转存中…(img-wibuNFEi-1595321676973)]

  • trim 首尾去空格

select trim ('' , from '  abcded  ') ;
首尾去空格
  • repeat(字段,n) 重复 括号里写几就重复多少次
select repeat (uname,3) from users;
将users表里面的uname字段重复三次显示
  • substring(字段,n , m)截取字段的长度
select substring(umane,1,1)from users;
将users表里uname字段从第一个字段取一个字段
  • curdate() 获取当前日期

  • curtiam() 获取当前时分秒

  • surrent_timestamp() 获取当前日期时分秒

  • sysdate () 获取当前年月日时分秒

  • select date_format(now(),'%Y:%m:%d:%H%i:%s')
    Y 年
    m 月
    d 日
    H 时
    i 分
    s 秒
    
  • select uname , (if (score)>=60,'及格', '重修') from users ;
    如果users表内的 score 大于等于六十,执行及格,否则重修
    
  • select database() 查询当前所在库

  • select user() 返回当前用户名

  • select collation() 查看当前字符集排序方式

  • select md5(‘aaaaa’); md5算法

  • select password(‘123455’); 密码加密

[外链图片转存中…(img-ZuF2q44B-1595321676975)]

7.16

6.17 触发器

  • 触发器 不能操作自己的表

    • (1)触发器的建立
      • CREATE TRIGGER trigger_name

    {BEFORE | AFTER} /表示是某个事件之前还是之后触发/

    {INSERT | UPDATE |DELETE} /表示一个表上什么事件发生时会触发/

    ON table_name

    FOR EACH ROW /监听它的每一行/

    triggered sql statement; /要执行的一条或多条语句,不能有select语句,类似写存储过程的语句,可以用begin和end写多条语句/

    • (2)触发器查看
      • MySQL中,可执行SHOW TRIGGER语句来查看触发器的基本信息。

    ​ 基本格式如下:

    ​ SHOW TRIGGERS;

    查看单独某个触发器:

    SHOW CREATE TRIGGER trigger_name;

    MySQL中,所有的触发器都定义在information_schema数据库中的trigger表中,查看trigger表,可以查看到数据库中所有触发器的详细信息。查询语句如下:

    SELECT * FROM information_schema.triggers;

    • (3)触发器的删除
      • DROP TRIGGER trigger_name;

[外链图片转存中…(img-QHnNhCMC-1595321676975)]

  • mysql 用户管理

    • 用户登录或退出 MySQL 服务器

          cmd 打开命令行
     msyql	-h	hostname|hostIP 	-P	port	 -u	username	-p 
    
    • 创建和删除普通用户
(1)创建用户的三种方法
  • (1)用 create user 来新建普通用户

CREATE USER user_name [IDENTIFIED BY‘PASSWORD’][,user_name [IDENTIFIED BY ‘PASSWORD’]]. ;

CREATE USER ‘username’@’host’ IDENTIFIED BY ‘password’;

create user ‘person1’@’localhost’ identified by ‘test’; // 本地访问

create user ‘person2’@’%’ identified by ‘test’; // 远程访问create user‘person3’@’192.168.22.%’ identified by ‘test’; //当前网段可以访问

user_name 由用户名和主机名组成,identified by 关键字用来设置用户的密码2)

  • (2)用 insert 语句向 mysql.user 表中插入数据

insert into mysql.user(Host,User,Password,ssl_cipher,`x509_

issuer,x509_subject,authentication_string`)values(‘www.ttang.com’,’ttang’,PASSWORD(‘ttang’),’’,’’,’’,’’);

一定注意字段如果要求 不能为空。请插入数据。 user表 是mysql 用户的重要表。字段基本要求都是不能为空的。

  • (3)用户 grant 语句来新建普通用户

GRANT priv_type ON database_name.table_name TO ‘username’@’host’;

priv_type 用户的操作权限,比如select、update、delete 等,如果赋予所有权限用

all

(2)删除普通用户
  • (1)用drop user删除普通用户

​ DROP USER 用户名 @ 来源地址 ;

  • 2)用 delete 语句去 mysql.user 表中删除用户

DELETE FROM mysql.user WHERE User=’ttang’ AND Host=’www.ttang. com’;

FLUSH PRIVILEGES ;

3.普通用户和 root 用户的密码管理

  • (1)root 修改密码方法:

    • 1)使用 mysqladmin 命令来修改 root 用户的密码
    mysqladmin	-u 用户名	-p 旧密码	password	新密码
    
    • 2)修改 mysql.user 表
    update mysql.user	set	password=password(‘123456’)	where User=’ttang’ [and Host=’www.ttang.com’;](http://www.ttang.com/)
    
    • 3)使用 set 语句修改 root 用户的密码
    SET PASSWORD=PASSWORD(“ROOTPWD”)
    
(2)修改普通用户密码
SET PASSWORD FOR‘USERNAME’@’HOST’=PASSWORD(‘NEW_PASSWORD’);
  • mysql备份以及还原

    • mysql备份

      • mysqldump [库名] [表名] - u [用户名] -p > [备份位置及文件名]
    • mysql还原

      • source [文件位置及文件名]

      • mysql -u [用户名] -p [库名] < [备份位置及文件名]


  1. ↩︎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值