shell面试题

匿名 (未验证) 提交于 2019-12-03 00:26:01

<configuration>

</artifactItem>

<artifactItem>

</artifactItem>

<!-- </artifactItem> <groupId>some groupId</groupId> <

</configuration>


#!/bin/bash

grep -n 'artifactItem>' 2.txt |awk '{print $1}' |sed 's/://' > /tmp/line_number.txt

n=`wc -l /tmp/line_number.txt|awk '{print $1}'`

get_value(){

x=`sed -n "$i"p /tmp/value.txt|awk '{print $1}'`

}

n2=$[$n/2]

for j in `seq 1 $n2`

do

done

10.111.11.1,root,xyxyxy

10.111.11.1,root,xzxzxz

10.111.11.1,root,123456

10.111.11.1,root,xxxxxx

#!/usr/bin/expect

set passwd [lindex $argv 0]

set host [lindex $argv 1]

spawn ssh root@$host

expect {

"yes/no" { send "yes\r"; exp_continue}

"password:" { send "$passwd\r" }

}

expect "]*"

send "killall java\r"

expect "]*"

send "exit\r"

#!/bin/bash

n=`wc -l ip-pwd.ini`

for i in `seq 1 $n`

do

done


grep 'aaa$'


“*test*”


cd /home/imix

mkdir testing

cp -r testing /tmp/

rm -rf /home/imix/testing


‘{print $9}’ |grep ‘agent’


chown g+r,o+r check.sh


df -h > /tmp/disk.txt


date +%Y%m%d-%H:%M:%S




#!/bin/bash

f_judge (){

}


统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip

cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10

使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log

 tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1

iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080
实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令
tcpdump -nn tcp port 80

查看http的并发请求数与其TCP连接状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024  不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:  修改/etc/security/limits.conf  soft nofile 10240 hard nofile 10240 重启后生效
用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20
写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线
#!/bin/bash for ip in seq 1 255 do  {  ping -c 1 192.168.1.$ip > /dev/null 2>&1 if [ $? -eq 0 ]; then echo 192.168.1.$ip UP else echo 192.168.1.$ip DOWN fi }& done wait

已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张

现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令

创建文件脚本:  #!/bin/bash  for n in seq 14  do  date -s "11/0$n/14"  touch accesswww(date +%F).log  done
解决方法:
pwd/application/logs
也可以使用-exec rm -f {} \;进行删除
请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答)

cut方法1:  ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1  192.168.20.130  awk方法2:  ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'  192.168.20.130  awk多分隔符方法3:  ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'  192.168.20.130  sed方法4:  ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.ddr:(.)Bc.*$#\1#g'  192.168.20.130

1) 如何向脚本传递参数 ?

./script argument

例子: 显示文件名称脚本

./show.sh file1.txt cat show.sh #!/bin/bash echo $1

(LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。)

2) 如何在脚本中使用参数 ?

第一个参数 : $1,第二个参数 : $2

例子 : 脚本会复制文件(arg1) 到目标地址(arg2)

./copy.sh file1.txt /tmp/ cat copy.sh #!/bin/bash cp $1 $2

3) 如何计算传递进来的参数 ?

$#

4) 如何在脚本中获取脚本名称 ?

$0

5) 如何检查之前的命令是否运行成功 ?

$?

6) 如何获取文件的最后一行 ?

tail-1

7) 如何获取文件的第一行 ?

head-1

8) 如何获取一个文件每一行的第三个元素 ?

awk'{print $3}'

9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素

awk'{ if ($1 == "FIND") print $2}'

10) 如何调试 bash 脚本

-xv#!/bin/bash

例子:

11) 举例如何写一个函数 ?

function example { echo "Hello world!" }

12) 如何向连接两个字符串 ?

V1="Hello" V2="World" V3=${V1}${V2} echo $V3

输出

HelloWorld

13) 如何进行两个整数相加 ?

V1=1 V2=2 let V3=$V1+$V2 echo $V3

输出

3

据 @kashu 的意见,本题的更佳回答为:

两个整数相加,还有若干种方法实现:

A=5 B=6 echo $(($A+$B))  # 方法 2 echo $[$A+$B]    # 方法 3 expr $A + $B     # 方法 4 echo $A+$B | bc  # 方法 5 awk 'BEGIN{print '"$A"'+'"$B"'}'   # 方法 6

14) 如何检查文件系统中是否存在某个文件 ?

if [ -f /var/log/messages ] then echo "File exists" fi

15) 写出 shell 脚本中所有循环语法 ?

for 循环 :

foriin$(ls);do  echo item:$i  done

while 循环 :

#!/bin/bash COUNTER=0 while [ $COUNTER -lt 10 ]; do echo The counter is $COUNTER let COUNTER=COUNTER+1 done

until 循环 :

#!/bin/bash COUNTER=20 until [ $COUNTER -lt 10 ]; do echo COUNTER $COUNTER let COUNTER-=1 done

#!/bin/sh#!/bin/bash

shell#!/bin/bash/bin/bash。对于 python 脚本,就是#!/usr/bin/python

17) 如何获取文本文件的第 10 行 ?

head -10 file|tail -1

18) bash 脚本文件的第一个符号是什么

#

19) 命令:[ -z "" ] && echo 0 || echo 1

0

“export”

shell

21) 如何在后台运行脚本 ?

“&”

据 @kashu 的意见,更好的答案是:

nohup command&

大部分时间我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command &没了...

"chmod 500 script"

使脚本所有者拥有可执行权限。

">"

重定向输出流到文件或另一个流。

&&&

  • &
  • &&

[ condition ]“if”

当条件满足时需要运行多条命令的时候。

name=John && echo 'My name is $name'

variable

bash shell

#

echo ${new:-variable}

variable

'"

  • '
  • "

log.txt

"exec >log.txt 2>&1"

echo

echo ${variable:x:y} x - 起始位置 y - 长度

例子:

variable="My name is Petras, and I am developer." echo ${variable:11:6} # 会显示 Petras

variable="User:123:321:/home/dir",如何只用echohome_dir

echo ${variable#*:*:*:}

echo ${variable##*:}

“User”

echo ${variable%:*:*:*}

echo ${variable%%:*}

awk

awk -F: '$3<100' /etc/passwd

35) 写程序为用户计算主组数目并显示次数和组名

cat /etc/passwd|cut -d: -f4|sort|uniq -c|while read c g do { echo $c; grep :$g: /etc/group|cut -d: -f1;}|xargs -n 2 done

bash shell":"

IFS=":"

37) 如何获取变量长度 ?

${#variable}

38) 如何打印变量的最后 5 个字符 ?

echo ${variable: -5}

${variable:-10}${variable: -10}

  • ${variable:-10}
  • ${variable: -10}

echo

echo ${variable//pattern/replacement}

41) 哪个命令将命令替换为大写 ?

tr '[:lower:]' '[:upper:]'

42) 如何计算本地用户数目 ?

wc -l /etc/passwd|cut -d" " -f1 或者 cat /etc/passwd|wc -        
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!