本次试题全部都是写脚本,一共有十道题,说是面试,其实都是基础的东西,enjoy it~
1、编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下。
1
2
3
4
5
6
7
8
9
10
11
|
#Author:Name
#E-mail:E-mail Address
#Description:Move some files #写程序的时候加上姓名,联系方式和描述是一个好习惯。
#!/bin/bash
ls
-l|
awk
'$5>10240 {print $9}'
>name.txt
#先把大于10K的文件名都保存到name.txt的文件
for
filename
in
$(
cat
name.txt)
#for循环,注意$()
do
mv
$filename
/tmp
echo
$filename
"is ok."
done
ls
/tmp
|
【评析】第一套里的第十题跟这道题是一样的,bash是可以使用find语句的,那样写比较省事。而且要注意像答案那么写的话,文件夹也是有可能被选中,但是不用担心,文件夹不会被mv,会提示“略过目录”。
2、编写shell脚本获取本机的网络地址。
1
2
3
4
5
6
7
8
|
#Auther:ChrisChan
#E-mail:chenx1242@163.com
#Description:Check IP address and Netmask
#!/bin/bash
IP=$(
ifconfig
eth0|
grep
inet|
head
-1|
cut
-d : -f 2|
sed
's/Bcast//g'
)
echo
"这台机器的IP地址是"
$IP
NETMASK=$(
ifconfig
eth0|
grep
inet|
head
-1|
cut
-d : -f 3|
sed
's/Mask//g'
)
echo
"这台机器的网关是"
$NETMASK
|
【评析】一条命令,用三个方法去不断的缩小范围,直到最后确定那几个数字。
3、用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。
1
2
3
4
5
6
7
8
9
10
11
12
|
#Auther:ChrisChan
#E-mail:chenx1242@163.com
#Description:Jurde a file is a c-file or not
#!/bin/bash
read
-t 10 -p
"请输入一个文件名:"
Fname
if
[ -c $Fname ]
then
cp
$Fname
/dev
else
echo
"WRONG!"
exit
88
fi
|
【评析】给一个变量赋值有两种方法,一种就是上面列出的read -p的形式,还有一种是这样的
4.请为下列shell程序添加注释,并说明程序的功能和调用方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/bin/sh #这是一个bash语言
# /etc/rc.d/rc.httpd #启动Apache
# Start/stop/restart the Apache web server. #启动/停止/重启Apache
# To make Apache start automatically at boot, make thisfile executable: chmod 755 /etc/rc.d/rc.httpd #若要apache开机自启动,就要让rc.httpd这个文件有755
case
"$1"
in
'start'
)
#若第一个变量是start
/usr/sbin/apachectl
start ;;
#apache就启动
'stop'
)
#若第一个变量是stop
/usr/sbin/apachectl
stop ;;
#apache就停止
'restart'
)
#若第一个变量是restart
/usr/sbin/apachectl
restart ;;
#apache就重启
*)
#若第一个变量不是上面的任意一个
echo
"usage $0 start|stop|restart"
;;
#提示操作人员
esac
#结构结束,这是case的反写
|
功能就是控制apache程序的,调用方法就是启动/停止/关闭
5、设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
开头略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
!
#/bin/sh #解释器是sh
groupadd class1
#建立一个群组
i=1
while
[ i -
le
30 ]
do
if
[i -
le
9 ]
then
Username=std0$i
else
Username=std$i
fi
Useradd $Username
mkdir
/home/
$Username
chown
-R $Username
/home/
$Username
#-R是改变用户和群组
chgrp
-R class1
/home/
$Username
let
i =i+1
#我喜欢用这个叠加,简单粗暴还好用但是要注意格式。
done
|
6、编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。
#开头省略
1
2
3
4
5
6
7
|
#!/bin/bash
i=1
while
[ $i -
le
50 ]
do
userdel -r stud$i
#这里使用stud${i}
let
i=i+1
done
|
7.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
(2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
(3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
(4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc);
(5)在早晨8:00前开机后启动。
#crontab -e先
(1)50 16 * * * rm -rf /abc/*
(2)1 8-18/1 * * * cut /xyz/x1 -f 1 >>/backup/bak01.txt
(3)50 17 * * 1 tar zcvf backup.tar.gz /data
(4)55 17 * * * umount /dev/hdc
(5)这个需要在root用户登录的前提下操作, 而且这题出的有问题,不知道要启动什么。
【评析】每个用户都会生成一个自己的crontab文件,这个文件一般位于/var/spool/cron,这个文件里的计划任务是专门针对于root这个用户的,如果使用#crontab -r那就会删除掉当前用户的crontab的文件。
8、有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
crontab -e
0 0 * * 0 cp /user/backup /tmp
【评析】五个*里最后一个*的取值范围是0~7,其中0和7都是代表星期天,可以写成sun,/etc/crontab的文档原话是这么写的:day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
9、设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
1
2
3
4
5
6
7
8
9
|
#开头略
#!/bin/bash
i=1
while
[ i -
le
50 ]
do
mkdir
-p -m 764
/userdata/user
$i
echo
"第"
$i
"个目录已经生成,权限是764."
let
i=i+1
done
|
【评析】mkdir -p是递归生成目录,再加上-m 就是在生成目录的时候直接赋予权限。
如果要是使用mkdir下生成一个树形的目录,mkdir -vp BBB/{CCC/,EEE/{FFF/,GGG/},KKK/,III/{OOO/,PPP/}},这样生成了一个树形文件。
如果只是在/userdata/下生成user1~user50的文件,其实不用那么费劲,#cd /userdata/ && touch user{1..50}即可。
10、设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。
做一个脚本先
#cd /usr/bin
#vim fileback.sh
1
2
3
4
5
|
#!/bin/bash
YY=$(
date
+ %y )
MM=$(
date
+ %m )
DD=$(
date
+ %d )
#注意格式,注意格式~
tar
-zcvf
/root/bak/
$YY$MM$DD
/etc/
*
#将/etc目录下的所有文件都打包压缩成etc.bak文件
|
保存之后,添加计划任务
#crontab -e
1 1 1 * * sh /usr/bin/fileback.sh
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1743037