案例1:批量生成随机字 符 文件名案例
使用for 循环在 /neo 目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串 neo创建的结果名称示例 如下:
[root@oldgirl C19]# ls /neo apquvdpqbk_neo.html mpyogpsmwj_neo.html txynzwofgg_neo.html bmqiwhfpgv_neo.html mtrzobsprf_neo.html vjxmlflawa_neo.html jhjdcjnjxc_neo.html qeztkkmewn_neo.html jpvirsnjld_neo.html ruscyxwxai_neo.html
参考如下:
# 生成随机数的方式: echo $RANDOM # 随机数的范围: 0~32767 openssl rand -base64 10 # 10 表示要生成的随机数的长度 date +%s%N # 用时间做随机数 head /dev/urandom |cksum uuidgen # 利用uuid cat /proc/sys/kernel/random/uuid mkpasswd # 需要先安装 expect ; yum install expect -y l 总长度 d 数字个数 c 小写字母个数 C 大写字母个数 s 特殊字符个数 # 示例: [root@m01 ~]# mkpasswd -l 20 -d 17 -C 1 -c 1 -s 1 1194S1242h756%909877 # 获取到随机10个小写字母 [root@m01 ~]# echo "OLDBOY$RANDOM" OLDBOY31600 [root@m01 ~]# echo "OLDBOY$RANDOM"|md5sum 2b33f154112a2f371beba1600d24f246 - [root@m01 ~]# echo "OLDBOY$RANDOM"|md5sum|tr 0-9 a-j icfafgebagjaajeieifeifabgfhfeegj - [root@m01 ~]# echo "OLDBOY$RANDOM"|md5sum|tr 0-9 a-j |cut -c 2-11 afbagebbdf # 获取到随机10个小写字母 [root@m01 ~]# [root@m01 ~]# mkpasswd -l 10 -d 0 -C 0 -c 10 -s 0 # 获取到随机10个小写字母 tkbviqfovu [root@m01 ~]# echo "OLDBOY$RANDOM"|md5sum|tr 0-9 a-j |cut -c 2-11 echo "123456" | md5sum # 查看一个字符串的md5值 cat file | tr [0-9] [a-j] # 把文件中的数字0-9替换为a-j cut -c 2-11 # -c参数表示 仅显示行中指定范围的字符 # 示例代码: [root@m01 cases]# cat case01.sh #!/bin/bash ############################################################## # File Name: case01.sh # Version: V1.0 # Author: neo # Organization: anonymous # Created Time : 2019-07-04 11:15:30 # Description: ############################################################## path=/neo [ -d $path ] || mkdir -p $path # 如果 /neo 目录不存在则创建 for n in {1..10} do random=`mkpasswd -l 10 -d 0 -C 0 -c 10 -s 0` touch $path/${random}_neo.html done [root@m01 cases]# sh case01.sh [root@m01 neo]# ll total 0 -rw-r--r-- 1 root root 0 Jul 4 11:23 hqxdsueipv_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 jpiauceiiy_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 lagtetdxnu_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 ogkstnleki_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 qkljrkpckc_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 rpslndkrjc_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 snvcqbwlko_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 tuwsslvcgn_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 tzxismkjka_neo.html -rw-r--r-- 1 root root 0 Jul 4 11:23 wlaroblbvi_neo.html [root@m01 neo]#
案例2:批量改名特殊案例
将以上案例1中结果文件名中的 neo 字符串全部改成 Neomaple,最好用 for 循环实现并且将扩展名html全部改成大写
参考如下:
# 方式一:for 循环 [root@m01 cases]# cat case02.sh #!/bin/bash for file in `ls /neo/*.html` do mv $file /${file/neo.html/Neomaple.HTML} done [root@m01 cases]# # 方式二:awk [root@m01 neo]# ls *.html|awk -F "neo.html" '{print "mv",$0,$1"Neomaple.HTML"}' mv dbizjjvosl_neo.html dbizjjvosl_Neomaple.HTML mv ezoiojifzy_neo.html ezoiojifzy_Neomaple.HTML mv fanspikyqs_neo.html fanspikyqs_Neomaple.HTML mv hmvkxpoyru_neo.html hmvkxpoyru_Neomaple.HTML mv hymssbshwu_neo.html hymssbshwu_Neomaple.HTML mv kgavlirhts_neo.html kgavlirhts_Neomaple.HTML mv khxcbyrnnt_neo.html khxcbyrnnt_Neomaple.HTML mv ntgtztpzsp_neo.html ntgtztpzsp_Neomaple.HTML mv pfykhbwgyk_neo.html pfykhbwgyk_Neomaple.HTML mv sybwbmnmyh_neo.html sybwbmnmyh_Neomaple.HTML [root@m01 neo]# ls *.html|awk -F "neo.html" '{print "mv",$0,$1"Neomaple.HTML"}'|bash # 方式三:rename [root@m01 neo]# rename "neo.html" "Neomaple.HTML" *.html # 把 neo.html 改成 Neomaple.HTML ;*.html 表示针对 以 html结尾的文件
案例3:批量创建特殊要求用户案例
批量创建10个系统帐号 neo01 - neo10 并设置密码(密码为随机数 ,要求字符和数字等混合)
# 分析: 1) 生成01~10的序列: echo {01..10} seq -w 10 2) 随机数: openssl rand -base64 10 3) 创建用户和密码: useradd neo01 # 创建用户 # 设置密码方法1: echo 密码 |passwd --stdin 用户名 # 设置密码方法2: chpasswd 命令 chpasswd 设置密码时,用户名和密码要遵守这种格式: 用户名:密码 4) for 循环 # 方式一: [root@m01 cases]# cat case03.sh #!/bin/bash for n in {01..10} do passwd=`openssl rand -base64 10` # 要把随机密码保存到变量中 useradd neo$n echo $passwd|passwd --stdin neo$n echo -e "neo$n\t$passwd" >>/tmp/user.list # 把密码保存到文件中; echo -e 的作用是 解析 \t done [root@m01 cases]# sh case03.sh Changing password for user neo01. passwd: all authentication tokens updated successfully. Changing password for user neo02. passwd: all authentication tokens updated successfully. Changing password for user neo03. passwd: all authentication tokens updated successfully. Changing password for user neo04. passwd: all authentication tokens updated successfully. Changing password for user neo05. passwd: all authentication tokens updated successfully. Changing password for user neo06. passwd: all authentication tokens updated successfully. Changing password for user neo07. passwd: all authentication tokens updated successfully. Changing password for user neo08. passwd: all authentication tokens updated successfully. Changing password for user neo09. passwd: all authentication tokens updated successfully. Changing password for user neo10. passwd: all authentication tokens updated successfully. [root@m01 cases]# cat /tmp/user.list neo01 pFvlvG0NXpIvYg== neo02 UPRO/U7uTxnJNw== neo03 0xkAtO5U70ws5w== neo04 wXR+K7fl+8i5wA== neo05 7bt6b09wv5dw7Q== neo06 AUNPXdRaJ8NUTA== neo07 E+JPwENB7KXHUA== neo08 1lZylckuf8rNlg== neo09 ZD7qVwMfsPMvzg== neo10 B3EgYyb/swvDow== [root@m01 cases]# su - neo01 [neo01@m01 ~]$ su - neo02 Password: [neo02@m01 ~]$ whoami neo02 [neo02@m01 ~]$ # 方式二: [root@m01 cases]# cat case0302.sh #!/bin/bash for n in `seq -w 11 15` do passwd=`openssl rand -base64 10` # 要把随机密码保存到变量中 useradd neo$n echo "neo$n:$passwd" >>/tmp/chpasswd.log # 把用户名和密码以 用户名:密码 这种格式保存到 一个文件 chpasswd.log 中 done chpasswd </tmp/chpasswd.log # 把 /tmp/chpasswd.log 这个文件通过输出重定向 给 chpasswd 命令处理,由于 chpasswd.log 中是以 用户名:密码 格式保存的,所以 chpasswd 命令能直接处理 [root@m01 cases]# sh case0302.sh [root@m01 cases]# cat /tmp/chpasswd.log neo11:Ij76k7pbfyByZQ== neo12:lmCPKpKoUP/UOg== neo13:JNIfuo8wwXgEkA== neo14:QkBxlLf6mhQP+g== neo15:fbvtdTSu9yTySg== [root@m01 cases]# su - neo11 [neo11@m01 ~]$ su - neo15 Password: [neo15@m01 ~]$ # 方式三: [root@m01 cases]# cat case0303.sh #!/bin/bash . /etc/init.d/functions if [ $UID -ne 0 ] then action "only root can execute this script" /bin/false exit 1 fi for n in {12..17} do passwd=`openssl rand -base64 10` if `! grep -w "neo$n" /etc/passwd &>/dev/null` # grep -w 表示精确匹配;grep 如果获取到相应结果,则grep命令的执行结果为0(真),反之则执行结果为1(假);if `命令表达式 &>/dev/null` 时是判断 命令表达式的执行结果是否为真(由于只看执行结果,此时加 &>/dev/null,否则 if 字符串 会报错) then # \ 表示换行符 useradd neo$n &>/dev/null && \ echo $passwd|passwd --stdin neo$n &>/dev/null && \ echo -e "neo$n\t$passwd" >>/tmp/user.list && \ action "neo$n added successfully" /bin/true else action "neo$n exists already" /bin/false fi done [root@m01 cases]# sh case0303.sh neo12 exists already [FAILED] neo13 exists already [FAILED] neo14 exists already [FAILED] neo15 exists already [FAILED] neo16 added successfully [ OK ] neo17 added successfully [ OK ] [root@m01 cases]#
案例4: 扫描网络内存活主机案例
写一个Shell脚本,判断 10.0.0.0/24 网络里,当前在线的IP有哪些
1) ping 命令 [root@m01 ~]# ping -c 2 -i 1 -w 3 10.0.0.61 PING 10.0.0.61 (10.0.0.61) 56(84) bytes of data. 64 bytes from 10.0.0.61: icmp_seq=1 ttl=64 time=0.079 ms 64 bytes from 10.0.0.61: icmp_seq=2 ttl=64 time=0.052 ms --- 10.0.0.61 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1005ms rtt min/avg/max/mdev = 0.052/0.065/0.079/0.015 ms ping 命令: -c ping 的次数 -i ping 时间间隔(s) -w ping 的总共的时长(s) 2) nmap命令 nmap -sP 10.0.0.0/24 # 方式一: ping [root@m01 cases]# cat case0401.sh #!/bin/bash ############################################################## # File Name: case0401.sh # Version: V1.0 # Author: neo # Organization: anonymous # Created Time : 2019-07-05 00:54:20 # Description: ############################################################## for n in {1..254} do { if `ping -c 1 -w 3 10.0.0.$n &>/dev/null` # ping 通为true then echo "10.0.0.$n is up" else echo "10.0.0.$n is down" fi } & # {} & 表示 {} 里面的代码并发执行;此处表示批量 ping done [root@m01 cases]# # 方式二: nmap [root@m01 ~]# nmap -sP 10.0.0.0/24 Starting Nmap 5.51 ( http://nmap.org ) at 2019-07-05 01:34 CST Nmap scan report for 10.0.0.61 Host is up. Nmap scan report for 10.0.0.253 Host is up (0.0032s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 10.0.0.254 Host is up (0.00081s latency). MAC Address: 00:50:56:EA:79:FB (VMware) Nmap done: 256 IP addresses (3 hosts up) scanned in 8.36 seconds [root@m01 ~]# nmap -sP 10.0.0.0/24|awk '/Nmap scan report for/{print $NF}' # $NF 表示的最后一个Field(列),即输出最后一个字段的内容 10.0.0.61 10.0.0.253 10.0.0.254 [root@m01 ~]#