Shell 补充

一、随机数

$RANDOM

默认随机产生0~32767

语法

#产生0~1之间的随机数
echo $[$RANDOM%2]
#产生0~6之间的随机数
echo $[$RANDOM%7]
#产生0~55之间的随机数
echo $[$RANDOM%56]
#产生50~60之间的随机数
echo $[$RANDOM%11+50]
#产生50~90之间的随机数
echo $[$RANDOM%41+50]
#规律:第一个数为最大值(90)减去最小值(50)加1,第二个数为最小值(50)

案例

①随机产生1000个以139开头的号码

#!/bin/env bash
> /tmp/phonenum.txt
for ((i=1;i<=1000;i++));do
    num=""
    for ((j=1;j<=8;j++));do
      num+=$[$RANDOM%10]
    done
    echo "139$num" >> /tmp/phonenum.txt
done

# uniq /tmp/phonenum.txt |wc -l

二、Expect

实现自动交互,捕获屏幕输出,再进行对用输入

脚本格式

使用:# except -f 脚本路径

语法格式

#!/usr/bin/expect
spawn ssh root@10.1.1.1
expect {
    "(yes/no)?" { send "yes\r";exp_continue }
    "password:" { send "xxh\r"}
}
#交互 
interact 
#结束
#expect eof

接收参数

#!/usr/bin/expect
#定义第一个参数变量
set ip [ lindex $argv 0 ]
#定义第二各参数变量
set pass [ lindex $argv 2 ]
#定义变量
set test "test"
#定义超时时间,也就是等待程序响应的最长时间
set timeout 10

spawn ssh root@$ip
expect {
    "(yes/no)?" { send "yes\r";exp_continue }
    "password:" { send "$pass\r"}
}
#交互
interact
#结束
#expect eof

案例:

1.在指定服务器上清空/tmp/* 并创建文件/tmp/1.txt

#!/bin/bash
read -p "Please input username:" name
read -p "Please input server ip:" ip

/usr/bin/expect<<-EOF
spawn ssh $name@$ip
expect {
    "yes/no" { send "yes\r";exp_continue}
    "password:" { send "$pass\r" }
}
expect "#"
send "rm -rf /tmp/* \r"
send "touch /tmp/1.txt \r"
send "exit \r"
expect eof
EOF

2.myql 安全初始化

#!/bin/bash
cd /usr/local/mysql
/usr/bin/expect <<-ww 
spawn mysql_secure_installation
expect {
    "none"          {send "\r";exp_continue}
    "Y/n"      {send "y\r";exp_continue}
    "New password"  {send "123\r";exp_continue}
    "Re-enter new password" {send "123\r";exp_continue}
    "Y/n"         {send "y\r";exp_continue}
    "Y/n"      {send "n\r";exp_continue}
    "Y/n"            {send "y\r";exp_continue}
    "Y/n"           {send "y\r";exp_continue}
    }
    expect eof
ww

三、并发执行

{

}&
wait

检测局域网内主机通讯使用并发执行

#!/bin/env bash
baseip=192.168.15
for i in {1..254};do
{
    ip=$baseip.$i
    ping -c1 $ip &> /dev/null
    [ $? -eq 0 ] && echo "$ip" >> /tmp/ip_up.txt || echo "$ip" >> /tmp/ip_down.txt
}&
done
wait
echo "Detection completed"

四、小工具

time

统计脚本执行完成所需要的时间

time ./脚本名

五、其他

屏蔽信号

trap

trap '' 1 2 3 19
Last modification:June 28th, 2020 at 04:06 pm