LinuxIT必备技能Linux

实用的shell脚本实例留存!

2020-03-31  本文已影响0人  Coding测试

测试中经常会遇到批量创建用户的案例

需求:批量创建10个系统帐号hwb01-hwb10并设置密码(密码为随机数,要求字符和数字等混合)

#!/bin/bash
#############################################################
# File Name: add_user.sh
#############################################################
​
Passwd_File=/tmp/`uuidgen`.txt
>$Passwd_File
chmod 400 $Passwd_File
​
for i in hwb{01..10}
 do
 userdel -r "$i" &>/dev/null
 id $i &>/dev/null
 if [ $? -ne 0 ]
 then
 useradd $i
 PassWd=`uuidgen`
 echo $PassWd |passwd --stdin $i &>/dev/null
 echo "用户名:$i 密码:$PassWd" >>$Passwd_File
 echo -e "\033[32m $i 用户创建成功!\033[0m"
 else 
 echo "$i 用户已存在"
 fi
 if [ "$i" == "hwb10" ] 
 then
 echo "用户密码请查看文件 $Passwd_File"
 fi
done
--方法一
echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 \&\& echo \1 >>/tmp/passwd.txt \&\& echo $RANDOM |md5sum |cut -c 1-5>>/tmp/passwd.txt \&\& echo `tail -1 /tmp/passwd.txt`|passwd --stdin \1#g'|bash
--方法二
echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 \&\& pass=`echo $RANDOM |md5sum |cut -c 1-5` \&\& echo $pass |passwd --stdin \1 \&\& echo \1 $pass>>/tmp/user_passwd.txt#g'|bash
--方法三
echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 \&\& pass=`echo $RANDOM |md5sum |cut -c 1-5` \&\& echo \1:$pass>>/tmp/user_passwd.txt \&\& chpasswd</tmp/user_passwd.txt#g'|bash

筛选符合长度的单词的案例

需求:利用bash for循环打印下面这句话中字母数不大于6的单词

#!/bin/bash
#############################################################
# File Name: changdu.sh
#############################################################
Word='I am hwb Welcome to my toutiao https://mp.toutiao.com/profile_v3/index'
​
for i in $Word
 do 
 #[ ${#i} -le 6 ] && echo $i #子串方法
 a=`echo $i |wc -L`
 if [ $a -le 6 ]
 then 
 echo $i
 fi
done

shell脚本之自动登录

场景说明:
平时在控制台输入指令如:sudo、ssh、ftp或者修改admin权限的文件时候都会要求输入password,但是在she'll脚本运行过程中该如何交互实现自动输入密码呢?

用重定向方法实现交互的前提是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码 .
shell用重定向作为标准输入的用法是:cmd<<delimiter ,shell 会将分界符delimiter之后直到下一个同样的分界符之前的内容作为输入。

实现ftp自动登录并运行ls指令的用法如下:其中root为用户名,123456为密码

ftp -i -n 192.168.1.90 <<EOF
user root 123456
ls
EOF

跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数
所以实现sudo自动输入密码的脚本如下:其中123456为密码

echo '123456' | sudo -S cp file1 /etc/hosts

实现自动修改密码的脚本写法如下:

echo 'password' | passwd -stdin username

上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了。

expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包

yum install expect

用法如下:

#!/bin/expect
set timeout 30
spawn ssh -l root 192.168.1.90
expect "password:"
send "123456\r"
interact

注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect
在运行脚本时候要expect file,不能sh file了

解释:
上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句
expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:root@192.168.1.90's password:
send就是将密码123456发送过去
interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台


上一篇 下一篇

猜你喜欢

热点阅读