前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell常见的面试题

Shell常见的面试题

作者头像
乐心湖
发布2021-01-18 14:52:01
8110
发布2021-01-18 14:52:01
举报
文章被收录于专栏:MyTechnology

Shell基础入门

linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等?使用linux的内核操作计算机的硬件Shell介绍...

Shell计算命令

Shell计算命令:expr命令详解介绍expr (evaluate expressions 的缩写),译为“表达...

Shell流程控制

流程控制:if else语句if语法多行写法语法if 条件 then 命令 fi可以将if语句放入一行语...

Shell函数定义

Shell函数:系统函数函数介绍Shell编程和其他编程语言一样, 有函数, 函数是由若干条shell命令组成的...

Shell实用工具

Shell好用的工具: cut使用cut可以切割提取指定列字符字节的数据介绍cut 译为“剪切, 切割”,是一个...

Shell常见的面试题

面试题:查空行问题:使用Linux命令查询 file1.txt 中空行所在的行号file1.txt数据准备xn20...

面试题:查空行

问题:使用Linux命令查询 file1.txt 中空行所在的行号

file1.txt数据准备

代码语言:javascript
复制
xn2001 xn2001

xn2001
123

xn2001

答案:

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

运行效果

面试题:求一列的和

问题:有文件file2.txt内容如下:

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

使用Linux命令计算第二列的和并输出

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

运行效果

面试题:检查文件是否存在

问题:Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?

答:

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

运行效果

面试题:数字排序

问题:用shell写一个脚本,对文本中无序的一列数字排序

cat file3.txt文件内容

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

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

运行效果

面试题:搜索指定目录下文件内容

问题:请用shell脚本写出查找当前文件夹(/root)下所有的文本文件内容中包含有字符 “123”的文件名称?

答:

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

或者:

代码语言:javascript
复制
grep -r "123" /root | awk -F: '{print $1}'

运行效果

面试题:批量生成文件名

问题:批量生产指定数目的文件,文件名采用"纳秒"命名

答: 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

运行效果

面试题:批量改名

问题:将/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

运行效果

面试题:批量创建用户

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

已知users.txt数据准备

代码语言:javascript
复制
user1
user2

知识点分析1:添加用户命令

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

知识点分析2:设置每个用户密码默认密码

代码语言: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

运行效果

面试题:筛选单词

问题: 根据给出的数据输出里面单词长度大于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}}}'

运行效果

面试题:单词及字母去重排序

问题

代码语言:javascript
复制
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

运行效果

面试题:扫描网络内存活主机

问题: 扫描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"个"

运行效果

面试题: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 "全部备份完成!!!"

运行效果

面试题: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 "全部备份完成!!!"

运行效果


版权属于:乐心湖's Blog

本文链接:https://cloud.tencent.com/developer/article/1774926

声明:博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

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

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

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

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

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