【shell面试题】

Shell面试题汇总

一、选择
1、改变bash的提示符实际上就是改变变量()
A:HOME
B:PWD
C:PS1
D:PS2

2、 在shell脚本中,用来读取文件内各个域的内容并将其赋值给shell变量的命令是______
A:fold
B:join
C:tr
D:read

3、 从后台启动进程,应在命令的结尾加上符号()
A:&
B:@
C:#
D:$

4、 不是shell具有的功能和特点是()
A:管道
B:输入输出重定向
C:执行后台进程
D:处理程序命令

5、 退出交互模式的shell,应键入()
A:
B:^q
C:exit
D:quit

6、 shell不仅仅是用户命令解释器,同时一种强大的编程语言,linux缺省的shell是
A:bash
B:ruby
C:PHP
D:perl

7、 下列变量名中有效的shell变量名是:______
A:-2-time
B:_2$3
C:trust_no_1
D:2004file

8、 下列对shell变量FRUTT操作,正确的是______
A:为变量赋值:$FRUTT=apple
B:显示变量的值:fruit=apple
C:显示变量的值:echo $FRUTT
D:判断变量是否有值:[ -f --$FRUTT || ]

9、在shell编程中关于$2的描述正确的是
A:程序后携带了两个位数参数
B:宏替换
C:程序后面携带的第二个位置参数
D:携带位置参数的个数

10、在shell环境下想把‘gyyx’值赋给变量company,下面哪个是正确的:
A:company = gyyx
B:$company=gyyx
C:company='gyyx’
D:company=gyyx

11、下面sed删除行,下面哪个脚本是错误的是
A:sed -e ‘/man/d’ filename
B:sed -e ‘1,3d’ filename
C:sed -e ‘1,/man/d’ filename
D:sed -e ‘/man/3d’ filename

12、shell中如何跳出当前循环继续之后的循环
A:break
B:continue
C:exit
D:kill

13、shell脚本中的注释符
A:#
B://
C:/**/
D:" "

14、采用bash执行shell脚本时加上哪个参数可以跟踪执行脚本过程
A:-x
B:-u
C:-f
D:-p

15、以下命令执行后,结果为()
Var1=abcdedf
Var2=abcded
echo “$var1” |grep -q “$var2” && echo “yes” ||echo “no”

A:无结果
B:语法错误
C:yes
D:no

16、在shell比较运算符中,数值测试“等于则为真”的是()
A:-ne
B:-ge
C:-eq
D:-le

二、填空
1、在shell编程中,如果要访问变量值,可以变量前加一个 $ 符号
2、请说出以下符号在bash shell中的意义
$0 $n $# $? $* $$ ${#aa}

$0 脚本程序名
$n 传递给脚本的第n个脚本参数
$# 脚本参数的个数
$? 脚本执行结果
$* 脚本参数列表
$$ 当前进程的pid
$! 上一个后台进程的pid
${
     #aa} 脚本中变量的长度

3、编写shell程序之前必须赋予该脚本__执行权限___
4、Linux系统shell脚本第一行需写_#!/bin/bash代表什么意义__指定脚本解释器___
5、编写shell脚本时注释符是_____#____
6、shell命令“sed -i s/\r/ /g test.txt”实现的是___将test.txt文件中换行符删除____

三、简答
1、统计/var/log下文件的个数。

ls /var/log | wc -l

2、如何将F1文件的运行结果输出到F2.txt里?

管道加重定向(>>)到F2.txt

3、写一个脚本实现判断192.168.1.0/24 网络里,当前在线的ip有哪些,能ping通则认为在哪

#!/bin/bash
for i in {
     1..255}
do
	ping -c 2 192.168.1.$i &>/dev/null
	if [ $? -eq 0 ]
	then
		echo "192.168.131.$i is up"
	else
		echo "192.168.131.$i is down"
	fi
done

4、根据以下信息:
IP_Address MAC_Address Interface Static
10.66.10.250 80:71:7A:33:CA:A7 br on
10.66.10.249 5C:50:15:7F:3B:F5 br on
将以上文件名称test.txt文件中IP_Address,MAC_Address, Interface三项下的内容取出来,值以“:”分割,并呈格式显示出来。注:
10.66.10.250:80:71:7A:33:CA:A7:br
10.66.10.249:5C:50:15:7F:3B:F5:br

awk 'BEGIN {OFS=":"} NR!=1 {print $1,$2,$3}' test.txt

5、在shell中变量的赋值有四种方法,其中采用name=jfedu.net的方法称:
直接赋值 使用read命令 使用命令行传参 使用命令输出

变量的赋值四种方法:
1.直接赋值:变量名=变量值
2.使用read命令:read -p "请输入:" 变量名
3.使用命令行传参:变量名=$1 变量名=$另一个变量名
4.使用命令输出:变量名=`命令`

6、编写一个脚本,5分钟检查一次日志,发现有暴力SSH破解现象的,提取此类IP地址,并去重,并按降序排序。
要求:同一个IP暴力破解超过10次,自动屏蔽IP地址,指定办公室IP地址(192.168.100.100)为可信任IP地址,不受屏蔽规则限制,以下为日志格式:
日志样式:
May 4 03:43:07 tz-monitor sshd{14003}: Failed password for root from 124.232.135.84 port 25251 ssh2
Myy 4 03:43:07 tz-monitor sshd{14082}: invalid user postgres from 124.232.135.84

vim pojie.sh
#!/bin/bash
awk '/Failed password/{count[$(NF-3)]++}END{for (ip in count) if(count[ip]>=10){print count[ip],ip}}' /var/log/secure > /tmp/count_ip.txt
while read line
do
  IP=$(echo $line |awk '{print $2}')
  if [ "$IP" != "192.168.100.100" ];then
    if ! grep -w $IP /tmp/drop_ip.txt &> /dev/null;then
      iptables -I INPUT -s $IP -j DROP
      echo $IP >> /tmp/drop_ip.txt
    fi
  fi
done < /tmp/count_ip.txt

crontab -e
*/5 * * * * /bin/bash /srcipt/pojie.sh &>/dev/null 

7、检查IP地址合规,请用shell编写代码,列出不以199或200开头的IP地址,如199.x.x.x 或200.x.x.x
Interface Physical Protocol IP Adderss
Eth1/0/1 up up 199.11.250.1
Eth1/0/2 up up 200.11.250.5
Loop0 up up(s) 199.11.250.1
Vlan1 *down down unassigned
Vlan500 down down 139.100.1.157
Vlan900 up up 140.11.250.41

awk '$4!~"^199|200" {print $4}' test.txt

8、处理以下文件内容,将域名提取并进行计数排序,如处理:
http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html

得到如下结果:
域名的出现次数 域名
3 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com

awk -F "/" '{name[$3]++} END {for (i in name) {print name[i],i}}' 2.txt | sort -nr

9、在单台服务器Linux操作系统环境下,写一行命令,将所有该机器的所有以“.log.bak“为后缀的文件,打包压缩并上传到ftp上,FTP地址为123.234.25.130的/home/bak文件夹

find / -name "*.log.bak" -type f -exec tar -czf log_baks.tar.gz {
     } \; | ftp log_baks.tar.gz 123.234.25.130:/home/bak 

10、Linux脚本:现在要删除本机中若干文件,/root/file.list中记录了这些文件的绝对路径,请用脚本实现。/root/file.list内容范例:/tmp/1.file

#!/bin/bash
for i in `cat /root/file.list`
do
	rm -rf $i
done
或者
while read line
do
	rm -rf $line
done < /root/file.list

11、创建一个函数,能接受两个参数;
(1) 第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存位置;
(2) 如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则函数返回一个51的错误值给调用脚本
(3) 如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功,如果成功,则返回0给调用脚本,否则,返回52给调用脚本;

#!/bin/bash
f() {
     
		if [ -d $2 ]
		then
			wget -O $2 $1 
			if [ $? -eq 0 ]
			then
				return 0
			else
				return 52
			fi
		else
			read -p "您输入的目录不存在,是否创建该目录,请输入yes/no:" value
			if [ $value = "yes" ]
			then
				mkdir -p $2
				f $1 $2
		 	else
		 		return 51
		 	fi
		 fi
	
}
read -p "请输入下载的文件路径:" file_path
read -p "请输入目录路径:" dir_path
f $file_path $dir_path

12、从一个网站上面分别下载100个图片,他们的网址是 http://download.linekong.com/img/1.png 、http://download.linekong.com/img/2.png … http://download.linekong.com/img/100.png 批量下载100个图片文件,并找出大于500kb的文件

#!/bin/bash
url="http://download.linekong.com/img/"
for i in {
     1..100}
do
	mkdir /images
	wget -O /images $url${
     i}.png 
done
find /images -size +500k -type f -name "*.png"	 

13、一个文本文件info.txt每行都是以逗号分隔,其中第二列都是数字,请对该文件按照第二列从小到大排列。
aa,101
bb,302
cc,222
dd,44

sort -t "," -k 2 -n info.txt

14、根据要求写出linux命令
a.显示当前目录的内容
b.以详细格式显示test用户的家目录内容,包含隐藏文件
c.进入根目录
d.显示/etc/passwd文本文件的内容
e.显示/etc/passwd文件的后十行内容

ls 
ls -lia /home/test
cd /
cat /etc/passwd
tail -10 /etc/passwd

15、用netstat统计系统当前tcp连接的各种状态的连接数

netstat -ant |awk '$1~/^tcp$/{count[$6]++}END{for(state in count)print count[state],state}'

16、写一个脚本,实现判断10.10.10.0/24网络里,当前在线的ip有哪些。注:能ping通则认为在线。

#!/bin/bash
for i in {
     1.255}
do
	ping -c 2 10.10.10.$i
	if [ $? -eq 0 ]
	then
		echo "10.10.10.$i is up"
	else
		echo "10.10.10.$i is down"
	fi
done

17、写一个脚本
列出如下菜单给用户
disk) show disks info;
mem) show memory info;
cpu) show cpu info;
*) quit;
提示用户给出自己的选择,而后显示对应其选择的相应系统信息

#!/bin/bash
while true;do
 cat <<-'EOF'
  disk) show disks info;
  mem) show memory info;
  cpu) show cpu info;
  *) quit;
 EOF
 read -p '请输入要查看的信息: ' option
 case $option in
 disk)
  df -h
  ;;
 mem)
  free -h
  ;;
 cpu)
  lscpu
  ;;
 *)
  exit 
 esac
done

18、说明以下shell 代码,所完成的功能
n=1
while [ $n -lt 1000 ]
do
cd /root/perl_test/testdir
touch $n.txt
n=expr $n + 1
done

/root/perl_test/testdir目录下创建999个txt文件

19、用脚本语言实现如下功能
如果在/home/pushmail目录下不存在leadtone目录,则创建该目录,并将/var/sync/bin目录下的所有文件拷贝到leadtone目承下,
但是不能够拷贝文件长度大于1M的文件。

20、Centos操作系统历史命令记录中,执行次数最多的5条
21、用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下
22、写一个脚本,实现批量添加20个用户,用户名为user01-20,密码user后面跟5个随机字符
23、统计nginx访问日志,找出访问次数前10的IP
24、找出在文件a中但不在文件b中的内容,用命令后编写脚本实现
25、请写出下列shell脚本:使用for循环在/opt目录下通过随机小写10个字母加固定字符串test批量创建10个html文件,创建完成后将test全部改为test_done(for循环实现),并且html大写
26、6shell脚本编程:求100以内的质数
27、创建一个shell脚本,它从用户那里接收10个数,并显示已输入的最大的数
	#!/bin/bash
	max=0
	read -a num -p "请输入10个数字: "
	for i in ${num[*]};do
	  if ((i>max));then
		max=$i
	  fi
	done
	echo $max
28、设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。shell陈旭fileback存放在/usr/bin目录下
29、找出系统中父进程号为105的所有进程,并将其结束
	ps -ef |awk '$3==105{print "kill "$2}'|bash


30、请用自己熟悉的脚本语言,快速替换notice服务下config.properties配置文件中所有变量值为jdbc.username,jdbc.password的值为blue和pass1234 说明:配置文件的目录/opt/blue/notice/conf/config.properties
	config.properties文件格式如下:
	zookeeper.server=127.0.0.1:2181
	jdbc.driver=com.mysql.jdbc.Driver
	jdbc.url=jdbc:mysql://lx-db:3306/gudong
	jdbc.username=lanxin
	jdbc.password=OnLIDX5

31、判断数字大于500则执行big.sh 小于等于500则退出脚本,并输出报错信息

32、请编写一个可递归创建3级hash目录的shell脚本,hash目录名分别为 a b c d e f 0 1 2 3 4 5 6 7 8 9 (请用bash实现)
33、请在linux下写个bash shell 程序,目的如下:查找/opt/mp3目录下所有mp3后缀的文件,然后计算下每个md5值,文件名跟md5值写入新的文件mp3-md5.txt文件

你可能感兴趣的:(linux面试题)