找回密码
 注册
关于网站域名变更的通知
查看: 479|回复: 1
打印 上一主题 下一主题

这些脚本你都能写出来吗?RH033级别简单脚本

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-1-22 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

写一个脚本:* W  w1 v0 t8 @; G8 g2 M
1、创建目录/tmp/scripts& N+ _$ x4 F7 ^+ P( s5 |+ [
2、切换工作目录至此目录中  R) i/ e3 H$ q, ~8 i( C. J
3、复制/etc/pam.d目录至当前目录,并重命令为test
& Z0 K* P0 K9 J( Y/ Y  K; a! f4、将当前目录中的test及其里面的文件和子目录的属主改为redhat% C6 ~  }( V. G( m/ _6 f' T5 |7 }
5、将test及其子目录中的文件的其它用户的权限改为没有任何权限

写一个脚本:  c; L6 ~- w7 V8 o8 c6 T0 w1 ~
1、显示当前系统日期和时间,而后创建目录/tmp/lstest5 w, {; x6 k2 u; @8 B1 G& [
2、切换工作目录至/tmp/lstest
# Q- j- P/ ?3 r0 b; o3、创建目录a1d, b56e, 6test
4 M8 U, q1 X5 T2 }# V4、创建空文件xy, x2y, 7323 X9 k7 \; g9 {8 k4 d- r" X, I
5、列出当前目录下以a、x或者6开头的文件或目录;
& @( X% x2 I: R. G# u# _6 M2 G6、列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录;

写一个脚本,完成以下功能:* C" z3 [5 V. L5 W4 l
1、传递两个整数给脚本,让脚本分别计算并显示这两个整数的和、差、积、商

写一个脚本:
2 D% z/ s4 N" s/ `4 C1、切换工作目录至/var0 q. T% E9 I" b# @- m( \
2、依次向/var目录中的每个文件或子目录问好,形如:
  X; O4 f5 e0 p# L8 U9 C0 S2 B" [  (提示:for FILE in /var/*; 或for FILE in `ls /var`; )
/ K8 H. b. f2 s6 d   Hello, log
7 V4 K; m0 f6 \; a- N   Hello, run
) N. a" v, q* ]6 n9 C4 j4 N3、统计/var目录下共有多个文件,并显示出来


- P, u' _- M+ y写一个脚本:
1 G7 R% s! j; a  y4 J# S1、设定变量FILE的值为/etc/passwd
. T+ ~$ M. m7 e8 }2、使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容;(提示:LINE=`head -2 /etc/passwd | tail -1`可以取得第2行)7 h9 J! j7 H! S2 p
3、把这些行保存至/tmp/mypasswd文件中

写一个脚本:
4 @# u( k. q' e# d; |+ y  t  M/ t1、设定变量FILE的值为/etc/passwd3 c- w, S% d, J& I  L1 Z
2、依次向/etc/passwd中的每个用户问好,形如:  (提示:LINES=`wc -l /etc/passwd | cut -d" " -f1`)4 m! k; V4 d" c9 N  }5 g
Hello, root.
) V+ c/ G& z- |! p1 C3、统计一共有多少个用户

写一个脚本:, e* C# Y$ n6 J& [( X( U: U: k. [
1、设定变量FILE的值为/etc/passwd
) M5 c2 F+ M' W2、依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么,形如:  (提示:LINES=`wc -l /etc/passwd | cut -d" " -f1`)1 m! N$ O* n8 P/ F6 W, W  \
Hello, root,your UID is 0.  j5 t2 W7 G4 `+ T$ A2 F
3、统计一共有多少个用户

写一个脚本:
. n9 V5 X3 b9 D  e+ c1 X& `8 Z1、添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加;

. n+ T4 g# p" \( Z# f4 s* p
写一个脚本:
9 m. E7 W1 {2 t* C; C: p0 t5 D1、通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线,/ G8 V: e. c+ [* D7 B) c  }( r
如果在线,就显示"ip is up."
& s8 U4 O  D3 M8 q) I$ p. @+ p 如果不在线,就显示"ip is down."

写一个脚本:
& R' X! L! E/ G3 _* M6 l1、将/var/目录下所有文件的文件名的首字母和尾字母显示时改为大写;


8 c8 |: J" @5 Y" \* N写一个脚本:
( `9 P9 J. K  x8 J1、将/etc/sysctl.conf文件中以非#(井号)开头的行保存至/tmp/sysctl.conf中
" D# V; r; o9 v' u2、如果/tmp/sysctl.conf文件中net.ipv4.ip_forward的值为0的话,则将其值修改为1
1 k$ n/ [0 A' Y& T7 f0 E3、按次序逐个显示等于号之前的指令的名字,并在每一个指令名字添加其编号,形如:
/ q1 `, v9 L! \/ s: u7 X; O  1 net.ipv4.ip_forward$ S2 ^$ \$ M6 {; W+ h
  2 kernel.sysrq
) a! f: T; H4 D* @8 r, I4 t4、为/tmp/sysctl.conf文件中的每一行添加注释,即在每一非空白行之前添加一个以#开头的行,并保存至文件中。内容形如:
8 K' p8 |" q1 E4 @$ a   # A parameter.* m6 |, O/ i/ i7 A1 Y
   
! _+ P" R( A4 t) i8 }' g% j写一个脚本:
0 d2 i$ j6 M5 L* w/ q% v5 W2 V1、假设某文件中有如下行:
4 @: T  J2 }$ M6 F8 C2 n/etc/inittab$ S7 O8 [/ w! P+ G" o0 z5 b/ W
/etc/pam.d/sudo+ I6 L1 `; v; H" F9 t2 R
/usr/share/doc
  U& c( y# K6 k5 l- Z1 ?7 W/usr/local/
" Q+ s2 _3 m5 S) F* B  O' ]/etc/sysconfig/, [% d; a( Y0 S
/var/log/messages( b% J$ n- M. D! k
2、取出如上文件中每一行文件名中不包含路径的文件名,比如,/etc/inittab的文件名为inittab,/etc/sysconfig/的文件名为sysconfig;8 C1 j! u# ^8 [6 V  p" r& R
3、把每个文件名的第二个字母显示时改为大写;

1、写一个脚本:% h5 S4 ^  y& I& |4 K
判断一个文件是否存在,如果存在就显示其存在;

2、写一个脚本:  ^& ?  I& {4 A, m7 l6 }2 N
判断一个文件是否存在,如果存在就显示其存在;否则就显示其不存在;

3、写一个脚本:
4 S* {; R* C! o- I/ `1)让用户通过命令行传递一个路径;# \# ~" Q: L) o& D3 _
2)判断:0 g& h( j: Y: b/ ~! j
如果是普通文件,显示之;9 Q+ h# ]$ J% H* n5 x6 s
否则,如果是目录,显示之;
5 v  Z  m( ~- I2 x* `! \7 Y* @ 否则,如果是链接,显示之;
% S& F0 _! G% d  R4 h/ O5 {' O5 O 否则,显示无法识别

4、计算100以内所有偶数的和;

5、写一个脚本:
/ |8 `, \( X# O判断用户输入的是否为Q或者q,如果是,就显示”Quting...";否则,就显示,“Are you crazy?”;

写一个脚本:2 F/ v. T; a$ H: A5 q" U) i
1、判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其它任何键可以通过vim打开这个指定的脚本;
% l. ^- F! v! t( g2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出。

写一个脚本:. i" H" X5 V# q8 j3 E$ G
1、要求用户从键盘输入一个用户名,判断此用户是否存在,如果存在,则返回此用户的默认shell;如果不存在,提示用户不存在。
, r" G7 {% H; ?+ R2、判断完成以后不要退出脚本,而是继续提示N|n(next)用户输入其它用户名以做出下一个判断,而键入其它任意字符可以退出;

写一个脚本:
8 w0 i# z( @- A1 W6 ]( F1、向系统中添加20个用户,名字为linuxer1-linuxer20,密码分别为其用户名,要使用while循环;1 V7 z& a  U0 u& i8 l- U
2、要求:在添加每个用户之前事先判断用户是否存在,如果已经存在,则不再添加此用户;9 G( O6 w- j) }6 x  v( S& X
3、添加完成后,显示linuxer1-linuxer20每个用户名及对应的UID号码和GID号码,形如
' C" [. _) m' Y; c5 U! ]( H# B2 W8 `   stu1, UID: 1000, GID: 1000  (此步要求使用awk实现)

写一个脚本:
- n  F2 V: j, O8 S! ]/ l1、扫描192.168.0网段内的主机的在线状态,但需要提示用户输入一段IP地址范围,方式是指定起始IP和结束IP;显示结果形如:
0 j; c- v2 D) x* ~% A: c' P   The host 192.168.0.1 is UP.. m! P; m! x) E0 {7 L! x
   The host 192.168.0.2 is DOWN.( n4 ~. O6 N/ O# Q+ A
2、使用while循环实现;9 b3 n: y8 Q) z& I; Y9 i3 S
3、主机在线状态的输出结果既要显示在屏幕上,同时要求所有主机信息也保存一份至/tmp/host_state;
6 D' b" B. g; l/ X4、为/tmp/host_state文件中所有主机状态为DOWN的行的行首添加一个#(井号);
% ^* x0 y  |4 j, P" G9 \5、分别显示指定范围内所有在线的主机总数和不在线主机总数;

写一个脚本:& ~; Z# e+ n* [# {7 z3 B* l
显示当前系统上所有其VSZ段的值大于4000的进程的进程名字、进程号和VSZ值的大小;

写一个脚本:
) P5 w/ W) U7 s+ @' y查看redhat用户是否登录了系统,如果登录了,就通知当前脚本执行者“redhat is logged on.”;& m+ x& s& G; z  m3 Q; g* c
否则,就睡眠5秒钟后再次进行测试;直到其登录为止退出;1 h; |; F, R" Z0 h, s$ s
要求:使用until循环

写一个脚本:
1 @6 b6 I' D$ H: H* x: h1、提示用户选择所要设置的网卡;" k: }* {+ h% A2 Z
2、提示用户使用dhcp或者static作为选定网卡的BOOTPROTO- v- T6 q* b$ X9 p  p
  a、如果用户选择dhcp,则将其配置文件中的BOOTPROTO的值设为dhcp,而后重启此网卡;7 w# i9 l# v& k0 |3 y
  b、如果用户选择static,则将其配置文件中的BOOTPROTO的值设为static,并提示用户输入IP地址,子网掩码和网关;其中网关可以为空,但IP地址或子网掩码不能为空;设置完成后重启此网卡;
' W+ [2 _2 k: Y* X3、无论上述动态或静态设定,设定完成后将网卡IP地址设定后信息再次显示给用户;

考虑:1、如果用户没有做出任何修改之前就不想设置了,如何退出?2 ^/ M$ `3 q; F( u
      2、如果用户已经设定了一些信息,如IP地址等却又不想设置了,而使用了Ctrl+c,如何处置?   
9 A3 X1 q# b1 L. B, s) E$ _   0 q% y! y7 \9 W" a, P
写一个脚本:
* b" \# |! J$ \/ F* m$ U1、扫描192.168.0网段内的主机的在线状态,但需要提示用户输入一段IP地址范围,方式是指定起始IP和结束IP;显示结果形如:, c( x$ ]1 \) o9 l  P. O
   The host 192.168.0.1 is UP.# \$ E7 J) T% O# n) o1 ^
   The host 192.168.0.2 is DOWN.
& b8 N7 E" ^6 l9 _# D+ J; v   说明:此段要求使用函数实现;
; I" b$ G& h' v! o2、使用while循环实现;( U; k2 J/ z9 q: Y) W, c3 a7 J5 Y
3、主机在线状态的输出结果既要显示在屏幕上,同时要求所有主机信息也保存一份至/tmp/host_state;
- U7 @! ], u6 }4 X9 ~; k4、为/tmp/host_state文件中所有主机状态为DOWN的行的行首添加一个#(井号);
9 I4 ^  ]# W& q7 {9 P* Z: a- s5、分别显示指定范围内所有在线的主机总数和不在线主机总数;


, Q: E% o) k* N7 U写一个脚本:
6 w$ ?# e: {/ e* i1、提示用户输入一个用户名;8 h' H& M0 F5 h* s% n5 w
2、使用函数实现:
, S) U( p/ x4 F5 W: }& Y3 U* T   判断一个用户是否存在,用户名通过参数传递而来;+ l5 B+ _7 ]$ q) U0 h% D
   如果存在,就显示此用户的shell和UID
& c% F* }$ Y0 ?' z9 e   如果不存在,就说此用户不存在;

写一个脚本:% X  @7 L. Y8 u: H% e* ?
1、提示用户可以输入”mem"查看本机物理内存使用信息,"swap"显示虚拟内存使用信息;
  ]* k( d' \& X0 t! n2、当用户输入mem时,获取当前主机物理内存的大小,已经使用的空间及空闲空间大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;
7 |0 e  P/ ~( H7 S- B6 k. w3、当用户输入"swap"时,获取当前主机虚拟内存的大小,已经使用的空间及空闲空间的大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;
/ x7 t( V% N6 J: |3 U1 g4、其它信息则说明是错误输入;


! z/ @) p% `4 j3 ~2 {5 `" @1 g写一个脚本:
. ~5 `1 P: b2 t+ \+ ^3 c1、用一个函数实现获取当前主机物理内存的大小,已经使用的空间及空闲空间大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;
* J. A. z8 Z; R4 }" [+ s2、用一个函数实现获取当前主机虚拟内存的大小,已经使用的空间及空闲空间的大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;, L6 w& Q. O! s5 ^6 K
3、显示一个提示给用户,说明输入mem可以显示物理内存空间使用情况;输入swap可以显示虚拟内存空间使用情况;其它任意字符提示用户脚本使用方法后退出脚本;

写一个脚本:+ w# K* L; w& Z
1、定义一个函数
* ]6 d9 Y$ A! \   1)可以接受参数mem或swap;! C: |8 B, L! l# J6 m9 u' H: {
   2)当接受参数mem时获取当前主机物理内存的大小,已经使用的空间及空闲空间大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;8 V7 H3 E' q: I+ [1 n+ f
   3)当接受参数swap时获取当前主机虚拟内存的大小,已经使用的空间及空闲空间大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;5 F& ^: e- ~7 K" w% ]
3、在主程序中显示一个提示给用户,说明输入mem可以显示物理内存空间使用情况;输入swap可以显示虚拟内存空间使用情况;其它任意字符提示用户脚本使用方法后退出脚本;

写一个脚本
! M/ I* q. R6 y2 u* w1、如果/tmp/net目录存在就切换至此目录,否则就先创建此目录,而后切换进去;
) ^4 l0 E( ~7 M/ m! G2、下载ftp://192.168.0.254/pub/Files/rh033.txt至此目录中,并将名字设置为在原名字后面添加上当前日期和时间,形如:
$ O3 E3 {( e- g# b  rh033-2011-04-25-09-31-10.txt) Q8 J+ f2 q5 M8 i% R$ R/ K7 x" e! K
3、下载完成后向用户报告完成下载。

# R# J" ]. v/ g* S
写一个脚本:+ {( t* i! C! D
1、创建一个函数,能接受两个参数:
4 o) K' u( F( t/ @) _1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
. C# u" C5 H. s' {, _2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
7 n1 @$ A/ \* r: N2 F9 s3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;: y( k5 ]) c. |0 R3 ~5 m6 f  @* U( f
2、主函数:
+ C* |/ N; u8 p& ~! A1)提示用户输入要下载文件的URL和保存的目录;1 h! q, n. [, V) _, R' k9 e5 [" G
2)调用函数执行下载;如果函数返回0,则告诉用户下载成功;如果函数返回51,则告诉用户用户给定的目录不存在导致下载失败;如果函数返回52,则告诉用户下载过程失败;


& Q7 h2 C8 ~. l1 T

百度的两道shell编程面试题:
; J3 j7 J+ H) s- j1 h3 S9 P1、写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
: _7 t" T3 ?% ]6 s( [7 k+ X2、写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。


0 Z+ [0 g2 A0 ]) s) \6 }& E* c某公司Shell脚本面试题

一个文本文件内容如下:
$ \2 d7 h: l4 g* l3 Vuser1  abcd
( S1 y# f! t* i  \6 P8 t/ vuser2  g23d
0 N' r6 \8 u& ~# b5 P0 W! }user3  vgq2
  ]* {# N$ t2 S5 T+ X5 a……    ……

根据文件内容批量创建用户,第一列为用户名,第二列为对应用户的密码;


/ d9 m; Y- U4 u# x9 u/ {

写一个脚本:, s7 t' [' c/ X7 g' S7 q
1、下载文件ftp://192.168.0.254/pub/Files/access_log至/tmp目录;
6 r9 L. _% k$ T9 g+ t, Y2、分析并显示/tmp/access_log文件中位于行首的IP中出现次数最多的前5个,并说明每一个出现了多少次;
" C! Q& u( E$ v! ]3、取出/tmp/access_log文件中以http://开头,后面紧跟着一个域名或IP地址的字符串,比如:http://www.linux.com/install/images/style.css 这个串的http://www.linux.com的部分;而后显示出现次数最多的前5个;
' W1 T4 Q# [5 x1 G要求:第2、3功能各以函数的方式实现;


3 R6 Q5 J+ o( t7 {4 e运维工程师面试题:
! w# w6 `) [, t% c; S  p, o编写shell脚本获取本机的网络地址。比如:本机的ip地址是:192.168.100.2/255.255.255.0,那么它的网络地址是192.168.100.1/255.255.255.0。


8 H' V, Z) q9 N+ R卡巴斯基面试题:6 I" L0 Q# l' W- a- }
某文件内容如下:; {9 O0 L1 n+ s3 X- Z3 }
jack  huaxue   90
2 M3 a& \9 \0 R$ U- Y- O tom  huaxue    70+ l/ ^+ s* K* i3 k- c
jack  shuxue    99
7 X4 ?) _3 y' Y9 w5 Y2 V" T3 W tom  shuxue    80

要求算出jack和tom的2科的平均分,用shell实现


0 N% t. k; D' v4 U; K
  • TA的每日心情
    慵懒
    2020-6-13 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2021-1-22 11:00 | 只看该作者
    看完了,没写过一个
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-25 00:19 , Processed in 0.171875 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表