ubuntushell脚本
㈠ 如何用shell脚本实现ubuntu用户自动登录
安装
CentOS下安装命令很简单,如下
sudo yum install expect
至于Mac用户,可以通过homebrew安装(需要先安装homebrew,请自行Google)
brew install expect
测试脚本
我们写一个简单的脚本实现scp拷贝文件,在脚本里配置密码,保存为scp.exp如下
#!/usr/bin/expect
set timeout 20
if { [llength $argv] < 2} {
puts "Usage:"
puts "$argv0 local_file remote_path"
exit 1
}
set local_file [lindex $argv 0]
set remote_path [lindex $argv 1]
set passwd your_passwd
set passwderror 0
spawn scp $local_file $remote_path
expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd\r"
exp_continue
}
"*es/no)?*" {
send "yes\r"
exp_continue
}
timeout {
puts "connect is timeout"
exit 3
}
}
注意,第一行很重要,通常我们的脚本里第一行是#!/bin/bash,而这里是你机器上expect程序的路径,说明这段脚本是由expect来解释执行的,而不是由bash解释执行,所以代码的语法和shell脚本也是不一样的,其中set passwd your_passwd设置成你自己的密码,然后执行如下命令
./scp.exp ./local_file user@host:/xx/yy/
执行前确保scp.exp有执行权限,第一个参数为你本地文件,第二个为远程主机的目录,运行脚本如果报错“connect is timeout”,可以把超时设长一点,第二行set timeout 20可以设置超时时间,单位是秒。脚本执行效果如下
还能做什么
细心的同学一定发现了,其实expect提供的是和终端的一种交互机制,输入密码只是其中一种应用形式,只要是在终端阻塞需要输入时,都可以通过expect脚本完成自动输入,比如前面脚本里配置了两种交互场景,一种是终端提示"password:"时输入密码,还有一种是提示"yes/no)?"时输入“yes”,如果和远程主机是第一次建立连接,执行scp.exp脚本效果是这样的
所以我们可以根据终端的提示来配置输入命令,这样就能达到了自动化的效果。至于处理其它交互场景,只需要照着上面的脚本依葫芦画瓢就行了
㈡ shell脚本执行source报错
在Ubuntu 16.04机器在执行shell脚本时,报source: not found
原因是shell脚本执培困行的时候配稿念用的不是bash,而是dash,可以使用下面方法修改。
出现对话框后,选择no,再查看一次
重新执行脚本敬塌,问题解决
㈢ 【tips】Ubuntu 两种开机自启动程序方式
个人制档链作的程序可以添加到开机自启动项中,简便一些流程,以下列出两种方式
方式一
卜蠢雹 第一种方式比较简单,通过Ubuntu 自带的Startup Applications即可添加,只要选中路径下的可执行文件即可。
方式二
通过Shell脚本+rc.local实现
step 01 创建一个脚本文件,比如起名为run_start.sh
step 02 修改rc.local文件,在exit 0之前添加执行脚本文件的命令
这两种方式,都会在开机时启动相应的程序。
当然,还有很多其他的启动三方程序型帆的方式,目前没有一一尝试,仅举两例。
㈣ ubuntu怎么保存shell脚本文件
ubuntu怎么保存shell脚本文件
ubuntu保存shell脚本文件
第一步:用vim创建一个以.sh结尾的文件,此时这个文件是暂时性的文件,当编写好文件并保存时才能看到文件;
第二步:要首先按一下“i”键才能进行插入(编写)模式,文件开头要写一段特殊符号,“#!/bin/bash” ,这个是开头文件的要求;
第三步:可以开始写里面的内容了,其中可以使用 # 作为单行注释的符号,用 “:<<! !”,作为多行注释的符号;在这里插入图片描述
第四步:编写完语句之后按一下esc键,然后再按冒号键进入最后一行,然后在按“wq”键进行保存,在运行前要使用 “chmod”进行修改权限,具体的指令为“chmod 777 a.sh”;
查看更多
㈤ 在Ubuntu下编写shell脚本读取文件
需求功能:
创建测试用例文件 text :
创建shell脚本:
运行结果:
利用 awk 'END{print NR}' [文件名] 来输出行数:
在shell脚本中添加该功能:
运行结果:
上面的shell文件只是把文件名写死在脚本中,并没有实际使用意义,所以需要编写一个指令来指定需要读取的文件,就像 vim [文件名] 一样
“$1” 代表第1个参数,也就是在 read 之后紧跟的参数,将其作为文件名传入:
将脚本移动至环境变量对应的目录中:(可以自己更改 /bin/xxx 来决定运行命令的名称,但注意不能重复)
sudo mv read /bin/read
然后添加运行权限:
sudo chmod 755 /bin/read
打开终端的目录可以是任何位置,通过以下命令即可运行shell脚本:
sudo read [文件路径]
同理,我们还可以自己为复杂指令编写shell脚本,来提高命令的使用效率,例如开关ss服务,打开锐捷客户端认证等等。