【shell脚本】常见的shell脚本面试题目

1、请用shell脚本for,while,until这三种方式写出输出1到100的所有偶数的方法。

sum=0;for((i=0;i<=100;i+=2));do let sum+=i;done;echo $sum
sum=0;i=0;while [ $i -le 100 ];do let sum+=i;let i+=2;done;echo $sum
sum=0;i=0;until [ $i -gt 100 ];do let sum+=i;let i+=2;done;echo $sum#!/bin/bash
sum=0
for((i=0;i<=100;i+=2))
do 
let sum+=i
done
echo $sum#!/bin/bash
sum=0
i=0
while [ $i -le 100 ]
do
let sum+=i
let i+=2
done
echo $sum#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
do
let sum+=i
let i+=2
done
echo $sum

2、假设变量i=20 * 5,请用shell脚本格式写出4种方法输出 i 的值。

i=$[20*5]
i=$(expr 20 * 5)
i=`expr 20 * 5`
i=$((20*5))
let i=20*5   ##这个注意,是let在前面!!!
i=`echo 20*5|bc`

3、请通过在命令行中执行./output 20 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果,用2种方法返回结果。

##第一种
[root@localhost data]#vim output 
#!/bin/bash
sum(){
local a=$1
local b=$2
echo $((${a}+${b}))
}
sum $1 $2[root@localhost data]#chmod +x output 
[root@localhost data]./output 20 30##第二种
[root@localhost data]#vim output 
#!/bin/bash
sum(){
echo $[${1}+${2}]
}
sum $1 $2
[root@localhost data]#chmod +x output 
[root@localhost data]./output 20 30

4先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,再用递归函数输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

[root@localhost xh]#vim path.sh 
#!/bin/bash
digui(){
for j in `ls $1`
doif [ -d "$1/$j"  ]thenecho "$1/$j是目录"digui "$1/$j"          ##这里是递归调用自己elif [ ! -x "$1/$j" ]thenecho "$1/$j没有执行权限"fi
done
}方法一:
for((i=0;i<5;i++))
do
a[$i]=`echo $PATH|cut -d":" -f$[i+1]`
digui "${a[i]}"  ##这里的调用函数
done##方法二:使用类似c语言的用法
path=(`echo $PATH | sed 's/:/ /g'`)
l=${#path[*]}
for((i=0;i<$l;i++))
do
digui "${path[i]}"
done##方法三:使用for i in
path=(`echo $PATH | sed 's/:/ /g'`)
for i in ${path[*]}
do
digui "${i}"
done[root@localhost xh]#bash path.sh 
/root/bin/aa是目录
/root/bin/aa/bb是目录
/root/bin/aa/bb/cc是目录
/root/bin/aa/bb/cc/dd是目录
/root/bin/aa/bb/cc/dd/abc.txt没有执行权限

5、请结合使用shell数组排序算法和linux命令两种方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字。

cat 123.txt

1 4 7 9 4

2 5 8 3 8

3 6 9 7 6


#!/bin/bash
sort_list(){
num=($1)
l=${#num[*]}
for((i=0;i<$l;i++))
dofor((j=0;j<$l-$i;j++))doone=${num[$j]}k=j+1two=${num[$k]}if [[ $one -gt $two ]]thennum[$k]=${one}num[$j]=${two}fidone
done
echo ${num[*]}
}uniq_list(){
un=($1)
l=${#un[*]}
for((i=0;i<$l;i++))
do
[ $i -eq 0 ] && echo -n "${un[$i]} "
[ ${un[$i]} -gt ${un[$i-1]} ] && echo -n "${un[$i]} "
done
echo
}n=$(cat /data/123.txt|wc -l)
for((x=1;x<=$n;x++)) 
do
c=(`sed -n "${x}p" /data/123.txt`)
C=`sort_list "${c[*]}"`
uniq_list "${C[*]}"
done#c=(`sed -n '1p' /data/123.txt`)
#C=`sort_list "${c[*]}"`
#uniq_list "${C[*]}"
##
#b=(`sed -n '2p' /data/123.txt`)
#B=`sort_list "${b[*]}"`
#uniq_list "${B[*]}"
##
#e=(`sed -n '3p' /data/123.txt`)
#E=`sort_list "${e[*]}"`
#uniq_list "${E[*]}"
方法二:
[root@localhost /data]#cat sort.sh 
#!/bin/bash
uniq_list(){
num=($1)
l=${#num[*]}
for((i=0;i<$l;i++))
do
[ $i -eq 0 ]&& echo -n "${num[$i]} "
[ ${num[$i]} -gt ${num[$i-1]} ]&& echo -n "${num[$i]} "
done
echo
}sort_list(){
num=($1)
l=${#num[*]}
for((i=0;i<$l-1;i++))
dofor((j=$i+1;$j<$l;j++))doif [ ${num[$i]} -gt ${num[$j]}  ]thentmp=${num[$j]}num[$j]=${num[$i]}num[$i]=${tmp}fidone
done
echo ${num[*]}
}n=$(cat /data/123.txt|wc -l)
for((x=1;x<=$n;x++)) 
do
c=(`sed -n "${x}p" /data/123.txt`)
C=`sort_list "${c[*]}"`
uniq_list "${C[*]}"
done

6、假设 file.txt 内容如下,请在grep,egrep,sed,awk中至少2种命令输出有效的号码:987 456-1230和(123) 456-7890,要求至少要有一种方法使用正则表达式匹配完整的号码。

cat file.txt

987-123-5430

987 456-1230

(123) 456-7890

方法一:
[root@localhost /data]#egrep "(-|\) )+[1-6]{3}-[0-9]{4}" tel.txt 
987-123-5430
(123) 456-7890
##长一点
egrep "[()]?[0-9]{3}(-|\) )+[1-6]{3}-[0-9]{4}" tel.txt 
方法二:
[root@localhost /data]#sed -nr "/(-|\) )+[1-6]{3}-[0-9]{4}/p" tel.txt
987-123-5430
(123) 456-7890
##长一点
sed -nr "/[(]?[0-9]{3}(-|\) )+[1-6]{3}-[0-9]{4}/p" tel.txt

7.遍历/data/resources/下的文件,找出大于200M的文件,判断其若以“tar”结尾,则使用rm删除;若以“log“结尾,则清空该文件。

[root@localhost /data]#cat tarlog.sh 
#!/bin/bash
find_f(){
file=(`ls $1`)
for i in ${file[*]}
do
[[ $i == *.tar ]] && rm -rf ${1}/${i}
[[ $i == *.log ]] && echo " " > ${1}/${i}
[ -d $1/$i  ] && find_f "${1}/${i}"         ##这里是递归调用自己,因为是目录的话,需要在递归往下寻找
done
}find_f $1
find_f "/data/resources"

8.(4分)有一个文件b.txt,内容如下:

[root@localhost test]# cat b.txt
http://www.baidu.com/index.html
http://www.google.com/index.html
http://www.baidu.com/get.html
http://www.baidu.com/set.html
http://www.google.com/index.html
http://www.yahoo.com.cn/put.html

8、现要求使用 两种 方法将该文件中的域名截取出来,统计重复域名出现的次数,然后按次数进行降序排列,统计后的结果如下:

3 www.baidu.com
2 www.google.com
1 www.yahoo.com.cn

方法一:
cat b.txt |tr -s "/"|cut -d"/" -f2|sort|uniq -c方法二:
cat b.txt |awk -F"/" '{print $3}'|sort|uniq -c方法三:表示把每一行进行分类,任意://(域名)/任意,只想要括号的内容\1
cat b.txt |sed -nr "s@.*://(.*)/.*@\1@p"|sort|uniq -c3 www.baidu.com2 www.google.com1 www.yahoo.com.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode每日一题】565数组嵌套

思路流程&#xff1a; 思路v1.0 先学会写 s[0] ,用一个ans数组接收元素&#xff0c;每次往ans里添加的时候&#xff0c;先判断一下 这个index会不会超出数组的长度。ans里有没有这个元素。 s[0] 写完&#xff0c;就是用一个for循环&#xff0c;算出所有的 s[i],每次算出来的时…

野火霸天虎 STM32F407 学习笔记(六)系统时钟详解

STM32 中级 前言 仍然是学习自野火F407网课。 启动文件详解 作用&#xff1a; 初始化堆栈指针 SP_initial_sp初始化 PC 指针 Reset_Handler初始化中断向量表配置系统时钟调用 C 库函数 _main 初始化用户堆栈&#xff0c;从而最终调用 main 函数去到 C 的世界 栈&#xff…

School training competition ( Second )

A. Medium Number 链接 : Problem - 1760A - Codeforces 就是求三个数的中位数 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std; typedef long long LL; const int N 2e510;inline void …

Java线程同步

认识线程同步 解决方案 方法一&#xff1a;同步代码块 package com.itheima.d3;public class ThreadTest {public static void main(String[] args) {Accout acc new Accout("ICBC-110",100000);new DrawThread(acc,"小明").start();//小明new DrawThread…

鼎盛合:如何做一个车载便携吸尘器方案

汽车是我们日常生活中极为重要的交通工具&#xff0c;随着我们生活水平的提高自然而然地对汽车的要求也在相对提高&#xff0c;尤其是对汽车内部清洁更是引起许多有车人士的注意。如车载吸尘器深受大家的喜爱这一点就可见对汽车内部清洁的重视。 车载吸尘器是一个用于汽车清洁的…

Qt::Window 、Qt::Tool是 Qt 框架中的一个窗口标志(Window Flag),用于指定窗口的类型和行为

Qt::Window Qt::Window 是 Qt 框架中的一个窗口标志&#xff08;Window Flag&#xff09;&#xff0c;用于指定窗口的类型和行为。 在 Qt 中&#xff0c;窗口标志用于控制窗口的外观、行为和交互方式。通过使用不同的窗口标志组合&#xff0c;可以定制窗口的特性&#xff0c;…

Python实现DDos攻击实例详解

文章目录 SYN 泛洪攻击Scapy3k 基本用法代码实现DDos 实现思路argparse 模块socket 模块代码实现Client 端程序测试后记关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案…

Kotlin学习——kt里的集合,Map的各种方法之String篇

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

C++——vector插入与删除和数据存取

一. vector插入和删除 功能描述:对vector容器进行插入、删除操作 函数原型: push back(ele); //尾部插入元素ele pop_back(); //删除最后一个元素 insert(const iterator pos, el…

MFC 读写注册表

在MFC (Microsoft Foundation Classes) 中读写注册表涉及到使用 CRegKey 类&#xff0c;这个类提供了一组方法来操作Windows注册表。以下是如何使用MFC来读取和写入注册表值的基本步骤&#xff1a; 写入注册表值 创建或打开注册表项: 使用 CRegKey::Create 或 CRegKey::Open 方…

LuatOS-SOC接口文档(air780E)--rsa - RSA加密解密

示例 -- 请在电脑上生成私钥和公钥, 当前最高支持4096bit, 一般来说2048bit就够用了 -- openssl genrsa -out privkey.pem 2048 -- openssl rsa -in privkey.pem -pubout -out public.pem -- privkey.pem 是私钥, public.pem 是公钥 -- 私钥用于 加密 和 签名, 通常保密, 放在…

acwing算法基础之动态规划--背包问题

目录 1 基础知识2 模板3 工程化 1 基础知识 &#xff08;零&#xff09; 背包问题描述&#xff1a;有 N N N个物品&#xff0c;每个物品的体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​&#xff0c;现有容量是 V V V的背包&#xff0c;求这个背包能装下的物品的最大价值…

C#中的警告CS0120、CS0176、CS0183、CS0618、CS0649、CS8600、CS8601、CS8602、CS8604、CS8625及处理

目录 一、CS0120 二、CS0176 1.解决前 2.解决后 3.解决办法 三、CS0183 四、CS0618 五、CS8600 六、CS8602 七、CS8622 1. 解决前&#xff1a; 2. 解决后&#xff1a; 3.解决方法&#xff1a; 八、CS8604和CS8625 九、CS0649 十、CS8601 一、CS0120 严重性 代…

【算法萌新闯力扣】:回文链表

力扣题目&#xff1a;回文链表 开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦&#xff01;那从现在起&#xff0c;我的算法题更新会按照算法村的给的路线更新&#xff0c;更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知…

pandas教程:Techniques for Method Chaining 方法链接的技巧

文章目录 12.3 Techniques for Method Chaining&#xff08;方法链接的技巧&#xff09;1 The pipe Method&#xff08;pipe方法&#xff09; 12.3 Techniques for Method Chaining&#xff08;方法链接的技巧&#xff09; 对序列进行转换的时候&#xff0c;我们会发现会创建很…

操作系统的中断与异常(408常考点)

为了进行核心态和用户态两种状态的切换&#xff0c;引入了中断机制。 中断是计算机系统中的一种事件&#xff0c;它会打断CPU当前正在执行的程序&#xff0c;转而执行另一个程序或者执行特定的处理程序。中断可以来自外部设备&#xff08;如键盘、鼠标、网络等&#xff09;、软…

1072 Gas Station (最短路径同时求最短路,最长路,总路径)

题意&#xff1a;给定几处居民住所与几处预选加油站点&#xff0c;求离最近的居民住所最远且所有居民都在该站点服务区内的加油站点&#xff0c;如果有多个&#xff0c;则选择平均距离最小的&#xff0c;再有多个&#xff0c;选择序号最小的。 思路&#xff1a;刚开始不知道未…

振南技术干货集:FFT 你知道?那数字相敏检波 DPSD 呢?(1)

注解目录 1 、DPSD 的基础知识 1.1 应用模型 1.2 原理推导 1.3 硬件 PSD &#xff08;相敏检波&#xff0c;就是从繁乱复杂的信号中将我们关心的信号检出来&#xff0c;同时对相位敏感。 数学原理&#xff0c;逃不掉的&#xff0c;硬着头皮看吧。&#xff09; 2 、DPSD …

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用&#xff0c;我们需要形成电阻器颜色代码系统以便能够识别…

LuatOS-SOC接口文档(air780E)--repl - “读取-求值-输出” 循环

示例 --[[ 本功能支持的模块及对应的端口 模块/芯片 端口 波特率及其他参数 Air101/Air103 UART0 921600 8 None 1 Air105 UART0 1500000 8 None 1 ESP32C3 UART0 921600 8 None 1 -- 注意, 简约版(无CH343)不支持 ESP32C2 …