shell去掉两端的空格(类似python的strip功能)
echo " abs ssa " |sed 's/ *$//g'|sed 's/^ *//g'
shell删除匹配的两行之间的内容(包含匹配的行)
比如,文档myfile.txt,内容如下:
*****
****
a ***
**
**
**
b **
****
删除a,b行之间的内容,最终得到
*****
****
****
使用sed命令匹配删除
sed -i '/a/,/b/d' myfile.txt
shell调用expect实现自动交互
上传文件到指定设备
调用方法:
假设脚本名称为upload.sh
bash upload.sh 设备IP地址 设备用户 设备用户密码
脚本代码
#!/bin/bash
if [ $# -lt 3 ]; then
echo "Usage: $0 ip user password"
exit 1
else
ip=$1
user=$2
password=$3
fi
src=./test #要拷贝的源目录
dst=/home/$user/ #远端目录
#上传文件
expect <<-EOF
set timeout 300 #设置超时时间值大些避免拷贝文件过多超时
spawn scp -r $src $user@$ip:$dst
expect {
"(yes/no)?"
{
send "yes\r"
expect "*assword:" { send "$password\r"}
}
"*assword:"
{
send "$password\r"
}
}
expect eof
EOF
执行远端代码
调用方法:
假设脚本名称为execute.sh
bash execute.sh 设备IP地址 设备用户 设备用户密码
脚本代码
#!/bin/bash
if [ $# -lt 3 ]; then
echo "Usage: $0 ip user password"
exit 1
else
ip=$1
user=$2
password=$3
fi
command="bash /home/$user/test.sh" #要执行的命令脚本
#执行命令
expect <<-EOF
set timeout 300 #设置超时时间值大些避免执行命令时间过长超时
spawn ssh $user@$ip $command
expect {
"(yes/no)?"
{
send "yes\r"
expect "*assword:" { send "$password\r"}
}
"*assword:"
{
send "$password\r"
}
}
expect eof
EOF