Shell脚本学习(二)

一、制作SSH登录远程服务器的Shell脚本

Ubuntu环境需要安装expect安装包

sudo apt-get install expect
  • 1

使用shell脚本自动ssh登录远程服务器

login.sh

#!/usr/bin/expect -f
# 设置ssh连接的用户名
set user liuben
# 设置ssh连接的host地址
set host 10.211.55.4
# 设置ssh连接的port端口号
set port 9999
# 设置ssh连接的登录密码
set password admin
# 设置ssh连接的超时时间
set timeout -1

spawn ssh $user@$host -p $port
expect "*password:"
# 提交密码
send "$password\r"
# 控制权移交
interact
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
# 确定login.sh脚本有可执行权限
chmod +x login.sh
# 执行login.sh脚本
./login.sh

# 注意
不能按照习惯来用sh login.sh来这行expect的程序,会提示找不到命令,如下:

login.sh: line 3: spawn: command not found
couldn't read file "*password:": no such file or directory
login.sh: line 5: send: command not found
login.sh: line 6: interact: command not found

因为expect用的不是bash所以会报错。因为bash和expect的脚本指定了不同的脚本解释器
#!/usr/bin/expect -f
#!/bin/bash
执行的时候直接./login.sh就可以了。~切记!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

参考文章:

  • [cpp]  view plain  copy
    1. #!/usr/bin/expect -f  
    2. # 设置ssh连接的用户名  
    3. set user root  
    4. # 设置ssh连接的host地址  
    5. set host 199.169.0.62  
    6. # 设置ssh连接的port端口号  
    7. set port 22  
    8. # 设置ssh连接的登录密码  
    9. set password cloud  
    10. # 设置ssh连接的超时时间  
    11. set timeout -1  
    12.   
    13. spawn ssh $user@$host -p $port  
    14. expect "*password:"  
    15. # 提交密码  
    16. send "$password\r"  
    17. sleep 3  
    18. send "cd /home/ubuntu\r"  
    19. send "ls\r"  
    20. send "./test.sh\r"  
    21. send "exit 1\r"  
    22. # 控制权移交  
    23. interact
    24.   

二、注释的用法

Shell脚本的注释

Shell脚本单行注释用#,这个我想大家应该都知道。如果要把一段代码全部注释掉,可以用如下方法

#!bin/bash

echo "我不是单行注释"
# echo "我是单行注释,你看不到我"

echo "我不是多行注释"
:<<COMMENT
echo "我是多行注释1,你看不到我"
echo "我是多行注释2,你看不到我"
COMMENT
echo "我没有看到多行注释1和多行注释2"

# 其实COMMENT可以随意命名,只要别跟中间的注释内容相同即可。当Shell脚本执行遇到:<<COMMENT,就不执行脚本了,一直到再碰到COMMENT后才重新开始执行脚本。如果忘记写COMMENT或者写错(由于已经不执行脚本了,所以即使写错也不会报错),则:<<COMMENT之后的脚步将都不会执行。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

参考文章:

Shell脚本的文件注释模板

#!bin/bash
# ----------------------------------------------------------------------
# name:         login.sh
# version:      1.0
# createTime:   2016-06-22
# description:  shell脚本的功能描述
# author:       birdben
# email:        [email protected]
# github:       https://github.com/birdben
# ----------------------------------------------------------------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里推荐一个比较好的Shell代码规范

一、制作SSH登录远程服务器的Shell脚本

Ubuntu环境需要安装expect安装包

sudo apt-get install expect
  • 1

使用shell脚本自动ssh登录远程服务器

login.sh

扫描二维码关注公众号,回复: 2221476 查看本文章
#!/usr/bin/expect -f
# 设置ssh连接的用户名
set user liuben
# 设置ssh连接的host地址
set host 10.211.55.4
# 设置ssh连接的port端口号
set port 9999
# 设置ssh连接的登录密码
set password admin
# 设置ssh连接的超时时间
set timeout -1

spawn ssh $user@$host -p $port
expect "*password:"
# 提交密码
send "$password\r"
# 控制权移交
interact
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
# 确定login.sh脚本有可执行权限
chmod +x login.sh
# 执行login.sh脚本
./login.sh

# 注意
不能按照习惯来用sh login.sh来这行expect的程序,会提示找不到命令,如下:

login.sh: line 3: spawn: command not found
couldn't read file "*password:": no such file or directory
login.sh: line 5: send: command not found
login.sh: line 6: interact: command not found

因为expect用的不是bash所以会报错。因为bash和expect的脚本指定了不同的脚本解释器
#!/usr/bin/expect -f
#!/bin/bash
执行的时候直接./login.sh就可以了。~切记!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

参考文章:

猜你喜欢

转载自blog.csdn.net/weixin_41988628/article/details/80988514