前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux Shell经典案例

Linux Shell经典案例

作者头像
兜兜转转
发布2023-03-29 11:57:01
2.9K0
发布2023-03-29 11:57:01
举报
文章被收录于专栏:CodeTimeCodeTime

1.查空行

使用Linux命令查询file.txt中空行所在的行号 file1.txt数据准备

代码语言:javascript
复制
itheima itheima

itcast
123

itheima


代码语言:javascript
复制
awk '/^$/{print NR}' file1.txt

2.求一列的和

有文件file2.txt内容如下,使用Linux命令计算第二列的和并输出

代码语言:javascript
复制
张三 40
李四 50
王五 60


代码语言:javascript
复制
awk '{sum+=$2} END{print "求和: "sum}' file2.txt

3.检查文件是否存在

根据文件是否存在执行不同逻辑


代码语言:javascript
复制
if [ -e /root/file1.txt ]; then  echo "文件存在"; else echo "文件不存在"; fi

4.数字排序

用shell写一个脚本,对文本中无序的一列数字排序 file3.txt文件内容

代码语言:javascript
复制
9
8
7
6
5
4
3
2
10
1


代码语言:javascript
复制
sort -n file3.txt | awk '{sum+=$1; print $1} END{print "求和: "sum}'

5.搜索指定目录下文件内容

查找当前文件夹(/root)下所有的文本文件内容中包含有字符”123”的文件名称


代码语言:javascript
复制
grep -r "123" /root | cut -d ":" -f 1| sort -u

6.批量生成文件名

批量生产指定数目的文件,文件名采用”纳秒”命名


脚本代码file4.sh

代码语言:javascript
复制
#!/bin/bash
read -t 30 -p "请输入创建文件的数目:" n
test=$(echo $n | sed 's/[0-9]//g') #检测非数字输入
if [ -n "$n" -a -z "$test" ] #检测空输入
then
        for ((i=0;i<$n;i=i+1 ))
        do
                name=$(date +%N)
                [ ! -d ./temp ] &&  mkdir -p ./temp
                touch "./temp/$name"
                echo "创建 $name 成功!"
        done
        else
                echo "创建失败"
                exit 1
fi

7.批量改名

/root/temp目录下所有文件名重命名为”旧文件名-递增数字” 重命名命令

代码语言:javascript
复制
rename 旧文件名 新文件名 旧文件所在位置


脚本代码file5.sh

代码语言:javascript
复制
#!/bin/bash
filenames=$(ls /root/temp)
number=1
for name in $filenames
do
        printf "命令前:%s" ${name}
        newname=${name}"-"${number}
        rename $name ${newname} /root/temp/*
        let number++ #每个改名后的文件名后缀数字加1
        printf "重命名后:%s \n" ${newname}
done

8.批量创建用户

根据users.txt中提供的用户列表,一个名一行,批量添加用户到linux系统中 数据准备users.txt

代码语言:javascript
复制
user1
user2

添加用户命令

代码语言:javascript
复制
useradd 用户名

设置每个用户密码默认密码

代码语言:javascript
复制
echo "123456" | passwd --stdin 用户名


脚本代码file6.sh

代码语言:javascript
复制
#!/bin/bash
ULIST=$(cat /root/users.txt)  ##/root/users.txt  里面存放的是用户名,一个名一行
for UNAME in $ULIST
do
        useradd $UNAME
        echo "123456" | passwd --stdin $UNAME &>/dev/null
        [ $? -eq 0 ] && echo "$UNAME用户名与密码添加初始化成功!"
done

9.筛选单词

问题: 根据给出的数据输出里面单词长度大于3的单词 数据准备

代码语言:javascript
复制
I may not be able to change the past, but I can learn from it.


shell脚本file7.sh

代码语言:javascript
复制
echo "I may not be able to change the past, but I can learn from it." | awk -F "[ ,.]" '{for(i=1;i<NF;i++){ if(length($i)>3){print $i}}}'

10.单词及字母去重排序

  1. 按单词出现频率降序排序!
  2. 按字母出现频率降序排序!

file8.txt 文件内容

代码语言:javascript
复制
No. The Bible says Jesus had compassion2 on them for He saw them as sheep without a shepherd. They were like lost sheep, lost in their sin. How the Lord Jesus loved them! He knew they were helpless and needed a shepherd. And the Good Shepherd knew He had come to help them. But not just the people way back then. For the Lord Jesus knows all about you, and loves you too, and wants to help you.


按照单词出现频率降序

代码语言:javascript
复制
awk -F "[,. ]+" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}' file8.txt |sort -rn|head

按照字符出现频率降序前10个

代码语言:javascript
复制
awk -F "" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}' file8.txt |sort -rn|head

11.扫描网络内存活主机

扫描192.168.56.1到192.168.56.254之间ip的是否存活,并输出是否在线

服务器ip存活分析

代码语言:javascript
复制
ping ip地址 -c 2
# 如果ip地址存活发送2个数据包会至少接收返回1个数据包

效果如图


完整脚本代码

代码语言:javascript
复制
#!/bin/bash
count=0
for i  in 192.168.56.{1..254}
do
    # 使用ping命令发送2个包测试, 并获取返回接收到包的个数
    receive=$(ping $i -c 2|awk 'NR==6{print $4}')
    # 接收返回包大于0 说明主机在线
    if [ ${receive} -gt 0 ]
    then
        echo "${i} 在线"
        ((count+=1))
    else
        echo "${i} 不在线"
    fi

done
echo "在线服务器有:"$count"个"

12.MySQL分库备份

代码语言:javascript
复制
#!/bin/sh
user=root      #用户名
pass=root      #密码
backfile=/root/mysql/backup #备份路径
[ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
cmd="mysql -u$user -p$pass"  #登录数据库
dump="mysqldump -u$user -p$pass " #mysqldump备份参数
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #获取库名列表
echo "需要备份的数据列表:"
echo $dblist
echo "开始备份:"
for db_name in $dblist #for循环备份库列表
do
 printf '正在备份数据库:%s' ${db_name}
 $dump $db_name 2>/dev/null |gzip >${backfile}/${db_name}_$(date +%m%d).sql.gz #库名+时间备份打包至指定路径下
 printf ',备份完成\n'
done
echo "全部备份完成!!!"

运行效果

13.MySQL数据库分库分表备份

代码语言:javascript
复制
#!/bin/sh
user=root      #用户名
pass=root      #密码
backfile=/root/mysql/backup #备份路径
[ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
cmd="mysql -u$user -p$pass"  #登录数据库
dump="mysqldump -u$user -p$pass " #mysqldump备份参数
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #获取库名列表
echo "需要备份的数据列表:"
echo $dblist
echo "开始备份:"
for db_name in $dblist #for循环备份库列表
do
 printf '正在备份数据库:%s\n' ${db_name}
 tables=`mysql -u$user -p"$pass" -e "use $db_name;show tables;" 2>/dev/null|sed 1d`
 for j in $tables
  do
    printf '正在备份数据库 %s 表 %s ' ${db_name} ${j}
    $dump -B --databases $db_name --tables $j 2>/dev/null > ${backfile}/${db_name}-${j}-`date +%m%d`.sql
    printf ',备份完成\n'
  done


 printf '数据库 %s 备份完成\n' ${db_name}
done
echo "全部备份完成!!!"

运行效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.查空行
  • 2.求一列的和
  • 3.检查文件是否存在
  • 4.数字排序
  • 5.搜索指定目录下文件内容
  • 6.批量生成文件名
  • 7.批量改名
  • 8.批量创建用户
  • 9.筛选单词
  • 10.单词及字母去重排序
  • 11.扫描网络内存活主机
  • 12.MySQL分库备份
  • 13.MySQL数据库分库分表备份
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档