36.第六章 Shell脚本编程高级进阶(一)
2021/11/7 7:15:41
本文主要是介绍36.第六章 Shell脚本编程高级进阶(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
4.2.4 while 循环
格式:
while COMMANDS; do COMMANDS; done while CONDITION; do 循环体 done
说明:
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环,因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
无限循环
while true; do 循环体 done
范例:
[root@rocky8 bin]# type while while is a shell keyword [root@rocky8 bin]# help while while: while COMMANDS; do COMMANDS; done Execute commands as long as a test succeeds. Expand and execute COMMANDS as long as the final command in the `while' COMMANDS has an exit status of zero. Exit Status: Returns the status of the last command executed.
范例:
[root@rocky8 bin]# help : :: : Null command. No effect; the command does nothing. Exit Status: Always succeeds. [root@rocky8 bin]# type true true is a shell builtin [root@rocky8 bin]# help true true: true Return a successful result. Exit Status: Always succeeds. #: 和 true 是一样的
范例:
[root@rocky8 ~]# vim while.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-21 #FileName: while.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* i=1 sum=0 while [ $i -le 100 ];do let sum+=i let i++ done echo $sum [root@rocky8 ~]# bash while.sh 5050
范例:
[root@rocky8 bin]# vim while_check_disk.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-10 #FileName: while_check_disk.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* WARNING=80 while :;do USE=`df|sed -rn '/^\/dev\/sd/s#.* ([0-9]+)%.*#\1#p' |sort -nr |head -1` if [ $USE -gt $WARNING ];then echo Disk will be full from `hostname -I` | mail -s "disk warning" 88563128@qq.com fi sleep 10 done [root@rocky8 bin]# bash while_check_disk.sh [root@rocky8 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 374M 0 374M 0% /dev tmpfs 392M 0 392M 0% /dev/shm tmpfs 392M 5.6M 386M 2% /run tmpfs 392M 0 392M 0% /sys/fs/cgroup /dev/sda2 100G 2.3G 98G 3% / /dev/sda3 50G 392M 50G 1% /data /dev/sda1 1014M 188M 827M 19% /boot tmpfs 79M 0 79M 0% /run/user/0 [root@rocky8 ~]# dd if=/dev/zero of=/boot/f1.img bs=1M count=800 800+0 records in 800+0 records out 838860800 bytes (839 MB, 800 MiB) copied, 1.42045 s, 591 MB/s [root@rocky8 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 374M 0 374M 0% /dev tmpfs 392M 0 392M 0% /dev/shm tmpfs 392M 5.6M 386M 2% /run tmpfs 392M 0 392M 0% /sys/fs/cgroup /dev/sda2 100G 2.3G 98G 3% / /dev/sda3 50G 392M 50G 1% /data /dev/sda1 1014M 988M 27M 98% /boot tmpfs 79M 0 79M 0% /run/user/0 #磁盘空间大于80%,邮箱会收到邮件 [root@rocky8 ~]# rm -f /boot/f1.img [root@rocky8 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 374M 0 374M 0% /dev tmpfs 392M 0 392M 0% /dev/shm tmpfs 392M 5.6M 386M 2% /run tmpfs 392M 0 392M 0% /sys/fs/cgroup /dev/sda2 100G 2.3G 98G 3% / /dev/sda3 50G 392M 50G 1% /data /dev/sda1 1014M 188M 827M 19% /boot tmpfs 79M 0 79M 0% /run/user/0
范例: 九九乘法表
[root@rocky8 ~]# vim while_99.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-10 #FileName: while_99.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* i=1 while [ $i -le 9 ];do j=1 while [ $j -le $i ];do echo -e "${j}x${i}=$[j*i]\t\c" let j++ done echo let i++ done [root@rocky8 ~]# bash while_99.sh 1x1=1 1x2=2 2x2=4 1x3=3 2x3=6 3x3=9 1x4=4 2x4=8 3x4=12 4x4=16 1x5=5 2x5=10 3x5=15 4x5=20 5x5=25 1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
4.2.5 练习:用while实现
1、编写脚本,求100以内所有正奇数之和
2、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态,并统计在线和离线主机各多少
3、编写脚本,打印九九乘法表
4、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大值和最小值
5、编写脚本,实现打印国际象棋棋盘
6、后续六个字符串:efbaf275cd、4be9c40b8b、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机执行命令: echo $RANDOM|md5sum|cut -c1-10 后的结果,请破解这些字符串对应的RANDOM值
4.2.6 until 循环
格式:
until COMMANDS; do COMMANDS; done until CONDITION; do 循环体 done
说明:
进入条件: CONDITION 为false
退出条件: CONDITION 为true
无限循环
until false; do 循环体 Done
范例:
[root@rocky8 ~]# type until until is a shell keyword [root@rocky8 ~]# help until until: until COMMANDS; do COMMANDS; done Execute commands as long as a test does not succeed. Expand and execute COMMANDS as long as the final command in the `until' COMMANDS has an exit status which is not zero. Exit Status: Returns the status of the last command executed. [root@rocky8 ~]# type false false is a shell builtin [root@rocky8 ~]# help false false: false Return an unsuccessful result. Exit Status: Always fails.
范例:
[root@rocky8 ~]# useradd admin; echo 123456 |passwd --stdin admin Changing password for user admin. passwd: all authentication tokens updated successfully. [root@centos7 ~]# ssh admin@172.31.1.8 The authenticity of host '172.31.1.8 (172.31.1.8)' can't be established. ECDSA key fingerprint is SHA256:bSzdLQOWD7YlTznUn4y0YXH3WN9c11zb/0wqZRE/aHU. ECDSA key fingerprint is MD5:9b:4f:8b:8e:de:63:fa:7b:7c:b2:a5:f7:da:0b:ed:9f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.31.1.8' (ECDSA) to the list of known hosts. admin@172.31.1.8's password: [admin@rocky8 ~]$ [root@rocky8 bin]# who |grep -q "^admin\>" [root@rocky8 bin]# echo $? 0 [admin@rocky8 ~]$ exit logout Connection to 172.31.1.8 closed. [root@centos7 ~]# [root@rocky8 bin]# who |grep -q "^admin\>" [root@rocky8 bin]# echo $? 1
范例:
[root@rocky8 bin]# vim until_hacker.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-10 #FileName: until_hacker.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* until who |grep -q "^admin\>" ;do sleep 10 done echo hacker login at `date +"%F %T"` |mail -s warning 88563128@qq.com [root@rocky8 bin]# bash until_hacker.sh [root@centos7 ~]# ssh admin@172.31.1.8 admin@172.31.1.8's password: Last login: Sun Oct 10 16:29:37 2021 from 172.31.0.7 [admin@rocky8 ~]$ #登录就发邮件 [root@rocky8 bin]# vim until_hacker2.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-10 #FileName: until_hacker2.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* until false ;do who |grep -q "^admin\>" && echo hacker login at `date +"%F %T"` |mail -s warning 88563128@qq.com sleep 10 done [root@rocky8 bin]# bash until_hacker2.sh [root@centos7 ~]# ssh admin@172.31.1.8 admin@172.31.1.8's password: Last login: Sun Oct 10 16:33:05 2021 from 172.31.0.7 [admin@rocky8 ~]$ [admin@rocky8 ~]$ exit logout Connection to 172.31.1.8 closed. #只要发现登录就一直发邮件
4.2.7 循环控制语句 continue
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
while CONDITION1; do CMD1 ... if CONDITION2; then continue fi CMDn ... done
范例:
[root@rocky8 ~]# vim continue_for.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: continue_for.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* for ((i=0;i<10;i++));do [ $i -eq 5 ] && continue echo $i echo ------------------------ done [root@rocky8 ~]# bash continue_for.sh 0 ------------------------ 1 ------------------------ 2 ------------------------ 3 ------------------------ 4 ------------------------ 6 ------------------------ 7 ------------------------ 8 ------------------------ 9 ------------------------ # continue 结束本层循环 [root@rocky8 ~]# vim continue_for2.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: continue_for.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* for ((i=0;i<10;i++));do for ((j=0;j<10;j++));do #[ $j -eq 5 ] && continue 2 echo j=$j done echo ------------------------ done [root@rocky8 ~]# bash continue_for2.sh j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ j=0 j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 ------------------------ [root@rocky8 ~]# vim continue_for2.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: continue_for.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* for ((i=0;i<10;i++));do for ((j=0;j<10;j++));do [ $j -eq 5 ] && continue 2 echo j=$j done echo ------------------------ done [root@rocky8 ~]# bash continue_for2.sh j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 j=0 j=1 j=2 j=3 j=4 #continue 2 结束上一层循环
4.2.8 循环控制语句 break
break [N]:提前结束第N层整个循环,最内层为第1层
范例:
[root@rocky8 ~]# vim break_for.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: continue_for.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* for ((i=0;i<10;i++));do for ((j=0;j<10;j++));do [ $j -eq 5 ] && break echo j=$j done echo ------------------------ done [root@rocky8 ~]# bash break_for.sh j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ j=0 j=1 j=2 j=3 j=4 ------------------------ #break 退出本层循环 [root@rocky8 ~]# vim break_for.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: continue_for.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* for ((i=0;i<10;i++));do for ((j=0;j<10;j++));do [ $j -eq 5 ] && break 2 echo j=$j done echo ------------------------ done [root@rocky8 ~]# bash break_for.sh j=0 j=1 j=2 j=3 j=4 #break 2 退出上一层循环
范例:
[root@rocky8 ~]# vim menu.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: menu.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* sum=0 COLOR='echo -e \033[1;31m' COLOR2='echo -e \033[1;32m' END="\033[0m" while true;do echo -e "\033[33;1m\c" cat <<-EOF 1) 鲍鱼 2) 满汉全席 3) 龙虾 4) 燕窝 5) 帝王蟹 6) 退出 EOF echo -e "\033[0m" read -p "请点菜(1-6): " MENU case $MENU in 1|4) $COLOR'菜价: $10'$END let sum+=10 ;; 3|5) $COLOR'菜价: $20'$END let sum+=20 ;; 2) $COLOR'菜价: $1000'$END let sum+=1000 ;; 6) $COLOR2"你点的菜总价格是:\$$sum"$END break ;; *) echo "点错了,没有这道菜" ;; esac $COLOR2"你点的菜总价格是:\$$sum"$END done [root@rocky8 ~]# bash menu.sh 1) 鲍鱼 2) 满汉全席 3) 龙虾 4) 燕窝 5) 帝王蟹 6) 退出 请点菜(1-6): 1 菜价: $10 你点的菜总价格是:$10 1) 鲍鱼 2) 满汉全席 3) 龙虾 4) 燕窝 5) 帝王蟹 6) 退出 请点菜(1-6): 5 菜价: $20 你点的菜总价格是:$30 1) 鲍鱼 2) 满汉全席 3) 龙虾 4) 燕窝 5) 帝王蟹 6) 退出 请点菜(1-6): 6 你点的菜总价格是:$30
范例:
[root@rocky8 ~]# vim guess.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: guess.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* NUM=$[RANDOM%10] while read -p "输入 0-9 之间的数字: " INPUT ;do if [ $INPUT -eq $NUM ];then echo "恭喜你猜对了!" break elif [ $INPUT -gt $NUM ];then echo "数字太大了,重新猜!" else echo "数字太小了,重新猜!" fi done [root@rocky8 ~]# bash guess.sh 输入 0-9 之间的数字: 8 数字太大了,重新猜! 输入 0-9 之间的数字: 7 数字太大了,重新猜! 输入 0-9 之间的数字: 5 恭喜你猜对了!
4.2.9 循环控制 shift 命令
shift [n] 用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍历位置参量列表时,常用到 shift
范例:
[root@rocky8 ~]# vim createuser.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: createuser.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* while true;do [ -z "$1" ] && break useradd $1 && echo $1 is created shift done [root@rocky8 ~]# bash createuser.sh a b c d e f a is created b is created c is created d is created e is created f is created [root@rocky8 ~]# vim for_createuser.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: for_createuser.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* for i in $*;do useradd $i && echo $i is created done [root@rocky8 ~]# bash for_createuser.sh user{1..5} user1 is created user2 is created user3 is created user4 is created user5 is created [root@rocky8 ~]# vim createuser2.sh [root@rocky8 ~]# cat createuser2.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: createuser2.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* while [ $1 ];do useradd $1 && echo $1 is created shift done [root@rocky8 ~]# bash createuser2.sh user{6..10} user6 is created user7 is created user8 is created user9 is created user10 is created [root@rocky8 ~]# vim createuser3.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: createuser3.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* if [ $# -eq 0 ];then echo "Usage: `basename $0` user1 user2 ..." exit fi while [ "$1" ];do if id $1 &> /dev/null;then echo $1 is exist else useradd $1 echo "$1 is created" fi shift done echo "All user is created" [root@rocky8 ~]# bash createuser3.sh Usage: createuser3.sh user1 user2 ... [root@rocky8 ~]# bash createuser3.sh tom jack bob user{1..5} tom is created jack is created bob is created user1 is exist user2 is exist user3 is exist user4 is exist user5 is exist All user is created
4.2.10 练习
1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并退出脚本
2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出
3、用文件名做为参数,统计所有参数文件的总行数
4、用二个以上的数字为参数,显示其中的最大值和最小值
4.2.11 while read 特殊用法
while 循环的特殊用法,遍历文件或文本的每一行
格式:
while read line; do 循环体 done < /PATH/FROM/SOMEFILE
说明:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
范例:
[root@rocky8 ~]# read a 1 [root@rocky8 ~]# echo $a 1 [root@rocky8 ~]# while read name;do echo $name done zhang zhang wang wang li li ^C [root@rocky8 ~]# while read name age ;do echo name=$name;echo age=$age ; done zhang 18 name=zhang age=18 wang 20 name=wang age=20 ^C [root@rocky8 ~]# echo raymond | read X ; echo $X [root@rocky8 ~]# echo raymond | while read X ; do echo $X;done raymond [root@rocky8 ~]# echo raymond | { read X ; echo $X; } raymond [root@rocky8 ~]# echo raymond | ( read X ; echo $X ) raymond [root@rocky8 ~]# echo zhang wang li | ( read X Y Z; echo $X $Y $Z ) zhang wang li [root@rocky8 ~]# echo zhang wang li | while read X Y Z; do echo $X $Y $Z;done zhang wang li [root@rocky8 ~]# vim user.txt zhang 123456 wang 555555 li 666666 [root@rocky8 ~]# while read name password ; do useradd $name && echo $name is created; echo $password| passwd --stdin $name &> /dev/null;done < user.txt zhang is created wang is created li is created
范例:
[root@rocky8 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 382688 0 382688 0% /dev tmpfs 400580 0 400580 0% /dev/shm tmpfs 400580 5688 394892 2% /run tmpfs 400580 0 400580 0% /sys/fs/cgroup /dev/sda2 104806400 2287884 102518516 3% / /dev/sda3 52403200 1446976 50956224 3% /data /dev/sda1 1038336 191796 846540 19% /boot tmpfs 80116 0 80116 0% /run/user/0 [root@rocky8 ~]# df|sed -rn '/^\/dev\/sd/s#^([^ ]+).* ([0-9]+)%.*#\1 \2#p' /dev/sda2 3 /dev/sda3 3 /dev/sda1 19 [root@rocky8 ~]# vim disk_check.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: disk_check.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* WARNING=80 df|sed -rn '/^\/dev\/sd/s#^([^ ]+).* ([0-9]+)%.*#\1 \2#p' |while read part use ;do [ $use -ge $WARNING ] && echo "$part will be full,use:$use" |mail -s "disk warning" 88563128@qq.com done [root@rocky8 ~]# cp /dev/zero /boot/f1.img cp: error writing '/boot/f1.img': No space left on device [root@rocky8 ~]# bash disk_check.sh
范例:
[root@rocky8 ~]# vim while_read_check_ddos.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: while_read_check_ddos.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* lastb | sed -rn '/ssh:/s@.* ([0-9.]{1,3}{3}[0-9]{1,3}) .*@\1@p'|sort |uniq -c |while read count ip ;do if [ $count -gt 3 ];then iptables -A INPUT -s $ip -j REJECT fi done
范例:查看/sbin/nologin的shell类型的用户名和UID
[root@rocky8 ~]# vim while_read_passwd.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-20 #FileName: while_read_passwd.sh #URL: raymond.blog.csdn.net #Description: The test script #Copyright (C): 2021 All rights reserved #********************************************************************************************* while read line ;do if [[ "$line" =~ /sbin/nologin$ ]] ;then echo $line | cut -d: -f1,3 fi done < /etc/passwd [root@rocky8 ~]# bash while_read_passwd.sh bin:1 daemon:2 adm:3 lp:4 mail:8 operator:11 games:12 ftp:14 nobody:65534 dbus:81 systemd-coredump:999 systemd-resolve:193 tss:59 polkitd:998 unbound:997 sssd:996 sshd:74
这篇关于36.第六章 Shell脚本编程高级进阶(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南