==运算符==
"i=1,j+=i"的意思是j=j(j原来没有值,等于0)+i=1
"i=2,j+=i"的意思是j=j(j经过上一行的运算,等于1)+i=3

"-="同"+="一个意思

"**"表示幂运算
2**3=8

[root@localhost mnt]# echo $[2+3]
5
[root@localhost mnt]# echo $[2*3]
6
[root@localhost mnt]# echo $[2**3]
8
[root@localhost mnt]# echo $[2/3]
0
[root@localhost mnt]# echo $[2%3]
2
[root@localhost mnt]# echo `expr 1+2`
1+2
[root@localhost mnt]# echo `expr 1 + 2`    ##"expr"表示数学运算
3
[root@localhost mnt]# let a=1+2        ##"let"指示数学运算
[root@localhost mnt]# echo $a
3
[root@localhost mnt]# a=2+3
[root@localhost mnt]# echo $a
2+3
[root@localhost mnt]# ((a=2+3))        ##"(())"表示数学运算。bash内建功能,效率高
[root@localhost mnt]# echo $a
5

=="for do done"==
"for do done"相当于一个圆,里面的变量出不去

[root@localhost mnt]# for NAME in tom jack westos;do echo This is $NAME;done
This is tom
This is jack
This is westos
[root@localhost mnt]# echo $NAME
westos
[root@localhost mnt]# for ((i=1;i<=10;i++));do echo $i;done
1
2
3
4
5
6
7
8
9
10
[root@localhost mnt]# for ((i=1;i<10;i++));do ((j+=i));done
[root@localhost mnt]# echo $j
45

==[ ]和$?==
[root@localhost ~]# [ "0" = "0" ]
[root@localhost ~]# echo $?
0
##"0"表示正确
[root@localhost ~]# [ "0" = "1" ]
[root@localhost ~]# echo $?
1
##"1"表示错误

=="while[ ] do done"==
[root@localhost mnt]# while [ "0" = "0" ]; do echo yes; break; done
yes
##"break"打断,只输出一次yes。没有"break"会不停的输出yes

--"break"--
break命令表示跳出当前循环
在嵌套循环中,break命令后面可以跟一个整数,表示跳出第几层循环

==倒计时脚本==
[root@localhost mnt]# vim 10s.sh        ##10秒倒计时
-----------------------------------------------
#!/bin/bash
for ((SEC=10;SEC>0;SEC--))
do
echo -ne "After ${SEC}s is end"
echo -ne "\r    \r"
sleep 1
done
:wq
-----------------------------------------------
[root@localhost mnt]# chmod +x 10s.sh

[root@localhost mnt]# vim 1m10s.sh        ##1分钟10秒倒计时
-----------------------------------------------
#!/bin/bash
MIN=1
for ((SEC=10;SEC>=0;SEC--))
do
echo -ne "After ${MIN}m${SEC}s is end"
sleep 1
echo -ne "\r     \r"
        while [ "$SEC" -eq "0" -a "$MIN" -gt "0" ]
        do
        ((MIN--))
        SEC=60
        done
done
:wq
-----------------------------------------------
[root@localhost mnt]# chmod +x 1m10s.sh
==man echo==
[root@localhost mnt]# man echo
-----------------------------------------------
       -n     do not output the trailing newline

-e     enable interpretation of backslash escapes

\r     carriage return
q
-----------------------------------------------
=="&&"和"||"==
&&    ##成立
||    ##不成立

==check-ip脚本==
[root@localhost mnt]# vim check-ip.sh         ##使用"&&"
-----------------------------------------------
#!/bin/bash
for NUM in {1..10}
do
ping -c1 -w1 172.25.50.$NUM &> /dev/null && echo 172.25.50.$NUM is up || echo 172.25.50.$NUM is down
done
:wq
-----------------------------------------------
##"c1"表示ping一次;"w1"表示等待1秒
[root@localhost mnt]# chmod +x check-ip.sh

==使用脚本备份数据库==
--安装mariadb--
[root@localhost mnt]# yum install mariadb-server -y
......
[root@localhost mnt]# vim /etc/my.cnf
--------------------------------------------------
 10 skip-networking=1
:wq
--------------------------------------------------
[root@localhost mnt]# systemctl start mariadb
[root@localhost mnt]# mysql_secure_installation
>Set root password: westos
[root@localhost mnt]# mysql -uroot -pwestos -e "CREATE DATABASE test;"
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

--备份"mysql"库和"test"库--
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -N
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -E
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: performance_schema
*************************** 4. row ***************************
Database: test
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -NE
*************************** 1. row ***************************
information_schema
*************************** 2. row ***************************
mysql
*************************** 3. row ***************************
performance_schema
*************************** 4. row ***************************
test
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -NE |grep -Ev "^*|schema$"
##什么都匹配不到,"*"前面必须加"\",否则无法识别
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -NE |grep -Ev "^\*|schema$"
mysql
test
[root@localhost mnt]# vim mysqldump.sh
--------------------------------------------------
#!/bin/bash
for x in $(mysql -uroot -pwestos -e "show databases;" -NE | grep -Ev "^\*|schema$")
do
        mysqldump -uroot -pwestos $x > /mnt/$x-`date`.dump
done
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x mysqldump.sh
[root@localhost mnt]# ./mysqldump.sh
./mysqldump.sh: line 4: /mnt/$x-`date`.dump: ambiguous redirect
./mysqldump.sh: line 4: /mnt/$x-`date`.dump: ambiguous redirect
##什么情况。。。
[root@localhost mnt]# sh mysqldump.sh
[root@localhost mnt]# ls *.dump
mysql-Thu Dec 15 22:18:06 EST 2016.dump  test-Thu Dec 15 22:18:06 EST 2016.dump
[root@localhost mnt]# sh mysqldump.sh
[root@localhost mnt]# ls *.dump
mysql-Thu Dec 15 22:18:06 EST 2016.dump  test-Thu Dec 15 22:18:06 EST 2016.dump
mysql-Thu Dec 15 22:18:43 EST 2016.dump  test-Thu Dec 15 22:18:43 EST 2016.dump

==$*,$@,$#==
$*和$#一样,表示显示全部
$@表示统计个数

[root@localhost mnt]# vim test.sh
--------------------------------------------------
#!/bin/bash
echo $1
echo $2
echo $3
echo $*
echo $@
echo $#
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x test.sh
[root@localhost mnt]# ./test.sh r h t
r
h
t
r h t
r h t
3
==man test==
[root@localhost mnt]# man test
--------------------------------------------------
       EXPRESSION1 -a EXPRESSION2
              both EXPRESSION1 and EXPRESSION2 are true

EXPRESSION1 -o EXPRESSION2
              either EXPRESSION1 or EXPRESSION2 is true

-n STRING
              the length of STRING is nonzero            ##有值

STRING equivalent to -n STRING

-z STRING
              the length of STRING is zero            ##没有值

STRING1 = STRING2
              the strings are equal                ##等同于"-eq"

STRING1 != STRING2
              the strings are not equal                ##等同于"-ne","!"表示反向选择

INTEGER1 -eq INTEGER2
              INTEGER1 is equal to INTEGER2            ##等同于"="

INTEGER1 -ge INTEGER2
              INTEGER1 is greater than or equal to INTEGER2

INTEGER1 -gt INTEGER2
              INTEGER1 is greater than INTEGER2

INTEGER1 -le INTEGER2
              INTEGER1 is less than or equal to INTEGER2

INTEGER1 -lt INTEGER2
              INTEGER1 is less than INTEGER2

INTEGER1 -ne INTEGER2
              INTEGER1 is not equal to INTEGER2            ##等同于"!="

FILE1 -ef FILE2
              FILE1 and FILE2 have the same device and inode numbers    ##是否互为硬链接

FILE1 -nt FILE2
              FILE1 is newer (modification date) than FILE2    ##file1比file2的时间戳新

FILE1 -ot FILE2
              FILE1 is older than FILE2                ##file1比file2的时间戳老

-b FILE
              FILE exists and is block special            ##存在并且是块设备

-c FILE
              FILE exists and is character special        ##存在并且是字符设备

-d FILE
              FILE exists and is a directory            ##存在并且是目录

-e FILE
              FILE exists                    ##存在

-f FILE
              FILE exists and is a regular file            ##存在并且是普通文件

-h FILE
              FILE exists and is a symbolic link (same as -L)    ##存在并且是软链接

-L FILE
              FILE exists and is a symbolic link (same as -h)    ##存在并且是软链接
--------------------------------------------------

=="-z"和"-n"==
[root@localhost mnt]# a=1
[root@localhost mnt]# [ -z "$a" ] && echo yes || echo no
no
[root@localhost mnt]# [ -n "$a" ] && echo yes || echo no
yes
[root@localhost mnt]# [ -z "$a" ];echo $?
1
[root@localhost mnt]# [ -n "$a" ];echo $?
0

=="-ef","-nt","-ot"==
[root@localhost mnt]# touch file
[root@localhost mnt]# ln file file1
[root@localhost mnt]# ll |grep file
-rw-r--r--. 2 root root   0 Dec 15 23:35 file
-rw-r--r--. 2 root root   0 Dec 15 23:35 file1
[root@localhost mnt]# [ /mnt/file -ef /mnt/file1 ] && echo yes || echo no
yes
[root@localhost mnt]# rm -fr file1
[root@localhost mnt]# touch file1
[root@localhost mnt]# ll |grep file
-rw-r--r--. 1 root root   0 Dec 15 23:35 file
-rw-r--r--. 1 root root   0 Dec 15 23:37 file1
[root@localhost mnt]# [ /mnt/file -ef /mnt/file1 ] && echo yes || echo no
no
[root@localhost mnt]# [ /mnt/file -nt /mnt/file1 ] && echo yes || echo no
no
[root@localhost mnt]# [ /mnt/file -ot /mnt/file1 ] && echo yes || echo no
yes

=="read -p"==
[root@localhost mnt]# vim check-ip-read.sh
--------------------------------------------------
#!/bin/bash
read -p "Please input you want check ip address: " IP
[ -n "$IP" ] && (
ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
)||(
echo please give me a ip address first
)
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-ip-read.sh
[root@localhost mnt]# ./check-ip.sh
Please input you want check ip address: 172.25.50.100
172.25.50.100 is up
[root@localhost mnt]# ./check-ip.sh
Please input you want check ip address: 172.25.50.101
172.25.50.101 is down
[root@localhost mnt]# ./check-ip.sh
Please input you want check ip address:
please give me a ip address first

[root@localhost mnt]# vim create_user-read.sh
--------------------------------------------------
#!/bin/bash
read -p "Please input you want create username: " USER
useradd $USER &> /dev/null && echo $USER create success! || $USER create failed!
read -p "Please input you want password for $USER: " PASSWD
echo $PASSWD | passwd $USER --stdin &> /dev/null && echo $USER\'s password create success! || $USER\'s password create failed!
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x create_user-read.sh
[root@localhost mnt]# ./create_user-read.sh
Please input you want create username: lee
lee create success!
Please input you want password for lee: 123
lee's password create success!

==check-num脚本==
[root@localhost mnt]# vim check-num.sh        ##使用&&
--------------------------------------------------
#!/bin/bash
read -p "Please input a number: " N
[ "$N" -ge 0 -a "$N" -le 10 ] && echo $N 在10以内 || echo $N 在10以外
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-num.sh
[root@localhost mnt]# ./check-num.sh
Please input a number: 0
0 在10以内
[root@localhost mnt]# ./check-num.sh
Please input a number: -1
-1 在10以外
[root@localhost mnt]# ./check-num.sh
Please input a number: 10
10 在10以内
[root@localhost mnt]# ./check-num.sh
Please input a number: 11
11 在10以外

[root@localhost mnt]# vim check-num-if.sh    ##使用if语句
--------------------------------------------------
#!/bin/bash
read -p "Please input a number: " N
if
[ "$N" -ge 0 -a "$N" -le 10 ]
then
echo $N 在10以内
else
echo $N 在10以外
fi
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-num-if.sh

==check-file脚本==
[root@localhost mnt]# vim check-file.sh
--------------------------------------------------
#!/bin/bash
if
[ -e "$1" ]
then
[ -f "$1" -a ! -L "$1" ] && echo $1 is a regular file
[ -L "$1" ] && echo $1 is a symbolic link
[ -d "$1" ] && echo $1 is a directory
[ -b "$1" ] && echo $1 is block special
[ -c "$1" ] && echo $1 is character special
else
[ -n "$1" ] && echo $1 not exists || echo Please give me a file
fi
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-file.sh
[root@localhost mnt]# ./check-file.sh /etc/passwd
/etc/passwd is a regular file
[root@localhost mnt]# ./check-file.sh /etc/system-release
/etc/system-release is a symbolic link
[root@localhost mnt]# ./check-file.sh /etc
/etc is a directory
[root@localhost mnt]# ./check-file.sh /dev/vda1
/dev/vda1 is block special
[root@localhost mnt]# ./check-file.sh /dev/pts/0
/dev/pts/0 is character special
[root@localhost mnt]# ./check-file.sh /mnt/123
/mnt/123 not exists
[root@localhost mnt]# ./check-file.sh
Please give me a file

==create_user脚本==
[root@localhost mnt]# vim create_user.sh
--------------------------------------------------
#!/bin/bash
if
[ -n "$1" -a -n "$2" ]
then
        if
        [ -e "$1" -a -e "$2" ]
        then
        MAXUSER=`wc -l $1 | cut -d " " -f 1`
        MAXPASS=`wc -l $2 | cut -d " " -f 1`
        [ "$MAXUSER" -eq "$MAXPASS" ] && (
                for NUM in $( seq 1 $MAXUSER )
                do
                USERNAME=`sed -n ${NUM}p $1`
                PASSWORD=`sed -n ${NUM}p $2`
                CKUSER=`getent passwd $USERNAME`
                [ -z "$CKUSER" ] && (
                useradd $USERNAME
                echo $PASSWORD | passwd --stdin $USERNAME &>/dev/null
                echo $USERNAME/$PASSWORD created successfully!
                )||echo "$USERNAME exist!"
                done
        )||(
        echo $1 and $2 have different lines!
        )
        elif
        [ ! -e "$1" ]
        then
        echo "ERROR:$1 is not exsit!"
        else
        echo "ERROR:$2 is not exsit!"
        fi
else
echo "ERROR: Please input userfile and passfile after command!"
fi
:wq
--------------------------------------------------
##使用"getent passwd $USERNAME",而不使用"id $USERNAME"的原因是:有些用户是隐藏起来的,使用后者看不到
[root@localhost mnt]# chmod +x create_user.sh
[root@localhost mnt]# vim userfile
--------------------------------------------------
user1
user2
user3
:wq
--------------------------------------------------
[root@localhost mnt]# vim passfile
--------------------------------------------------
westos1
westos2
westos3
:wq
--------------------------------------------------
[root@localhost mnt]# vim passfile1
--------------------------------------------------
westos1
westos2
:wq
--------------------------------------------------
[root@localhost mnt]# ./create_user.sh userfile
ERROR: Please input userfile and passfile after command!
[root@localhost mnt]# ./create_user.sh username passfile
ERROR:username is not exsit!
[root@localhost mnt]# ./create_user.sh userfile password
ERROR:password is not exsit!
[root@localhost mnt]# ./create_user.sh userfile passfile1
userfile and passfile1 have different lines!
[root@localhost mnt]# ./create_user.sh userfile passfile
user1/westos1 created successfully!
user2/westos2 created successfully!
user3/westos3 created successfully!
[root@localhost mnt]# id user1
uid=1005(user1) gid=1005(user1) groups=1005(user1)
[root@localhost mnt]# userdel -r user1
[root@localhost mnt]# ./create_user.sh userfile passfile
user1/westos1 created successfully!
user2 exist!
user3 exist!

==case脚本==
[root@localhost mnt]# vim case.sh
--------------------------------------------------
#!/bin/bash
case "$1" in
        apple)
        echo banana
        ;;
        banana)
        echo apple
        ;;
        *)
        echo error
        ;;
esac
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x case.sh
[root@localhost mnt]# ./case.sh apple
banana
[root@localhost mnt]# ./case.sh banana
apple
[root@localhost mnt]# ./case.sh orange
error
[root@localhost mnt]# ./case.sh
error

==ask.sh==
[root@localhost mnt]# vim ask.sh
--------------------------------------------------
#!/bin/bash
read -p "what is your name: " NAME
read -p "How old are you: " AGE
read -p "what is your class: " CLASS
read -p "Are you happy: " FEEL
echo $NAME is $AGE\'s old. he is $CLASS student and $FEEL.
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x ask.sh
[root@localhost mnt]# ./ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: happy
lee is 18's old. he is linux student and happy.

==expect==
[root@localhost mnt]# yum install expect -y
......
[root@localhost mnt]# which expect
/usr/bin/expect
[root@localhost mnt]# vim answer.exp
--------------------------------------------------
#!/usr/bin/expect
spawn /mnt/ask.sh
        expect "name"
        send "lee\r"
        expect "old"
        send "18\r"
        expect "class"
        send "linux\r"
        expect "happy"
        send "happy\r"
expect eof
:wq
--------------------------------------------------
##"spawn"表示监控,"expect"表示等待什么字符,"send"表示发送
[root@localhost mnt]# chmod +x answer.exp
[root@localhost mnt]# ./answer.exp
spawn /mnt/ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: happy
lee is 18's old. he is linux student and happy.

[root@localhost mnt]# vim answer.exp
--------------------------------------------------
/删除
expect eof
:wq
--------------------------------------------------
##"expect eof"的作用是在输出中搜索文件结束符。如果没有这一行,脚本会立即退出,得不到正确结果
[root@localhost mnt]# ./answer.exp
spawn /mnt/ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: [root@localhost mnt]#

==改进answer.exp==
[root@localhost mnt]# vim answer.exp
--------------------------------------------------
#!/usr/bin/expect
set name [ lindex $argv 0 ]
set age [ lindex $argv 1 ]
set class [ lindex $argv 2 ]
set feel [ lindex $argv 3 ]

spawn /mnt/ask.sh
        expect "name"
        send "$name\r"
        expect "old"
        send "$age\r"
        expect "class"
        send "$class\r"
        expect "happy"
        send "$feel\r"
expect eof
:wq
--------------------------------------------------
##[lindex $argv n]表示从bash传递过来的第几个参数,0表示第一个参数,1表示第二个参数,以此类推
[root@localhost mnt]# ./answer.exp lee 18 linux happy
spawn /mnt/ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: happy
lee is 18's old. he is linux student and happy.

==exp_continue==
[root@localhost mnt]# man expect
--------------------------------------------------
/exp_continue,按n向下查找

exp_continue [-continue_timer]
             The command exp_continue allows expect itself to continue execut‐
             ing rather than  returning  as  it  normally  would.  By  default
             exp_continue  resets  the timeout timer. The -continue_timer flag
             prevents timer from being restarted. (See expect for more  infor‐
             mation.)

/继续按n向下查找,找到格式

expect {
                     busy       {puts busy\n ; exp_continue}
                     -re "failed|invalid password" abort
                     timeout    abort
                     connected
                 }
q
--------------------------------------------------
##"exp_continue"意思是,如果遇到这个问题,那么就正常执行;如果没有遇到这个问题,那么跳过直接执行下一条

==ssh.exp==
[root@localhost mnt]# vim ssh.exp
--------------------------------------------------
#!/usr/bin/expect
set timeout 3
set ip [ lindex $argv 0 ]
set pass [ lindex $argv 1]
spawn ssh root@$ip
expect {
        "(yes/no)?"     {send yes\n ; exp_continue}
        "password:"     {send "$pass\r" ;}
}
interact
:wq
--------------------------------------------------
##"set timeout 3"设置后面所有的expect命令的等待响应的超时时间为3秒
##"interact"执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。否则退出登录
[root@localhost mnt]# chmod +x ssh.exp
[root@localhost mnt]# ./ssh.exp 172.25.50.250 redhat
spawn ssh root@172.25.50.250
root@172.25.50.250's password:
Last login: Fri Dec 16 08:56:24 2016
[root@foundation50 ~]# logout
Connection to 172.25.50.250 closed.
[root@localhost mnt]#

==scan_hostname脚本==

[root@localhost mnt]# vim ssh.exp         ##修改ssh.exp脚本

--------------------------------------------------
#!/usr/bin/expect
set timeout 3
set ip [ lindex $argv 0 ]
set pass [ lindex $argv 1]
set comm [ lindex $argv 2]
spawn ssh root@$ip $comm
expect {
        "(yes/no)?"     {send yes\r ; exp_continue}
        "password:"     {send "$pass\r" ;}
}
expect eof
:wq
--------------------------------------------------
[root@localhost mnt]# vim scan_hostname.sh
--------------------------------------------------
#!/bin/bash
for NUM in {100..110}
do
ping -c1 -w1 172.25.50.$NUM &> /dev/null && /mnt/ssh.exp 172.25.50.$NUM redhat hostname
done
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x scan_hostname.sh
[root@localhost mnt]# rm -fr ~/.ssh/
[root@localhost mnt]# ./scan_hostname.sh
spawn ssh root@172.25.50.100 hostname
The authenticity of host '172.25.50.100 (172.25.50.100)' can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.50.100' (ECDSA) to the list of known hosts.
root@172.25.50.100's password:
localhost
spawn ssh root@172.25.50.110 hostname
The authenticity of host '172.25.50.110 (172.25.50.110)' can't be established.
ECDSA key fingerprint is ee:be:20:8d:8a:1e:a0:b5:9a:34:80:1b:d2:30:18:75.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.50.110' (ECDSA) to the list of known hosts.
root@172.25.50.110's password:
Permission denied, please try again.
[root@localhost mnt]# vim scan_hostname.sh
--------------------------------------------------
#!/bin/bash
for NUM in {100..110}
do
ping -c1 -w1 172.25.50.$NUM &> /dev/null && (
        /mnt/ssh.exp 172.25.50.$NUM redhat hostname |grep -Ev "spawn|The|ECDSA|connecting|Warning|password" |sed "s/Permission\ denied\,\ please\ try\ again\./172.25.50.$NUM password is error!/g"
        )||(
        echo 172.25.50.$NUM is down! )
done
:wq
--------------------------------------------------
[root@localhost mnt]# ./scan_hostname.sh
localhost
172.25.50.101 is down!
172.25.50.102 is down!
172.25.50.103 is down!
172.25.50.104 is down!
172.25.50.105 is down!
172.25.50.106 is down!
172.25.50.107 is down!
172.25.50.108 is down!
172.25.50.109 is down!
172.25.50.110 password is error!

转载于:https://blog.51cto.com/shichao/1883002

Linux课程第二十四天学习笔记相关推荐

  1. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 ​​​​​​​ lin ...

  2. 视觉SLAM十四讲学习笔记-第二讲-初识SLAM

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 "定位"和"建图",可以看成感知的"内外之分". ...

  3. 视觉SLAM十四讲学习笔记-第三讲-相似、仿射、射影变换和eigen程序、可视化演示

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  4. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  5. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

    专栏系列文章如下:  专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...

  6. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

  7. 视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示

    经过半年学习SLAM相关知识,对SLAM系统有了一些新的认识,故回看以前的学习记录,做总结和校正. 前三讲学习笔记如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉S ...

  8. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  9. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  10. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

最新文章

  1. SAP RETAIL 根据Merchandise Category Hierarchy Level查询物料清单
  2. python 字典等习题
  3. 十、Sumif 函数
  4. [Ubuntu] 如何在Ubuntu11.04将PHP5.3降级到PHP5.2
  5. 王者荣耀全栈项目部署到阿里云服务器笔记
  6. 04-iOS蓝牙传输数据演示
  7. JSP内置对象之WEB安全性及config对象
  8. ASP.NET MVC中使用Autofac实现简单依赖注入
  9. zabbix监控特定进程
  10. 【Luogu1588】丢失的牛
  11. appium+python环境搭建_想学习自动化测试,已经学习了appium+python环境搭建和python的简单内容,下面该怎么做?...
  12. sakai mysql_开源网络教学平台SAKAI开发环境的搭建 | 学步园
  13. 测试必经之路(探索性测试)
  14. ASO优化:ios关键词覆盖和增量技巧
  15. 卷积神经网络 —— 图像识别与深度学习
  16. Docker中安装并配置redis
  17. Mifare UltraLight 卡存储结构
  18. 元宇宙3D设计系统【构思与展望】
  19. jsj中对象之间的赋值
  20. PCB——功放pcb设计

热门文章

  1. php启动另一个php进程,用php守护另一个php进程的例子
  2. c语言json数组转字符串数组,JS中json字符串和数组相互转换
  3. 发卡网shell漏洞_Apache Tomcat文件包含漏洞(CVE-2020-1938)复现
  4. 将数据加载到datagridview_JVM系列(一)-- Java类的加载机制
  5. 单元测试 代码里面都绝对路径怎么处理_python基础之包,异常处理
  6. vscode 左侧图标_分钟将vscode撸成小霸王
  7. redis cluster 分布式锁_Redis的分布式锁的实现原理
  8. 在线制作车牌效果图_价格低的防火板材行业专家在线为您服务
  9. PDF文件编辑方法:PDF怎么插入图片背景
  10. template.js 模板引擎