天天看点

脚本面试题

脚本面试题

1)一个linux进程经历的个阶段

等待:linux进程等待资源;

运行:linux进程当前正在执行中

停止:linux进程在成功执行后或杀死进程信号后停止

停尸:该进程已经结束,但仍然留在进程表中

2)cut命令

截取文件的指定部分并打印到标准输出

cut -d 指定切割符

cut -f 组定截取的段数

[root@server3 extmail]# hostname

server3.example.com

[root@server3 extmail]# hostname| cut -d . -f 2

example

3)cmp和diff区别

Diff 为了使两个文件一样的应该做的修改

Cmp 将两个文件通字节对比,并报告一个不匹配项。

4)可以用echo命令代替ls命令吗

可以. Ls 命令可以用echo命令来代替

Ls列出目录内容,从替换的角度上讲,可以使用 echo *,两个输出结果一样

5)听说过inode吗

Inode是一个数据结构,在linux上用于目录和文件的标识,每个文件在linux上有一个独立的inode和一个唯一的inode号

对于系统来说,文件名只是inode号码便于识别的别称或者绰号,表面上,用户通过文件名,打开文件,。实际上,系统内部这个过程分成三步;首先,系统找到这个文件名对应的inode号码;其次通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

Ls -i 命令列出目录的整个文件,即文件号和inode号码

[root@server3 mnt]# ls -i 2.sh

11907 2.sh

[root@server3 mnt]# ls -i 3.sh

11965 3.sh

6)shell脚本成功执行之前,如何中断脚本的执行

Exit命令。 Exit命令被强制输出非0值,脚本会报错并退出。0表示成功执行,因此脚本终止执行前执行一个不带引号的 exit -1 命令会使脚本终止。

7)移除文件头

删除文件 sed ‘1 d’ file

了解sed awk命令

8)检查一个文件的某行长度

Sed -n ‘n p ’ file | wc -l

9)可以在linux上查看所有非打印字符

打开vi编辑器,按esc健,然后按:进入命令模式。在命令交界处输入 set list命令并执行

10)创建一个目录,该组的人能在该目录下创建或访问文件,但除了该文件创建者其他人不能删除

Chmod g+wx /mnt/

Chmod +t /mnt/

了解o+t g+s命令

11)如何向脚本传输

$* 获取当前脚本的所有参数

$# 获取当前脚本的参数的总和

$@ 这个程序的所有参数$1 $2 $3 $4 $5.., 这是激昂参数传送给其他程序的最佳方式,因为他将会保留所有內嵌在每个参数里的任何空白

$$ 获取当前shell进程的PID

$! 获取执行上一条指令的PID

$? 获取执行上一条指令的返回值

$* 将所有命令的所有参数视为单个字符串 等同于“$1 $2 $3”

$@ 将命令每个参视为单独的字符串,等同于“$1” “$2” “$3”,这是将参数传递其他程序的最佳方式,因为他会保留所有内嵌在每个参数里面的任何空白。

12)如何计算传进来的参数

$#

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

$?

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

Awk ‘{print $3}’

15)假如文件中第一个元素时FIND,如何获取第二个元素

| awk ‘{if ($$1 == ‘FIND’)} ’ print $2}’

16)如何调试bash脚本

将 -xv 参数加到 #!/bin/bash

如 #! /bin/bash -xv

17)如何写一个函数

Funnction example {

}

18)如何连接两个字符串

V1= v2= v3=${v1}${v2}

19)写出shell脚本中所有的循环

For 循环

For i in $(ls)

Do

Echo “ ”

Done

While循环

Until循环

[root@server3 mnt]# cat 6.sh

!/bin/bash

count=20

until [ $count -lt 10 ]

do

count=$(($count - 1))

done

echo "$count"

20)每个脚本的#!/bin/bash什么意思

脚本开头的第一行

一个规范的shell脚本的第一行会指出由那个程序来执行脚本的内容.

!为幻数,在执行脚本的时候,内核会根据它来确定哪个程序来解释脚本中的内容.如果脚本开头不指定解释器,那么就要用对应的解释器来执行脚本.

Bash test.sh

Python test.py

21)如何获取第十行

了解sed 用法

22)命令export作用

使变量在子shell中也可以用

23)如何在后台运行脚本

脚本后面添加&

了解后台的运行

24)chmod 500 scripts 作用

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

25)> 做什么

重定向流到文件

26)& 和&&区别

& 希望脚本后台运行时使用它

&& 当前一个脚本成功完成以后执行后面的命令

27)什么时候要在【condition】之前使用if

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

28)执行name=jono && echo 'my name is $name'的输出

[root@server3 mnt]# name=jono && echo 'my name is $name'

my name is $name

29)命令echo ${new:-variable}的输出

[root@server3 mnt]# echo ${new:-variable}

variable

了解字符串的操作

30)‘ 和 “ 区别

‘ 不希望把变量转换为值时使用它

“ 会计算所有变量的值并用值代替

单引号;所见及所得.即将单引号里内容原样输出

双引号:把双引号里面内容输出出来,如果内容中有命令,变量等,会先把命令,变量解释出来,然后输出最终内容.

31)如何在脚本中重定向标准输出和标准错误

Exec > log.txt 2>&1

了解重定向

32)如何只用echo 命令获取字符串变量的一部分

Echo ${variable ;x:y}

33)如何计算本地用户的数目

[root@server3 mnt]# wc -l /etc/passwd | cut -d " " -f 1

23

34)列出UID小于100

Awk -F: ‘$3 < 100’ /etc/passwd

35)如何打印变量最后5个字符

| echo ${variable : -5}

36)${variable:-10} 和 ${variable: -10} 前者如果之前没有给赋值则输出10,如果赋值理论则输出改变,后者输出varible最后10个字符

37)了解tr 替换命令

38)expore $variable 或 export variable 哪个正确

后者正确

39)如何列出第二个字母是a 或b 文件

ls -d ?[ab]*

40)写出0~100中3的倍数

[root@server3 mnt]# cat m7.sh

!bin/bash

for i in {0..100..3}

echo $i

41)【$a = $b】 和 【$a -eq $b】区别

前者用于字符串的比较,后者拥有数字的比较

51)= 和 ==区别

前者用于变量赋值,后者用于字符串比较。

52)如何在shell中更改标准的域分隔符为 :

| IFS=“:”

53)如何去除字符串的所有空格

| echo $string | tr -d “ ”

54)重写这个命令,将输出变量转换为复数

55)如何输出当前shell的PID

[root@server3 mnt]# echo $$

1060

56)如何在bash 中定义数组

[root@server3 mnt]# arrary=("hi" "my" "name")

57)如何打印数组的第一个元素

[root@server3 mnt]# echo ${arrary[0]}

hi

58)如何打印数组的所欧元素

[root@server3 mnt]# echo ${arrary[@]}

hi my name

59)如何输出数组的索引

[root@server3 mnt]# echo ${!arrary[@]}

0 1 2

60)如何移除数组的索引为2的元素

[root@server3 mnt]# unset arrary[2]

61)如何在数组中添加ID为333的元素

[root@server3 mnt]# arrary[333]="new_pp"

了解数组的相关知识。

上一篇: 利用