1. 随机字符
# 生成20个小写字母
[root@changshatest /scripts]$cat /dev/urandom | tr -dc a-z | head -c 20
vsgzyqxirfkbzammbdfc
# 生成20个大写字母
[root@changshatest /scripts]$cat /dev/urandom | tr -dc A-Z | head -c 20
MIOSVMBISFHDMSXYWWKU
# 生成20个数字
[root@changshatest /scripts]$cat /dev/urandom | tr -dc 0-9 | head -c 20
84933390449524598006
# 生成20个数字和大写字母的组合字符串
[root@changshatest /scripts]$cat /dev/urandom | tr -dc 0-9-A-Z | head -c 20
UELUMAI423EIVMFGQ1LD
# 生成20个随机字符(包含数字,大写字母,小写字母)
[root@changshatest /scripts]$cat /dev/urandom | tr -dc 0-9-A-Z-a-z | head -c 20
aJJUjFFp6NgUbDMJLl8v
批量添加20个用户,用户名为user01-20,密码为user后面跟5个随机字符
#!/bin/bash
for i in `seq 1 20`
do
pwd=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
if [ $i -eq 1 ]
then
echo "user01 user01$pwd" >> userinfo.txt
useradd user01
echo "use01$pwd" | passwd --stdin user01
else
useradd user$i
echo "user$i$pwd" | passwd --stdin user$i
echo "user$i user$i$pwd" >> userinfo.txt
fi
done
整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
#!/bin/sh
a=10
if [ $a -eq 10 ];then
echo true
else
echo false
fi
#!/bin/sh
a=10
if (( $a < 10 ));then
echo true
else
echo false
fi
字符串比较
字符串比较:
= 等于 if [ "$a" = "$b" ]
== 与=等价
!= 不等于 if [ "$a" = "$b" ]
< 小于,在ASCII字母中的顺序:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ] #需要对<进行转义
> 大于
-z 字符串为null,即长度为0
-n 字符串不为null,即长度不为0
#!/bin/sh
a="aaa"
if [ "$a" = "aaa" ];then
echo true
else
echo false
fi
a=""
if [ -z "$a" ];then
echo "字符串长度为0"
fi
判断输入的是不是数字
#!/bin/bash
read -p "请输入一个数字" num
if [[ "$num" =~ ^[0-9]+$ ]]; then
echo "你输入的是数字"
else
echo "你输入的不是数字"
fi
#!/bin/bash
read -p "请输入一个数字" num
if [ -n "$(echo $num | sed -n "/^[0-9]\+$/p")" ]; then
echo "你输入的是数字"
else
echo "你输入的不是数字"
fi
求和
#!/bin/bash
sum=0
for i in `seq 1 20`
do
sum=$(($sum+$i))
done
echo $sum
#!/bin/bash
sum=0
for i in `seq 1 20`
do
let sum+=i
done
echo $sum
#!/bin/bash
sum=0
i=1
while [ $i -le 20 ]
do
let sum+=i
let i++
done
echo $sum
网段内存活的主机
#!/bin/bash
for i in {1..50}
do
ping -c 1 172.26.14.$i >/dev/null 2>&1
if [ $? -eq 0 ];then
echo "172.26.14.$i is up"
else
echo "172.26.14.$i is down"
fi
done
IP和TCP分析
查看连接某服务端口最多的的IP地址
[root@gateway ~]# netstat -nat | grep "192.168.x.x:port" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
TCP各种状态列表
[root@gateway ~]# netstat -nat |awk '{print $6}'
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT
先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
[root@gateway ~]# netstat -nat |awk '{print $6}'|sort|uniq -c
1 established)
307 ESTABLISHED
1 FIN_WAIT1
66 FIN_WAIT2
1 Foreign
4 LAST_ACK
12 LISTEN
1946 TIME_WAIT
最后的命令如下:
[root@gateway ~]# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
java服务cpu高
#!/bin/bash
mkdir -p ~/java-stack/
all=$(ps -ef | grep java | grep -v grep | awk '{print $2}')
for pid in ${all}
do
echo "生成堆栈:${pid}"
jstack -l $pid > ~/java-stack/${pid}.log
done
echo '完成'
使用命令 jstat -gcutil <进程ID> 2000 10 查看GC情况