shell编程必须会的30道题目

2023-10-31

linux运维人员必会的30道shell编程面试题

一、序言

前几天一个做开发的朋友发给我一个链接,http://oldboy.blog.51cto.com/2561410/1632876?from=singlemessage&isappinstalled=0

是老男孩出的企业面试题培训叫做:合格linux运维人员必会的30道shell编程面试题及讲解,于是乎,,我打算每个都自己写一遍,,

PS:我是不是闲的蛋疼!!!

 

 

二、开撸

 

 

企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:
阶段1:开发一个守护进程脚本每30秒实现检测一次。
阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。
阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)

##这个还没写,,因为还要搞mysql主从复制的环境,,写把下面简单的撸了先。

 

 

企业面试题2:
使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为:

[python] view plain  copy
 
  1. [root@oldboy oldboy]# sh /server/scripts/oldboy.sh  
  2. [root@oldboy oldboy]# ls  
  3. coaolvajcq_oldboy.html  qnvuxvicni_oldboy.html  vioesjmcbu_oldboy.html  
  4. gmkhrancxh_oldboy.html  tmdjormaxr_oldboy.html  wzewnojiwe_oldboy.html  
  5. jdxexendbe_oldboy.html  ugaywanjlm_oldboy.html  xzzruhdzda_oldboy.html  
  6. qcawgsrtkp_oldboy.html  vfrphtqjpc_oldboy.html  

############我的脚本2############################################
[python] view plain  copy
 
  1. [root@cjy linux-20]# vim 2.sh  
  2. #!/bin/bash  
  3.   
  4. WORK_DIR=/oldboy/  
  5.   
  6. create(){  
  7.   
  8.     i=1  
  9.     while (($i<11))  
  10.     do  
  11.         cd $WORK_DIR && touch `tr -dc "a-z"</dev/urandom |head -c 10`_oldboy.html  
  12.         i=$(($i+1))  
  13.     done  
  14. }  
  15.   
  16. check(){  
  17.     if [ -d $WORK_DIR ];  
  18.     then  
  19.         create  
  20.     else  
  21.         mkdir $WORK_DIR  
  22.         create  
  23.     fi  
  24. }  
  25.   
  26. check  

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./2.sh  
  2.   
  3. [root@cjy linux-20]# ls /oldboy/  
  4. daijyyadst_oldboy.html  mjmcfvvjcq_oldboy.html  qmgbrihbco_oldboy.html  yrxovjbwlv_oldboy.html  
  5. djfhdphvqf_oldboy.html  mohijpfehs_oldboy.html  xdtspqouln_oldboy.html  
  6. gjczumsnfy_oldboy.html  nfwzssqtus_oldboy.html  yhqruiiota_oldboy.htm  


企业面试题3:请用至少两种方法实现!
将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写。

############我的脚本3_1############################################

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# vim 3_1.sh  
  2. #!/bin/bash  
  3.   
  4. change_name(){  
  5. DIR=/oldboy  
  6. FILE=`ls /oldboy`  
  7. GIRL=_oldgirl.HTML  
  8.   
  9. for i in $FILE  
  10. do  
  11.    c=`echo $i | cut -c 1-10`  
  12.    mv $DIR/$c* $DIR/$c$GIRL  
  13. done  
  14. }  
  15.   
  16. change_name  

 

 

############我的脚本3_2############################################

[python] view plain  copy
 
  1. [root@cjy linux-20]# vim 3_2.sh  
  2. #!/bin/bash  
  3.   
  4. change_name(){  
  5. DIR=/oldboy  
  6. FILE=`ls /oldboy`  
  7. GIRL=_oldgirl.HTML  
  8.   
  9. for i in $FILE  
  10. do  
  11.    c=`echo $i | awk -F '_' '{print $1}'`  
  12.    mv $DIR/$c* $DIR/$c$GIRL  
  13. done  
  14. }  
  15.   
  16. change_name  

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./3_1.sh  
  2. [root@cjy linux-20]# ls /oldboy/  
  3. daijyyadst_oldgirl.HTML  mjmcfvvjcq_oldgirl.HTML  qmgbrihbco_oldgirl.HTML  yrxovjbwlv_oldgirl.HTML  
  4. djfhdphvqf_oldgirl.HTML  mohijpfehs_oldgirl.HTML  xdtspqouln_oldgirl.HTML  
  5. gjczumsnfy_oldgirl.HTML  nfwzssqtus_oldgirl.HTML  yhqruiiota_oldgirl.HTML  

 

企业面试题4:
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。

############我的脚4############################################

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# vim 4.sh  
  2. #!/bin/bash  
  3.   
  4. USER=oldboy  
  5. create_user(){  
  6.   
  7.     for i in {01..10}  
  8.     do  
  9.          RPASSWD=$(tr -dc [:alpha:] < /dev/urandom |head -c 8)  
  10.          useradd $USER$i  
  11.          echo $RPASSWD|passwd $USER$i --stdin  
  12.          echo $USER$i----$RPASSWD >> /oldboy/userpasswd.txt  
  13.     done  
  14. }  
  15.   
  16. del_user(){  
  17.   
  18.     for j in {01..10}  
  19.     do  
  20.         userdel $USER$j  
  21.         rm -rf /home/$USER$j  
  22.     done  
  23. }  
  24.   
  25. case $1 in  
  26.     create)  
  27.         create_user  
  28.     ;;  
  29.     del)  
  30.         del_user  
  31.     ;;  
  32.     *)  
  33.         echo "Usage:Please use $0 create or $0 del."  
  34.         echo "####################################"  
  35.         echo "create: create user $USER 01-10 and give it random passwd."  
  36.         echo "del: delete $USER 01-10 and /home/$USER 01-10 directory. "  
  37.     ;;  
  38.     esac  

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./4.sh  
  2. Usage:Please use ./4.sh create or ./4.sh del.  
  3. ####################################  
  4. create: create user oldboy 01-10 and give it random passwd.  
  5. del: delete oldboy 01-10 and /home/oldboy 01-10 directory.  
  6.   
  7. [root@cjy linux-20]# ./4.sh create  
  8. 正在创建信箱文件: 文件已存在  
  9. 更改用户 oldboy01 的密码 。  
  10. passwd: 所有的身份验证令牌已经成功更新。  
  11. 正在创建信箱文件: 文件已存在  
  12. 更改用户 oldboy02 的密码 。  
  13. passwd: 所有的身份验证令牌已经成功更新。  
  14. 正在创建信箱文件: 文件已存在  
  15. 更改用户 oldboy03 的密码 。  
  16. passwd: 所有的身份验证令牌已经成功更新。  
  17. 正在创建信箱文件: 文件已存在  
  18. 更改用户 oldboy04 的密码 。  
  19. passwd: 所有的身份验证令牌已经成功更新。  
  20. 正在创建信箱文件: 文件已存在  
  21. 更改用户 oldboy05 的密码 。  
  22. passwd: 所有的身份验证令牌已经成功更新。  
  23. 正在创建信箱文件: 文件已存在  
  24. 更改用户 oldboy06 的密码 。  
  25. passwd: 所有的身份验证令牌已经成功更新。  
  26. 正在创建信箱文件: 文件已存在  
  27. 更改用户 oldboy07 的密码 。  
  28. passwd: 所有的身份验证令牌已经成功更新。  
  29. 正在创建信箱文件: 文件已存在  
  30. 更改用户 oldboy08 的密码 。  
  31. passwd: 所有的身份验证令牌已经成功更新。  
  32. 正在创建信箱文件: 文件已存在  
  33. 更改用户 oldboy09 的密码 。  
  34. passwd: 所有的身份验证令牌已经成功更新。  
  35. 正在创建信箱文件: 文件已存在  
  36. 更改用户 oldboy10 的密码 。  
  37. passwd: 所有的身份验证令牌已经成功更新。  
  38.   
  39. [root@cjy linux-20]# vim /etc/passwd  
  40. oldboy01:x:503:503::/home/oldboy01:/bin/bash  
  41. oldboy02:x:504:504::/home/oldboy02:/bin/bash  
  42. oldboy03:x:505:505::/home/oldboy03:/bin/bash  
  43. oldboy04:x:506:506::/home/oldboy04:/bin/bash  
  44. oldboy05:x:507:507::/home/oldboy05:/bin/bash  
  45. oldboy06:x:508:508::/home/oldboy06:/bin/bash  
  46. oldboy07:x:509:509::/home/oldboy07:/bin/bash  
  47. oldboy08:x:510:510::/home/oldboy08:/bin/bash  
  48. oldboy09:x:511:511::/home/oldboy09:/bin/bash  
  49. oldboy10:x:512:512::/home/oldboy10:/bin/bash  
  50.   
  51. [root@cjy linux-20]# ./4.sh del    #删除用户  

 

企业面试题5:
写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多

############我的脚5############################################

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# vim 5.sh  
  2. #!/bin/bash  
  3.   
  4. tmp_fifofile=/tmp/$$.fifo  
  5. mkfifo $tmp_fifofile  
  6. exec 6<> $tmp_fifofile  
  7. rm -rf $tmp_fifofile  
  8.   
  9. thread=254  
  10. for ((i=0;i<$thread;i++))  
  11. do  
  12.     echo >&6  
  13. done  
  14.   
  15. for ((i=2;i<255;i++))  
  16. do  
  17. read -u6  
  18.     {  
  19.         ip=172.16.27.  
  20.         ping $ip$i -c 1 >/dev/null && echo $ip$i:live || echo $ip$i:dead >>123  
  21.                echo >&6  
  22.     }&  
  23. done  
  24. wait  
  25. exec 6>&-  
  26.   
  27. exit 0  

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./5.sh &  
  2. [122668  
  3. [root@cjy linux-20]# 172.16.27.11:live  
  4. 172.16.27.23:live  
  5. 172.16.27.25:live  
  6. 172.16.27.27:live  
  7. 172.16.27.28:live  
  8. 172.16.27.24:live  
  9. 172.16.27.26:live  
  10. 172.16.27.21:live  
  11. 172.16.27.31:live  
  12. 172.16.27.30:live  
  13. 172.16.27.37:live  
  14. 172.16.27.54:live  
  15. 172.16.27.61:live  
  16. 172.16.27.80:live  
  17. 172.16.27.254:live  

企业实战题6:请用至少两种方法实现!
写一个脚本解决DOS攻击生产案例
提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP。

 

企业实战题7:
开发mysql多实例启动脚本:
已知mysql多实例启动命令为:mysqld_safe--defaults-file=/data/3306/my.cnf &
停止命令为:mysqladmin -u root -poldboy123 -S /data/3306/mysql.sockshutdown
请完成mysql多实例启动启动脚本的编写
要求:用函数,case语句、if语句等实现。

 

企业实战题8:如何实现对MySQL数据库进行分库备份,请用脚本实现

 

企业实战题9:如何实现对MySQL数据库进行分库加分表备份,请用脚本实现



企业面试题10:请用至少两种方法实现!
bash for循环打印下面这句话中字母数不大于6的单词(昆仑万维面试题)。
I am oldboy teacher welcome to oldboy training class.

 

[python] view plain  copy
 
  1. #!/bin/bash  
  2.   
  3.   
  4. echo '###Usage1#####'  
  5. a='I am oldboy teacher welcome to oldboy training class.'  
  6.   
  7. for i in $a  
  8. do  
  9.     NUM=`echo $i |wc -L`  
  10.     if [ $NUM -le 6 ];then  
  11.         echo $i  
  12.     fi  
  13. done  
  14.   
  15.   
  16. echo '###Usage2######'  
  17.   
  18. for i in $a  
  19. do  
  20.     if [ ${#i} -le 6 ];then  
  21.         echo $i  
  22.     fi  
  23. done  

[python] view plain  copy
 
  1. ###Usage1#####  
  2. I  
  3. am  
  4. oldboy  
  5. to  
  6. oldboy  
  7. class.  
  8. ###Usage2######  
  9. I  
  10. am  
  11. oldboy  
  12. to  
  13. oldboy  
  14. class.  

 

 

企业面试题11:开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小。以屏幕输出的方式提醒用户比较结果。注意:一共是开发2个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数做判断。 
 

企业面试题12:打印选择菜单,一键安装Web服务:

[root@oldboyscripts]# sh menu.sh

    1.[install lamp]

    2.[install lnmp]

    3.[exit]

    pls input the num you want:

要求:

1、当用户输入1时,输出“startinstalling lamp.”然后执行/server/scripts/lamp.sh,脚本内容输出"lampis installed"后退出脚本;

2、当用户输入2时,输出“startinstalling lnmp.”然后执行/server/scripts/lnmp.sh输出"lnmpis installed"后退出脚本;

3、当输入3时,退出当前菜单及脚本;

4、当输入任何其它字符,给出提示“Input error”后退出脚本。

5、要对执行的脚本进行相关条件判断,例如:脚本是否存在,是否可执行等。 

 

[python] view plain  copy
 
  1. #!/bin/bash  
  2.   
  3. echo "1.[install lamp]"  
  4. echo "2.[install lnmp]"  
  5. echo "3.[exit]"  
  6.   
  7. read -t 30 -p "Please input tut the num you want:" a  
  8.   
  9. case $a in  
  10.     1)  
  11.         if  
  12.             [ -f lamp.sh ];then  
  13.                 ./lamp.sh  
  14.                 sleep 3  
  15.                 echo "lamp is installed!"  
  16.         else  
  17.             echo "no lamp.sh!"  
  18.         fi  
  19.     ;;  
  20.   
  21.     2)  
  22.         if  
  23.             [ -f lnmp.sh ];then  
  24.                 ./lnmp.sh  
  25.                 sleep 3  
  26.                 echo "lnmp is installed!"  
  27.         else  
  28.             echo "no lnmp.sh!"  
  29.         fi  
  30.     ;;  
  31.   
  32.     3)  
  33.         exit 0  
  34.     ;;  
  35.   
  36.     *)  
  37.         echo  "Input error"  
  38.         exit 0  
  39. esac  

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./12.sh  
  2. 1.[install lamp]  
  3. 2.[install lnmp]  
  4. 3.[exit]  
  5. Please input tut the num you want:1  
  6. no lamp.sh!  

 


企业面试题13:

1、监控web服务是否正常,不低于3种监控策略。

2、监控db服务是否正常,不低于3种监控策略。
要求间隔1分钟,持续监控。

 

企业面试题14:监控memcache服务是否正常,模拟用户(web客户端)检测。

使用nc命令加上set/get来模拟检测,以及监控响应时间及命中率。
 


企业面试题15:面试及实战考试题:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次(10分钟时间完成)。
 

企业面试题16:企业案例:写网络服务独立进程模式下rsync的系统启动脚本

例如:/etc/init.d/rsyncd{start|stop|restart} 。
要求:
1.要使用系统函数库技巧。
2.要用函数,不能一坨SHI的方式。
3.可被chkconfig管理。

 

企业面试题17:老男孩教育天津项目学生实践抓阄题目:

好消息,老男孩培训学生外出企业项目实践机会(第6次)来了(本月中旬),但是,名额有限,队员限3人(班长带队)。

因此需要挑选学生,因此需要一个抓阄的程序:

要求:

1、执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。

2、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入
 

 

企业面试题18:老男孩linux企业面试题:

已知下面的字符串是通过RANDOM随机数变量md5sum|cut-c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?

21029299

00205d1c

a3da1677

1f6d12dd

890684b

 

 

企业面试题19:批量检查多个网站地址是否正常 

要求:shell数组方法实现,检测策略尽量模拟用户访问思路

http://www.etiantian.org

http://www.taobao.com

http://oldboy.blog.51cto.com

http://10.0.0.7 

 

企业面试题20(中企动力)::用shell处理以下内容

1、按单词出现频率降序排序!

2、按字母出现频率降序排序!

the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# cat test  
  2. the squid project provides a number of resources toassist users design,implement and support squid installations.Please browsethe   
  3. documentation and support sections for more infomation  

 

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# cat 20_1.sh  
  2. #!/bin/bash  
  3.   
  4. sed -i 's/\,\|\./ /g' test  
  5.   
  6. for i in `cat test`  
  7. do  
  8.     echo $i  
  9. done  

 

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./20_1.sh |sort|uniq -c |sort -r  
  2.       2 support  
  3.       2 squid  
  4.       2 and  
  5.       1 users  
  6.       1 toassist  
  7.       1 the  
  8.       1 sections  
  9.       1 resources  
  10.       1 provides  
  11.       1 project  
  12.       1 Please  
  13.       1 of  
  14.       1 number  
  15.       1 more  
  16.       1 installations  
  17.       1 infomation  
  18.       1 implement  
  19.       1 for  
  20.       1 documentation  
  21.       1 design  
  22.       1 browsethe  
  23.       1 a  

[python] view plain  copy
 
  1. [root@cjy linux-20]# cat 20_2.sh  
  2. #!/bin/bash  
  3.   
  4. sed -i 's/\,\|\./ /g' test  
  5.   
  6. for i in `cat test`  
  7. do  
  8.     for j in `echo $i`  
  9.     do  
  10.     echo $j | awk -F '' '{for(i=1;i<=NF;i++)print $i}'  
  11.     done  
  12. done  

 

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./20_2.sh |sort |uniq -c|sort -nr  
  2.      19 s  
  3.      17 e  
  4.      16 o  
  5.      14 t  
  6.      12 n  
  7.      12 i  
  8.      11 r  
  9.       9 a  
  10.       8 u  
  11.       7 p  
  12.       7 d  
  13.       6 m  
  14.       4 l  
  15.       4 c  
  16.       3 f  
  17.       2 q  
  18.       2 h  
  19.       2 b  
  20.       1 w  
  21.       1 v  
  22.       1 P  
  23.       1 j  
  24.       1 g  


 

企业面试题21:输出正方形、等腰三角形、直角梯形,见如下内容

http://oldboy.blog.51cto.com/2561410/1718607

 

 

企业面试题22:开发通过web界面展示监控Nginx代理节点状态,效果图如下。

wKioL1Z2j3nCbtimAADO--T7ahw342.jpg

 

 

lvs+keepalived集群部分Shell企业案例:

企业面试题23、【LVS主节点】手工开发ipvsadm管理lvs的脚本ip_vs

   实现:/etc/init.d/lvs {start|stop|restart}

 

企业面试题24、【LVS主节点】模拟keepalived健康检查功能管理LVS节点,

当节点挂掉(检测2次,间隔2秒)从服务器池中剔除,好了(检测2次,间隔2秒)加进来

提示:利用ipvsadm命令实现添加和减少LVS节点。

 

企业面试题25、【LVS客户端节点】开发LVS客户端设置VIP以及抑制ARP的管理脚本

    实现:/etc/init.d/lvsclient {start|stop|restart}

企业面试题26、【LVS备节点】模拟keepalved vrrp功能,监听主节点,如果主节点不可访问则备节点启动并配置LVS实现接管主节点的资源提供服务(提醒:注意ARP缓存) 

 

企业面试题27、请用shell或Python编写一个正方形(oldboy_square.sh),接收用户输入的数字。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@oldboy ~] # sh oldboy_square1.sh 
Please Enter a number:5
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
[root@oldboy ~] # sh oldboy_square2.sh  
Please Enter a number:9
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■

 

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# vim 27_1.sh  
  2.   
  3. #!/bin/bash  
  4.   
  5. read -p "Please Enter a number:" a  
  6.   
  7.   
  8. for ((i=1;$i<=$a;i++))  
  9. do  
  10.     for ((j=1;j<=$((2*$a));j++))  
  11.     do  
  12.         echo -e "+\c"  #不换行  
  13.     done  
  14.     echo  
  15. done  

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./27_1.sh  
  2. Please Enter a number:5  
  3. ++++++++++  
  4. ++++++++++  
  5. ++++++++++  
  6. ++++++++++  
  7. ++++++++++  

[python] view plain  copy
 
  1. [root@cjy linux-20]# cat 27_2.sh  
  2. #!/bin/bash  
  3.   
  4. read -p "Please Enter a number:" a  
  5.   
  6.   
  7. for ((i=1;$i<=$a;i++))  
  8. do  
  9.     for ((j=1;j<=$a;j++))  
  10.     do  
  11.         echo -e "■ \c"  #不换行  
  12.     done  
  13.     echo  
  14. done  

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./27_2.sh  
  2. Please Enter a number:9  
  3. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  4. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  5. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  6. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  7. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  8. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  9. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  10. ■ ■ ■ ■ ■ ■ ■ ■ ■  
  11. ■ ■ ■ ■ ■ ■ ■ ■ ■  

 

企业面试题28、请用shell或Python编写一个等腰三角形(oldboy2_triangle.sh),接收用户输入的数字。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@oldboy ~] # sh oldboy2_triangle.sh 
Please Enter a number:5
     *
    ***
   *****
  *******
*********
[root@oldboy ~] # sh oldboy2_triangle.sh 
Please Enter a number:8
        *
       ***
      *****
     *******
    *********
   ***********
  *************
***************

 

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# cat 28_1.sh  
  2. #!/bin/bash  
  3.   
  4. read -p "Please Enter a number:" a  
  5.   
  6.   
  7. for ((i=1;$i<=$a;i++))  
  8. do  
  9.     for ((h=$((2*$a-2*$i));h>=0;h--))  
  10.     do  
  11.         echo -e " \c"  
  12.     done  
  13.     for ((j=1;j<=$((2*$i-1));j++))  
  14.     do  
  15.         echo -e "*\c"  #不换行  
  16.     done  
  17.     echo  
  18. done  

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./28_1.sh  
  2. Please Enter a number:5  
  3.          *  
  4.        ***  
  5.      *****  
  6.    *******  
  7.  *********  
  8. [root@cjy linux-20]# ./28_1.sh  
  9. Please Enter a number:8  
  10.                *  
  11.              ***  
  12.            *****  
  13.          *******  
  14.        *********  
  15.      ***********  
  16.    *************  
  17.  ***************  

 

企业面试题29、请用shell或Python编写一个画直角梯形程序(oldboy4.sh),接收用户输入的参数n,m

例如:

1
2
3
4
[root@oldboy ~] # sh oldboy4.sh 4 6
****
*****
******

27,28,29三道题参考http://oldboy.blog.51cto.com/2561410/1718607

 

[python] view plain  copy
 
  1. [root@cjy linux-20]# cat 29.sh  
  2. #!/bin/bash  
  3.   
  4. if [[ -n $1 ]] && [[ -n $2 ]];  
  5. then  
  6.   
  7. for ((i=$1;$i<=$2;i++))  
  8. do  
  9.     for ((j=1;j<=$i;j++))  
  10.     do  
  11.         echo -e "*\c"  #不换行  
  12.     done  
  13.     echo  
  14. done  
  15. else  
  16.     echo "No given two int arguments,such as $0 5 6!"  
  17. fi  

[python] view plain  copy
 
  1. [root@cjy linux-20]# ./29.sh 4 6  
  2. ****  
  3. *****  
  4. ******  

 

企业面试题30:写一套简单的企业代码上线发布系统案例,利用SVN对代码及配置文件进行管理,在办公室服务器上从svn取出指定版本的代码和配置,发布到IDC机房分发机服务器上,在分发服务器或者负载均衡器上或者应用服务器本地实现代码平滑发布、上线、回滚脚本(具体设计请参考课堂讲解的企业代码发布方案)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell编程必须会的30道题目 的相关文章

  • 初识C语言:一篇文章解决基础的操作符(前置++与后置++的区别)

    目录 一 算术操作符 二 关系操作符 三 赋值操作符 四 自增 自减操作符 前言 总结 前言 1 加法运算符 加法运算符为双目运算符 即应有两个量参与加法运算 右结合性 2 减法运算符 减法运算符为双目运算符 但 也可作负值运算符 此时为单
  • ARM寻址方式

    所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式 ARM处理器的寻址方式 目前ARM处理器支持9种寻址方式 分别是立即数寻址 寄存器寻址 寄存器偏移寻址 寄存器间接寻址 基址变址寻址 多寄存器寻址 相对寻址 堆栈寻址和块拷
  • 自定义规则 Collections.sort() 对 List 排序

    一 Collections sort 与Arrays sort 的比较 Collections sort 该算法是一个经过修改的合并排序算法 其中 如果低子列表中的最高元素效益高子列表中的最低元素 则忽略合并 此算法可提供保证的N log
  • 工作日记NO.12

    后续工作内容 1 尝试编译WINDOWS工程 2 尝试编译LINUX工程 3 根据LINUX工程尝试编译 编写 emscripten工程 今日完成 1 makefile规则 2 libdwg的makefile in makefile am研
  • 一些常用的第三方框架之Fresco下篇

    Fresco的使用 1 gitHub下载依赖库或者jar包 Anroid Studio可以通过compile方式加载 compile com facebook fresco fresco 0 8 1 2 添加网络权限 uses permis
  • spring cloud(四) Eureka配置Httpbasic验证+Eureka配置详解

    目录 spring cloud 一 从一个简单的springboot服务开始 spring cloud 二 起步 集成Eureka服务发现 spring cloud 三 Eureka高可用性 Feign声明式Rest客户端 spring c
  • C# 线程浅谈(三)

    这篇讲线程锁 lock得概念 什么是锁 为什么用锁 做个栗子 俩个线程同时访问一个int对象 一个线程 一个线程 都1W次 那么这个数 不管怎么样 最后都是0 class TaskDom int count 0 public void St
  • 为什么64位计算机CPU架构叫amd64

    x86 1978 年 6 月 Intel 发布了新款 16 位微处理器 8086 开创了一个全新时代 x86 架构由此诞生 x86 架构指的是特定微处理器执行的计算机语言指令集 定义了芯片的基本使用规则 事实上 8086 处理器发布之初并没
  • OpenCV学习日志_2020.10.26_面向Python的OpenCV入门

    日期 2020 10 26 主题 面向Python的OpenCV入门 内容 在Anaconda上安装配置OpenCV 学习图像处理基本操作 以下为具体代码 import cv2 1 读取静态图像 retval cv2 imread file
  • Dell服务器中Lsiutil命令常见使用

    前言 Dell服务器MegaCli命令只返回Exit Code 0x00问题分析 SAS 6i R的raid信息用MegaCli64命令就获取不到呢 SAS 6 iR 只支持2块硬盘做raid0或者raid1 现在返回去看看MegaCli6
  • NLP(五)命名实体识别(NER)

    本文将会简单介绍自然语言处理 NLP 中的命名实体识别 NER 一 什么是命名实体识别 1 命名实体识别简介 命名实体识别 Named Entity Recognition 简称NER 是信息提取 问答系统 句法分析 机器翻译等应用领域的重
  • 征稿

    我们诚挚地邀请您提交论文参加 ACM MM23 会议上 LGM3A Workshop 主题为 基于大语言模型的多模态研究和应用 LGM3A 2023 the 1st Workshop on Large Generative Models M
  • 可直接使用的unity第三人称自由视角相机脚本

    使用方法 将要控制的角色拖到TargetBody 将相机的焦点拖到CamerPivot 建议CameraPivot是一个放在TargetBody下的子物体 并且位置应该是在TargetBody的头部 注意 此脚本自动忽略 Ignore Ra
  • 准确率、精确率、召回率、F1值学习笔记

    一 TN TP TN FP FN概念 TP与TN都是分对了情况 TP是正类 TN是负类 则推断出 FP是错误的正类 FN是错误的负类 举例 我们需要从一个班级中的人中寻找所有女生 如果把这个任务当成一个分类器的话 那么女生就是我们需要的 而
  • OpenSSL EVP_EncryptInit 函数官方详解

    OpenSSL EVP EncryptInit 函数官方详解 https www openssl org docs manmaster crypto EVP EncryptInit html
  • 新星计划、原力计划新动态,大波的奖牌来袭速来领取

    catalogue 写在前面 原力计划 新星计划 大波奖牌来袭 微软学生开发者峰会 写在最后 写在前面 哈喽 大家好 我是几何心凉 这是一份全新的专栏 得到CSDN王总的授权 来对于我们每周四的绿萝时间 直达CSDN 直播内容进行总结概括
  • 抓住推特群推营销红利,实现低成本精准获客

    随着Twitter在社媒营销中所占流量越来越高 现在做推特引流不会群发 都不敢说自己会玩 使用大量的账号 全天24小时自动发推 抢占搜索热门 进行推特营销时 通过推特群发可以让你的信息快速传播 从而提高你的品牌知名度和推广效果 以下是进行推
  • 单片机论文参考:3、基于单片机的电子万年历设计

    摘要 随着社会 科技的发展 人类得知时间 从观太阳 摆钟到现在电子钟 不断研究 创新 为了在观测时间 能够了解与人类密切相关的信息 比如星期 日期等 电子时钟诞生了 它集时间 日期 星期等功能于一身 具有读取方便 显示直观 功能多样 电路简
  • 写一个查找算法找出数组中相同的元素

    1 import java util ArrayList 2 3 public class Test 4 5 原始数据data 假设data数组中的数据元素已经按照某种顺序排好 6 但是 该数组中的数据元素重复出现 7 我们的目的是查找 解
  • html在线校验器,代码检查错误必备工具-HTML标签检测器

    很多人编写网站代码时 经常会忘记写开始或结束标签 虽然有些标签缺失对网站没有很大影响 但是站在优化角度 一个标签的错误可能会使你的网站在搜索引擎中的评分降低 从而影响关键词排名进度 但是一个网站已经写了很多代码 如何检查错误尤其是标签错误成

随机推荐

  • 以U-NET为例的网络构建代码实现

    写在前面 最近在读U Net论文时 网上看到从零构建网络模型的代码 代码足够间接 而且结构比较完整 因此记录一下学习结果 本文重点在于如何代码的实现 对于U Net论文中的细节未涉略 关于论文的讨论可移步 学习的资源链接在文章末尾 U ne
  • python+pytest+selenium+allure实战

    selenium是一个针对web端项目的模拟鼠标和键盘操作的自动化测试工具 pytest是一个和unittest类似的自动化测试框架 但它比unittest更加方便 并且可以兼容unittest框架 项目结构 common 存放公共方法 比
  • 重力球——重力感应器应用

    首届 Google 暑期大学生博客分享大赛 2010 Andriod 篇 之前在网上看到一个HTC的Windows Mobile手机中的一个应用重力感应器的程序 蛋疼的小球 地址 http v youku com v show id XMT
  • Python字符串的常用方法(3-3)

    目录 一 字符串编码格式 二 字符串的格式化 三 字符串格式化函数 format 四 Python3 6加入的新格式化方案一f strings 五 格式化符号 六 format的使用方法 七 字符串的特殊字符 一 字符串编码格式 1 什么是
  • bootcmd和bootargs环境变量

    从网络启动 setenv bootargs console tty0 console ttymxc0 115200 root dev mmcblk1p2 rootwait rw setenv bootcmd tftp 80800000 zI
  • cuda c语言编程指南,CUDA C编程权威指南

    译者序 推荐序 自序 作者简介 技术审校者简介 前言 致谢 章基于CUDA的异构并行计算1 1 1并行计算1 1 1 1串行编程和并行编程2 1 1 2并行性3 1 1 3计算机架构4 1 2异构计算6 1 2 1异构架构7 1 2 2异构
  • PSIM联合VS--PLL锁相环

    在学习使用PSIM联合VS的过程中 有一项为采样三相电压信号建立软件锁相环练习PI的使用 在查询资料的过程中 网上的百度百科讲PLL作为产生n倍频来使用 这与我之前做电机控制中的PLL概念不太一致 所以产生了疑问 当时的许多知识 现在回头看
  • JetBrains IntelliJ IDEA Ultimate 2022.1.1 Win/macOS 中文

    下载链接 https sbww work 16343 IntelliJ IDEA安装和设置 IntelliJ IDEA 安装要求 硬件需求 至少需要 2 GB RAM 但是推荐使用 4 GB RAM 至少需要 1 5 GB 硬盘空间 1 G
  • 文件文档在线预览转换解决方案和应用

    文章目录 Java Word转PDF文件方案评测 一 kkFileView应用场景一 官网原始部署与应用 二 kkFileView应用场景二 编译 自定义制作docker镜像部署 三 kkfileview预览pdf文件以及关键词高亮和定位
  • Nacos配置管理

    目录 1 Nacos配置管理 1 1 统一配置管理 1 1 1 在nacos中添加配置文件 1 1 2 从微服务拉取配置 1 2 配置热更新 1 2 1 方式一 1 2 2 方式二 1 3 配置共享 1 添加一个环境共享配置 2 在user
  • 财报解读:份额企稳、均价上浮,小米高端化驶入正轨?

    时隔半个月 在雷军那场颇有反响的以 成长 为主题的个人演讲之后 小米发布了今年二季度财报 二季报中亮眼的财务数据 为雷军的演讲提供了一份更加有力的注解 小米经过三年探索 似乎已经找到了高端化的诀窍 因而实现了 成长 但当高端化转型已经成为市
  • 第一章 计算机系统的概述①

    一 操作系统概述 1 操作系统的概念 什么是操作系统 概念 操作系统 Operating System 0s 是指控制和管理整个计算机系统的硬件和软件资源 并合理地组织调度计算机的工作和资源的分配 以提供给用户和其他软件方便的接口和环境 它
  • 失传已久的广工Dr.com路由器最简单最小白的配置方法

    失传已久的广工路由器最简单最小白的配置方法 零 前言 一 准备工作 1 所需物品 2 原理及工具介绍 没兴趣的请直接跳过 二 路由器权限获取 须时两周 三 分析心跳包 1 安装wireshark 2 进行抓包 四 尝试第一次拨号 1 打开W
  • Xcode 之自己编译静态库

    今天介绍下 如何利用Xcode 新建一个静态库 以及如何编译成i386 armv7 armv7s 等平台架构 开发环境 MAC OS X 10 9 4 Xcode 5 0 2 背景知识 库分两种 静态库 a lib 和 动态库 so dll
  • 学员管理系统——面向对象

    文章目录 前言 基本思路 Student py main py StudentManage py 菜单 menu 根据菜单实现程序的大概逻辑 add student 添加学员信息 delete student 删除学员信息 modify s
  • STM32-定时器详解

    目录 前言 一 定时器基本介绍 1 STM32定时器 2 通用定时器功能和特点 3 计数器模式 4 定时器工作原理 a 定时器框图 b 时钟产生器部分 c 时基单元 d 输入捕获通道 e 输出比较通道 PWM 二 定时器中断应用 1 内部时
  • SpringBoot基本操作(四)——SpringBoot使用RedisTemplate整合Redis(有demo)

    SpringBoot2 0笔记 一 SpringBoot基本操作 环境搭建及项目创建 有demo 二 SpringBoot基本操作 使用IDEA打war包发布及测试 三 SpringBoot基本操作 SpringBoot整合SpringDa
  • Visual Studio Community 2019 评估期结束,登录一直失败问题

    今天打开VS2019 发现它试用期过期了需要登录 点击登录 发现一直说浏览器版本太低 需要升级浏览器 真正点击下载Edge浏览器 它又不直接跳转到该浏览器中 反复试了好多次 简直让人崩溃 后来网上搜索到用设备代码流的方式可以解决 https
  • 简图记录-驱动debug之打印总结(printk、dmesg、logcat)

    简图记录总结 在驱动开发过程中 常会用到一些打印做问题定位 无论是提前设计或者调试过程中添加 打印都是一种常用的手段 以下为打印相关问题总结 一 常见驱动打印的添加与查看 1 内核打印printk 概念 printk是内核中根据日志级别向控
  • shell编程必须会的30道题目

    linux运维人员必会的30道shell编程面试题 一 序言 前几天一个做开发的朋友发给我一个链接 http oldboy blog 51cto com 2561410 1632876 from singlemessage isappins