Shell常用技巧

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

SED替换完整单词

网上有很多实现,这里是一个可用的实现。
验证环境:CentOS Linux release 7.1.1503
把文件filepath里的单词oldword替换为newword,解决方案是使用“ <”作为开始定界符,并使用“ >”作为结束定界符。

sed -i "s/\<oldword\>/newword/g" filepath
实例

修改用户名时,需要将samba对应的权限配置修改。
比如用户原来名为aaa,对samba共享share有访问权限,配置如下:
samba配置文件路径:/etc/samba/smb.conf

[share]
path = /home/share
available = yes
browseable = no
writable = yes
write list = aaa,bbb
valid users = aaa,bbb

如果修改用户aaa名称为ccc,如果不对应修改samba配置文件,则修改后的ccc失去对share的访问权限。

sed -i "s/<aaa>/ccc/g" /etc/samba/smb.conf

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值