当前位置:首页 >> 核电技术聚变聚能设备 >> 【shell脚本】常见的shell脚本面试题目,昂达vx570r(shell脚本面试题及答案)

【shell脚本】常见的shell脚本面试题目,昂达vx570r(shell脚本面试题及答案)

cpugpu芯片开发光刻机 核电技术聚变聚能设备 6
文件名:【shell脚本】常见的shell脚本面试题目,昂达vx570r 【shell脚本】常见的shell脚本面试题目 1、请用shell脚本for,while,until这三种方式写出输出1到100的所有偶数的方法。 sum=0;for((i=0;i<=100;i+=2));do let sum+=i;done;echo $sumsum=0;i=0;while [ $i -le 100 ];do let sum+=i;let i+=2;done;echo $sumsum=0;i=0;until [ $i -gt 100 ];do let sum+=i;let i+=2;done;echo $sum#!/bin/bashsum=0for((i=0;i<=100;i+=2))do let sum+=idoneecho $sum#!/bin/bashsum=0i=0while [ $i -le 100 ]dolet sum+=ilet i+=2doneecho $sum#!/bin/bashsum=0i=0until [ $i -gt 100 ]dolet sum+=ilet i+=2doneecho $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/bashsum(){local a=$1local b=$2echo $((${a}+${b}))}sum $1 $2[root@localhost data]#chmod +x output [root@localhost data]./output 20 30##第二种[root@localhost data]#vim output #!/bin/bashsum(){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/bashdigui(){for j in `ls $1`doif [ -d "$1/$j" ]thenecho "$1/$j是目录"digui "$1/$j" ##这里是递归调用自己elif [ ! -x "$1/$j" ]thenecho "$1/$j没有执行权限"fidone}方法一:for((i=0;i<5;i++))doa[$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++))dodigui "${path[i]}"done##方法三:使用for i inpath=(`echo $PATH | sed 's/:/ /g'`)for i in ${path[*]}dodigui "${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/bashsort_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}fidonedoneecho ${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]} "doneecho}n=$(cat /data/123.txt|wc -l)for((x=1;x<=$n;x++)) doc=(`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/bashuniq_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]} "doneecho}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}fidonedoneecho ${num[*]}}n=$(cat /data/123.txt|wc -l)for((x=1;x<=$n;x++)) doc=(`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.txt987-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/bashfind_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 $1find_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方法三:表示把每一行进行分类,任意://(域名)/任意,只想要括号的内容\1cat b.txt |sed -nr "s@.*://(.*)/.*@\1@p"|sort|uniq -c3 www.baidu.com2 www.google.com1 www.yahoo.com.cn
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2026年1月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接