Linux-shell的108个案例

通用函数库

# cat diy_func.sh
redecho() {
  #颜色开头部分
  echo -ne "\e[5;31m"
  #取出要加上颜色的内容
  echo -n "$@"
  #颜色的结束部分
  echo -e "\e[0m"
  #echo -e "\e[5;31m $@ \e[0m"
}
greenecho() {
  echo -ne "\e[1;32m"
  echo -n "$@"
  echo -e "\e[0m"
}
blueecho() {
  echo -ne "\e[1;34m"
  echo -n "$@"
  echo -e "\e[0m"
}
check_return_value() {
   if [ $? -eq 0 ]
   then
       greenecho $1 命令执行成功
   else
       redecho  $1 命令执行失败
   fi
} 
check_user() {
   echo 检查用户
}
check_num() {
   echo 检查数字
}

 

1.书写Hello world脚本并在用户登录的时候自动运行。

echo "hello world"

2.备份日志/var/log/下面所有到/backup/

#1.vars
time=`date +%F`
filename=log-${time}.tar.gz
#2.
tar zcf /backup/${filename} /var/log/

3.一键部署LNMP(RPM 包版本)

#1. vars 
#nginx,php,mariadb
rpmdir=/server/tools/lnmp/
#2. 
yum localinstall -y /server/tools/lnmp/*.rpm
#如果不是软件包yum方式
#配置ngx和phpyum源
yum install -y nginx 
yum install -y phpxxxxxxxx
yum install -y mariadb

4.安装LAMP环境(yum 版本)

yum install -y httpd
yum install -y phpxxxxxxxx
yum install -y mariadb

5.一键部署 redis

yum install -y redis

6.使用sshpass工具自动交互密码远程其他主机安装httpd软件

  . diy_func.sh
#1.检查sshpass是否安装
check_cmd() {
   cmd=$1
   rpm=$2
   which $cmd &>/dev/null || {
     redecho "$cmd 命令不存在"
     yum install -y $rpm   &> /dev/null
   }
}
#2. 连接并安装软件
ssh_cmd() {
    pass=1
   sshpass -p$pass ssh root@10.0.0.61 "yum install 
-y httpd"
   check_return_value sshpass
}
#3. main函数
main() {
 check_cmd sshpass sshpass
  #check_cmd ifconfig net-tools
 ssh_cmd
   
}
main
7. 查看有多少远程的 IP 在连接本机
#检查当前有多少人远程连接这个主机的22端口
ss -ant |grep -i ESTAB|awk '$4~/:22$/' |wc -l
#有多少ip连接本地的任意端口
ss -ant |grep -i ESTAB |wc -l 
ss -ant |grep -ic ESTAB

 8. 统计当前 Linux 系统中可以登录计算机的账户有多少个

#1.过滤/etc/passwd命令解释器是/bin/bash的用户
check_login_etc_passwd() {
   name_list=`grep '/bin/bash' /etc/passwd|awk -F: '{print $1}'`
}
#2.根据这个用户去/etc/shadow里面过滤,如果第2列是非*或!就可
以登录.
check_login_etc_shadow() {
   i=0
   for name in $name_list
   do
      login=`grep -w "${name}" /etc/shadow |awk -F: '{ if($2!~/[*!]/) print 0 ;else print 1 }'`
28      if [ $login -eq 0 ];then
29         greenecho "$name 用户可以登录"
30         let iՎҡ
31      fi
32   done
33   blueecho "可以远程登录系统的用户数量是:$i"
34 }
35
36 #3.main 
37 main() {
38 check_login_etc_passwd
39 check_login_etc_shadow
40 }
41
42 main
9、 统计/var/log 有多少个文件,并显示这些文件名
#1.find 所有层
find /var/log -type f |wc -l 
find /var/log -type f

 10、自动化部署 Tengine源码包软件

#1. 下载软件包
#2. 解压
#3. 安装依赖
#核心步骤:
#1. ./configure
./configure Վʔprefix=/app/tools/tengine-2.3.3/ Վʔ
add-module=负载均衡状态检查模块
#2. make -j `nproc`
#3. make install
11、编写 tengine 启动脚本
#函数使用建议,根据步骤创建函数.
. /etc/init.d/diy_func.sh
#1.vars 
choice=$1
debug=0
#2.定义函数
#2.0 加入检查类函数
#命令是否存在  
#配置文件是否存在
nginx_count=`ps -ef |grep nginx |grep -v grep |wc -
l`
[ $debug -eq 1 ] ՎҐ echo $nginx_count
#2.1 启动服务的函数
nginx_start() {
 [ $nginx_count -eq 0 ] ՎҐ\
   nginx 
#2.2 关闭服务的函数
nginx_stop() {
[ $debug -eq 1 ] ՎҐ echo $nginx_count
 [ $nginx_count -ne 0 ] ՎҐ {
     pkill nginx 
 }
}
#2.3 重启服务的函数
nginx_restart() {
   nginx_stop
   nginx_start
}
#2.4 服务的状态函数
nginx_status() {
  #判断服务是否运行
  Վˁ 如果运行则显示 nginx is running (pid)
  Վˁ 如果没有运行显示 nginx is gualed 
  #检查服务的进程数量
[ $debug -eq 1 ] ՎҐ echo $nginx_count
  if [ $nginx_count -eq 0 ]
  then
     redecho "nginx is gualed"  
  else
      nginx_pid=`ps -ef |grep nginx|grep -v grep 
|awk '{print $2}'`
     greenecho "nginx is running ${nginx_pid}"
  fi
}
#2.5 用户输入异常提示
error_msg() {
 redecho "Usage: $0 {start|stop|restart|status}"
}
#3. case语句引用函数 脚本的主要部分
main() {
 case "$choice" in
    start)   nginx_start Վʮ
    stop)   nginx_stop Վʮ
    restart) nginx_restart Վʮ
   status) nginx_statusՎʮ
     *)     error_msg 
  esac
}
main

12、自动对磁盘分区、格式化、挂载

. /etc/init.d/diy_func.sh
#1. 分区 (可以略过)
#2tb 以上 gpt
#2tb 以内 mbr(msdos)
#parted /dev/sdb mklabel gpt 
#parted /dev/sdb parted 0 100 ignore #单位mb
#2. 格式化
#mkfs.ext4 
mkfs.xfs /dev/sdb
check_return_value 格式化
#3. 挂载
[ -d /data/ ] Վҗ mkdir -p /data/
mount /dev/sdb   /data/
echo "/dev/sdb /data/ xfs defaults 0 0 
"ՎҴ/etc/fstab

13、切割 Tengine日志文件(防止单个文件过大,一般用于编译安装的ngx)

#方法01.logrotate 配置文件.参考nginx或系统.
日志切割的配置文件/etc/logrotate.d/
/var/log/nginx/*.log {
       daily
       missingok
       rotate 52
       compress
       delaycompress
       notifempty
       create 640 nginx adm
       sharedscripts
       postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat 
/var/run/nginx.pid`
                fi
       endscript
}
logrotate命令
#方法02.书写脚本.
mv 日志 日志-时间
重启服务,生成新的日志

14、检测 MySQL 数据库连接数量

(ss -ant与过滤3306)

15、根据 md5 校验码,检测文件是否被修改

#1. 系统命令(做1次,有更新的时候做1次.)
find /bin/ /sbin/ /root/bin/ -type f|xargs md5sum 
>/server/files/bin.md5 
#2. 检查md5的脚本
 md5sum -c Վʔquiet bin.md5

18、将文件中所有的小写字母转换为大写字母

#1.tr
[root@web03 ~]# echo {aՎʡz} |tr 'a-zA-Z' 'A-Za-z'
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@web03 ~]# echo {aՎʡz} {AՎʡZ} |tr 'a-zA-Z' 'AZa-z'
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z

20、删除某个目录下大小为 0 的文件

find /etc/ -type f -size 0   |xargs ls -lh
23、过滤出网卡的 MAC 地址
/proc/net/dev 网卡信息 + for循环获取.
24、找出/etc/passwd 中能登录的用户,并将对应在/etc/shadow 中第二列密码提出输出/
join -t: /etc/passwd /etc/shadow |awk -F: '{print $1,$8}'
26、统计 Linux 进程相关数量信息
top
#负载信息
#进程总数
#正在运行的进程
#后台挂起
#僵尸进程数量
#僵尸进程名字
#cpu使用率最高的1个进程
#内存使用率最高的1个进程
#拥有多线程的进程

29、查看所有虚拟机磁盘使用量以及CPU使用量信息

#1. 磁盘分区使用情况
. /etc/init.d/diy_func.sh
df -hT |egrep 'xfs'|while read line
do
  name=`echo "$line"|awk '{print $NF}'`\
  percent=`echo $line|awk -F'[ %]+' '{print $(NF-1)}' `
 greenecho "磁盘分区挂载点名字: $name ,使用率${percent}%"
done|column -t 

30、生成签名私钥和证书

#方法01.使用命令生成
#方法02.网站生成
https:Վˌletsencrypt.org/

shell编程判断与运算

 32、判断文件或目录是否存在

-e 
或分开写
-f 文件
-d 目录
-h 软连接

33、根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动(早中晚)

#1规定
#早上:6-10
#中午:11-14
#下午:15-18
#晚上:19-23
#半夜+凌晨: 0-5
#2.date 
#3.判断

34、通过位置变量创建 Linux 系统账户及密码

#1.vars
user=$1
pass=$2
#判断 是否为root
#判断 参数个数2 
#2.user
#2.1 检查用户是否存在
#2.2 不存在则创建
#3.pass
echo "$pass" |passwd Վʔstdin $user
#密码带特殊符号
sh passwd.sh oldboy  'oldboy!$xxx'

36、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(2种方法字符串对比和uid

对比)
#ʽ `whoami` Վʱ "root" ] 
[ $UID -ne 0 ] && {
   echo no root user 
   exit 1
}
37、编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;
如果用户不输入密码,则统一使用默认的 123456 作为默认密码。
#1.vars
read -p "input user name:" user
read -p "input password:" pass
#判断 是否为root
#判断 user内容是否为空
[ -z "$user" ] ՎҐ {
   echo "请输入用户名"
   exit 1
}
#判断 用户是否写密码
Վʽ -z "$pass" ] ՎҐ {
#   pass=123456
#}
#2.user
#2.1 检查用户是否存在
#2.2 不存在则创建
if id $user &>/dev/null ;then
   echo "用户$user已经存在,不创建"
else
   echo "用户$user不存在,创建中"
   useradd  $user
fi
#3.pass
echo "${pass:-123456}" |passwd Վʔstdin $user
#密码带特殊符号
sh passwd.sh oldboy  'oldboy!$xxx'

38、输入三个数并进行升序排序(多种方法实现:判断和sort)

#方法01 if判断                 111 20   99
read -p "请输入3数字空格分割:" num1 num2 num3 
#num1 存放最大的数字
#num2 中间
#num3 最小
#对比num1 num2 
#对比num2 num3 
#对比num1 num3
#num1 存放最大的数字
#num2 中间
#num3 最小
#方法02 
echo $num1 $num2 $num3 |xargs -n1 |sort -rn |xargs

39、统计 13:30 到 14:30 所有访问 Nginx服务器的请求有多少个(根据日志内容调整,群文件access.zip)

awk '/2023:13:30/,/2023:14:30/' access.log |wc -l

42、非交互自动生成 SSH 密钥文件脚本

#1.vars
. /etc/init.d/xxx
#1.4 判断是否联网或是否可以使用yum
#1.5 加入判断sshpass命令是否存在,如果不存在则安装
if_rm_key() {
   read -p "是否删除密钥重新创建" rm
   case "$rm" in
      yes|y|Yes|Y) rm -f ~/.ssh/id_rsa Վʮ
     no|n|No|N)  exit 0 Վʮ
             *) echo "请输入yes/y no/n"
   esac
}
gen_ssh_key() {
   ssh-keygen -t rsa  -f ~/.ssh/id_rsa   -P '' 
&>/dev/null
   if [ $? -eq 0 ];then
       action "密钥创建成功" /bin/true
   else
       action "密钥创建失败" /bin/false
   fi
}
#2.创建秘钥对
check_key_cun() {
    if [ -f ~/.ssh/id_rsa ] ;then
       echo "已经创建过秘钥对"
       if_rm_key
    else
       echo "正在创建秘钥对...."
       gen_ssh_key
    fi
}
#3. 
check_key_cun

43、检查特定的软件包是否已经安装脚本

#rpm
#dpkg 
#yum vs apt

 44、监控 HTTP 服务器的状态(测试返回码)脚本

#1.vars 
url=$1
#2. 检查输入是否为url地址
check_url() {
[[ $url =~ ^[0-9a-zA-Z./:]+$ ]] Վҗ {
   echo "请输入有效的url地址"
   exit 1 }
}
#3. 检查
url_status() {
status_code=`curl -s -I $url |awk 'NRՎҧ1{print 
$2}'`
[ -z "$status_code" ] ՎҐ {
  echo "$url is failed"
  exit 2
}
if [ $status_code -lt 400 ];then
    echo "$url is ok"
else
    echo "$url is failed"
fi
}
#4. main函数
main() {
 check_url
 url_status
}
main
#curl -s www.baidu.com -w "%{http_code}\n" -o 
/dev/null

47、提示用户输入年份后判断该年是否为闰年

年%4 -eq 0

48、测试用户名与密码是否正确

远程登录测试
sshpass -p密码 ssh -p22 root@ip whoami
  #john linux破解shadow文件

49、批量下载有序文件(pdf、图片、视频、html页面等等)

wget www.baidu.com/lidao{01Վʡ100}.avi

51、自动配置 rsynd 服务器的配置文件 rsyncd.conf

cat<<EOF
配置文件+变量
EOF

52、自动修改计划任务(定时任务)配置文件

#/var/spool/cron/root

53、判断用户输入的数据类型(字母、数字或其他)

本质就是判断用户输入的内容是否符合正则.
#1.输入
str
#2. 
[[ $str =~ ^[0-9]+$ ]]
[[ $str =~ ^[a-zA-Z]+$ ]]
剩下就是其他类型

55、Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本

运行脚本的时候输出
1. web01
2. web02
3 web03
用户输入ctrl +c 无法取消这个脚本,如何实现? trap

shell编程循环

56、点名器脚本(随机抽取一名学员)
#1. 用户名的文件 1行就是1个名字
file=name.txt 
#2.
line_cnt=`cat $file|wc -l`
rand_num=$((RANDOM%line_cnt+1))  #rand_num=5
#3. 根据取出随机数,输出对应的行的内容.
sed -n " ${rand_num}p" $file
57、自动为其他脚本添加解释器信息
find + sed '1i Վʿ/bin/bash'

61、破解虚拟机密码,无密码登陆虚拟机系统

单用户模式/救援模式,vim /etc/passwd root密码的x去掉

63、编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本,while,多进程并发版本 3种)

#1.for循环
ip_cidr=10.0.0
#10.0.0.1-10.0.0.254
for ip in $ip_cidr.{1Վʡ254}
do
    ping -c1 -W 1  $ip &>/dev/null 
   [ $? -eq 0 ] ՎҐ {
       echo "$ip is ok"
   }
done
#2.while
i=1
while [ $i -le 254 ]
do
    ping -c1 -W 1  $ip &>/dev/null 
   [ $? -eq 0 ] ՎҐ {
       echo "$ip is ok"
   }
   let iՎҡ
done
#3.高并发
. /etc/init.d/diy_func.sh
check_ip() {
ping -c1 -W 1  $ip &>/dev/null 
     [ $? -eq 0 ] ՎҐ {
       echo "$ip is ok"
     }
usleep 500
}
for ip in 10.0.0.{1Վʡ254}
do
   check_ip &
done
#4.命令 nmap 
nmap -sn 10.0.0.0/24

67、使用死循环实时显示 eth0 网卡发送的数据包流量

/proc/net/dev
iftop
ifconfig

68、使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码本脚本执行,需要提前准备一个 user.txt 文件,该

文件中包含有若干用户名信息
file=user.txt
while read user pass
do
   useradd $user
    echo $pass |passwd Վʔstdin $user
done <$file
69、编写批量修改扩展名脚本
#方法01 rename 
#方法02 mv+for

 73、循环关闭局域网中所有主机

#方法01
sshpass +ssh +for+shutdown 
#方法02
ansible

74、使用 shell 脚本打印图形:等腰三角形,正方形,梯形。

for+for循环 外层循环控制行,内层循环控制列

shell编程数组

78、书写shell编程脚本-统计当前系统的磁盘空间使用情况(注不知道目前磁盘有多少分区及名字)
思路取出/etc/fstab 
思路df

79、读取用户输入的账户名称,将账户名写入到数组保存

变量追加问题
[root@m01 ~]# oldboy=lidao
[root@m01 ~]# 
[root@m01 ~]# oldboy="$oldboy 996"
[root@m01 ~]# 
[root@m01 ~]# echo $oldboy
lidao 996
[root@m01 ~]# oldboy="$oldboy 007"
[root@m01 ~]# 
[root@m01 ~]# echo $oldboy
lidao 996 007
数组追加
[root@m01 ~]# array=(lidao)
[root@m01 ~]# 
[root@m01 ~]# 
[root@m01 ~]# array=(${array[@]} oldboy)
[root@m01 ~]# echo ${array[@]}
lidao oldboy
[root@m01 ~]# 
[root@m01 ~]# 
[root@m01 ~]# array=(${array[@]} lidao996 )
[root@m01 ~]# echo ${array[@]}
lidao oldboy lidao996
[root@m01 ~]#

综合类项目案例

82、 企业Shell面试题1:批量生成随机字符文件名案例
使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下
**[root@oldgirl C19]# ls /oldboy**
**apquvdpqbk_oldboy.html mpyogpsmwj_oldboy.html 
txynzwofgg_oldboy.html**
**bmqiwhfpgv_oldboy.html mtrzobsprf_oldboy.html 
vjxmlflawa_oldboy.html**
**jhjdcjnjxc_oldboy.html qeztkkmewn_oldboy.html**
**jpvirsnjld_oldboy.html ruscyxwxai_oldboy.html**
**方法1 : date +%N|md5sum** 
**方法2: echo $RANDOM|md5sum**
**方法3: tr -cd 'a-z' < /dev/urandom|head -c10**
**方法4: uuidgen**
**方法5: openssl rand -base64 10**
生成随机数字 范围0-55 
**echo $((RANDOM%56))**
[root@m01 ~]# vim /server/scripts/rand_file.sh
[root@m01 ~]# cat /server/scripts/rand_file.sh
\Վʿ/bin/bash
\###################################################
###########
\# File Name: /server/scripts/rand_file.sh
\# Version: V1.0
\# Author: oldboy
\# Organization: www.oldboyedu.com
\###################################################
###########
for n in {1Վʡ10}
do
  rand=`tr -cd 'a-z' ՎӚdev/urandom |head -c10`
  touch /oldboy/${rand}_oldboy.html
done
[root@m01 ~]# sh /server/scripts/rand_file.sh
[root@m01 ~]# ll /oldboy/
total 0
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
bipcxfdkyr_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
crpfmcwgrs_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
dvranswjmo_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
ihfdhekyuc_oldboy.html
drwxr-xr-x 3 root root 15 Feb 22 11:12 lidao
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
lqatatmtpl_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
mtjfurrptm_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
sejrehebrn_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
wnnhtasjav_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 8 09:17 
xqgjapyibm_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
xyjqthcpyn_oldboy.html
-rw-rՎʔrՎʔ 1 root root 0 Feb 23 20:22 
znthikjvbx_oldboy.html

 83、 企业Shell面试题2:批量改名特殊案例

将以上面试题19.1.1中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写。
方法1:for
for name in `ls /oldboyՎˇ_oldboy.html`
do
  mv $name  ${name/oldboy.html/oldgirl.HTML} #变量子
串
done
\#可选方法: echo $name |sed 'sՎՎ˂g'
\#可选方法: mv $name ${name%_*}_oldgirl.HTML
\#方法2:rename
rename _oldboy.html _oldgirl.HTML *_oldboy.html
\#方法3:命令拼接
[root@m01 oldboy]# ls *_oldboy.html |sed -r 
's#^(.*)(_.*)$#mv &#g'
...

84、 企业Shell面试题3:批量创建特殊要求用户案例

批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)。
不用for循环的实现思路:http:Վˌuser.qzone.qq.com/49000448/blog/1422183723
for name in oldboy{01Վʡ10}
do
  rand=`tr -cd 'a-zA-Z0-9' ՎӚdev/urandom |head -c10`
useradd $name
echo $rand|passwd Վʔstdin $name
echo $name $rand ՎҴ/root/pass.txt
done

85.写一个Shell脚本解决DOS攻击生产案例。

请根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100(读者根据实际情况设定),即调用防火墙命令封掉对应
的IP。防火墙命令为:iptables-I INPUT -s IP地址 -j DROP。
netstat_log=/server/files/netstat.log
tmp_file=/server/files/iptables.tmp
awk -F'[ :]+' '/^tcp/{print $4}' ${netstat_log} 
|sort |uniq -c|sort -rn >${tmp_file}
while read line
do
   count=${line% *}
   ip=${line#* }
   if [ $count -ge 100 -a `iptables -nL |grep -wc 
"${ip}"` -eq 0 ];then
•     iptables -I INPUT -s $ip -j DROP
   fi
doneՎӆ{tmp_file}

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

\#方法1:shell while
\#ʿ/bin/bash
echo 'I am oldboy teacher welcome to oldboy 
training class.'|sed 'sՎʽ .Վʠ\n#g'|while read line
do
if [ ${#line} -lt 6 ];then
echo $line
fi
done
\#方法2:awk
[root@m01 oldboy]# echo I am oldboy teacher welcome to oldboy training class.|sed 'sՎʽ .Վʠ\n#g'
[root@m01 oldboy]# echo I am oldboy teacher welcome to oldboy training class.|sed 'sՎʽ .Վʠ\n#g'|awk 'length()<6'
[root@m01 oldboy]# echo I am oldboy teacher welcome to oldboy training class.|egrep -o '[a-Z]+'
[root@m01 oldboy]# echo I am oldboy teacher welcome to oldboy training class.|egrep -o '[a-Z]+'|awk 'length()<6'
[root@m01 oldboy]# echo I am oldboy teacher welcome to oldboy training class.|awk -vRS='[ .]' 'length()<6'
[root@m01 oldboy]# echo I am oldboy teacher welcome to oldboy training class.|awk -F '[ .]' '{for(i=1;i<=NF;iՎҡ)if(length($i)<6)print $i}'
[root@m01 oldboy]# echo I am oldboy teacher welcome to oldboy training class.|awk -F '[ .]' '{
95. 企业Shell面试题14:开发脚本入侵检测与报警案例
排除缓存文件或临时文件,需要与开发沟通.
#1. 站点目录某个文件被修改. md5sum + 定时任务对比
#2. 站点目录下面多个文件是否能发现. 对比文件数量(之前的数量保
存到文件与当前对比.)

 96. 企业Shell面试题15:开发Rsync服务启动脚本案例

rsync Վʔdaemon  
pkill rsync

98. 企业Shell面试题17:天津项目学生实践抓阄案例

基于随机点名程序改改.
避免重复.创建临时文件,取出个删除1行.

101. 企业Shell面试题20:单词及字母去重排序案例

用shell处理以下内容
1、按单词出现频率降序排序!
2、按字母出现频率降序排序!
root@oldboy-ecs ~]# egrep -o '[a-z]+' 
oldboy.txt|sort |uniq -c|sort -rn
[root@oldboy-ecs ~]# egrep -o '[a-z]' 
oldboy.txt|sort |uniq -c|sort -rn
[root@oldboy-ecs ~]# awk -F"[ ,.]" 
'{for(i=1;iՎӋNF;iՎҡ)array[$i]Վҡ}END{for(n in 
array)print n,array[n]}' oldboy.txt |sort -rnk2
[root@oldboy-ecs ~]# awk -F "" '{for(i=1;iՎӋNF;iՎҡ) 
if($i~/[a-z]/)array[$i]Վҡ}END{for(n in array)print 
n,array[n]}' oldboy.txt |sort -rnk2
awk -F "" '{
for(i=1;i<=NF;iՎҡ)
  if($i~/[a-z]/)
•   array[$i]Վҡ
}
END{
for(n in array)
 print n,array[n]
}' oldboy.txt |sort -rnk2

 

..

posted @ 2024-06-02 19:39  嘉禾世兴  阅读(3)  评论(0编辑  收藏  举报