shell常见面试题.docx

上传人:太** 文档编号:97731918 上传时间:2024-06-24 格式:DOCX 页数:10 大小:27.08KB
返回 下载 相关 举报
shell常见面试题.docx_第1页
第1页 / 共10页
shell常见面试题.docx_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《shell常见面试题.docx》由会员分享,可在线阅读,更多相关《shell常见面试题.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1、运行Shell脚本有两种方法。1)作为可执行程序将上面的代码保存为test, sh,并cd到相应目录:chmod +x . /test, sh #使脚本具有执行权限./test, sh #执行脚本2)作为解释器参数这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:/bin/sh test.sh3)当前shell环境执行,.a. sh或者source a. sh执行。2、,/和sh的使用区别1)使用执行脚本,对应的xxx.sh脚本必须要有执行权限(绿色);2)使用sh执行脚本,对应的xxx,sh没有执行权限,亦可执行;如果我直接运行./ash,首先你会查找脚本第一行是否指

2、定了解释器,如果没指定,那么就用当前系 统默认的shell(大多数linux默认是bash),如果指定了解释器,那么就将该脚本交给指定的解释器 比如a.un文件内容是这个:#!/usr/bin/pythonprint(This is Python script)那么你如果运行./a.run,结果就是输出一行文字,但是如果你运行sh a,nm,会报错。sh: #!/bin/bash可以不写。因为将a.sh作为参数传给sh (bash)命令来执行的,这时不是a.sh自 己来执行,而是被人家调用执行,所以不要执行权限,采用系统默认bash解释器。6) Shell文件包含例如,创建两个脚本,一个是被调

3、用脚本subscript, sh,内容如下:echo shell 测试一个是主文件main, sh,内容如下:#!/bin/bash./subscript.shecho $url执行脚本:$chomd +x main, sh./main, shshell测试注意:被包含脚本不需要有执行权限。2、Shell 变量Shell变量的定义、删除变量、只读变量、变量类型。1)定义变量Shell支持以下三种定义变量的方式:variable=valuevariable =valuevariable=value#遍历文件夹for sfolder in $(Is $folder)dofolderMonth=$s

4、folder:0:6echo 临时文件:if $lastMonth = $folderMonth - 上月二文件夹名 thenrm -rf $folder/$sfolderecho ” $sfolder 删除成功”elseecho ” $sfolder 保留”done22、面试题1、liunix查看磁盘空间,查看内存空间命令dh -f du free1、liunx查看日志某一行tail -n 100 filetail -n +100 file从100行开始,显示后面的head -n 100 filesed -n 510p file 显示 5-10 行2、linux查找文件命令find loca

5、te3)变量的单引号和双引号的区别#!/bin/bashurl二”中文网11websitel=中文网:$url*website2=中文网:$urlecho $websitelecho $website2运行结果:中文网:$url中文网:中文网11以单引号一包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命 令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即 不希望解析变量、命令等的场景。以双引号“ ”包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变 量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再

6、输 出的变量定义。严长生的建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单 引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的 使用场景。单引号字串中不能出现单引号(对单引号使用转义符后也不行)。双引号里可以出现转义字符4)将命令的结果赋值给变量Shell也支持将命令的执行结果赋值给变量,常见的有以下两种方式:variable=xcommandxvariable=$(command)3、特殊变量$0当前脚本的文件名$n传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1 ,第二个参数是$2。$#传递给脚本或函数的参数个

7、数。$*传递给脚本或函数的所有参数。$传递给脚本或函数的所有参数。被双引号( )包含时,与$*稍有不同,下面将会讲到。$?上个命令的退出状态,或函数的返回值。$当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID。ProcessID PID当它们被双引号包含时,$*会将所有的参数作为一个整体,以$l$2.$n的形式输出所 有参数;$会将各个参数分开,以$1$2.J$n的形式输出所有参数。(dollar)请看下面的脚本:test.sh#!/bin/bashecho File Name: $0echo First Parameter: $1echo Second Paramete

8、r: $2echo Quoted Values: $echo Quoted Values: $*echo Total Number of Parameters : $#运行结果:$./test.sh Zara AliFile Name : ./test.shFirst Parameter: ZaraSecond Parameter: AliQuoted Values: Zara AliQuoted Values: Zara AliTotal Number of Parameters : 25、Shell运算符Bash支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件 测

9、试运算符。1)算数运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如awk和expr, expr 最常用。expr是一款表达式计算工具,使用它能完成表达式的求值操作例如,两个数相加:#!/bin/bashval=expr 2 + 2echo Total value : $val注意:表达式和运算符之间要有空格,例如2+2是不对的,必须写成2 + 2。完整的表达式要被、 包含。算术运算符列表运算符说明举例+加法expr $a + $b 结果为 30o-减法expr $a - $b 结果为 10o*乘法expr $a * $b 结果为 200o/除法expr $b / $a

10、结果为 2O%取余expr $b % $a 结果为 0o赋值a二$b将把变量b的值赋给ao相等。用于比较两个数字,相同则返回true.$a = $b 返回 falseo1 = *不相等。用十比较两个数字,不相同则返回true。$a != $b 返回 trueo乘号(*)前边必须加反斜杠()才能实现乘法运算条件表达式要放在方括号之间,并且要有空格,例如$a = = $b是错误的,必须写成$a = $b 2)关系运算符关系运算符只支持数字,不支持字符串,除非字符串的值是数字。关系运算符列表运算符说明举例-eq检测两个数是否相等,相等返回trueo$a-eq $b 返回trueo-ne检测两个数是否

11、相等,不相等返回true。$a-ne $b 返回trueo-gt检测左边的数是否大于右边的,如果是,则返回trueo$a-gt $b 返回falseo-It检测左边的数是否小于右边的,如果是,则返回true。$a-It $b 返回true。-ge检测左边的数是否大等于右边的,如果是,则返回true。$a-ge $b 返回falseo-Ie检测左边的数是否小于等于右边的,如果是,则返回trueo$a-Ie $b 返回trueo3)布尔运算符布尔运算符列表运算符说明举例!非运算,表达式为true则返回false ,否则返回trueo! false 返回trueo- o或运算,有一个表达式为true

12、则返回trueo$a -It 20 -o $b -gt 100 返回trueo- a与运算,两个表达式都为true才返回trueo$a -It 20 -a $b -gt 100 返回falseo4)字符串运算符字符串运算符列表运算符说明举例=检测两个字符串是否相等,相等返回true。$a = $b 返回falseo!=检测两个字符串是否相等,不相等返回true。$a != $b 返回trueo- z检测字符串长度是否为0 ,为。返回true。-z $a 返回false。- n检测字符串长度是否为0 ,不为0返回true。-n $a 返回trueostr检测字符串是否为空,不为空返回true。

13、$a 返回true。5)文件测试运算符文件测试运算符用于检测Unix文件的各种属性。例如,变量 file 表示文件 /var/www/tutorialspoint/unix/test. shn,它的大小为 100 字节,具有rwx权限。file=,/var/mv/tutorialspoint/unix /test. sh if -r $file thenecho File has read access”elseecho File does not have read access”fi文件测试运算符列表操作符说明举例- b file检测文件是否是块设备文件,如果是,则返回true。-b$fi

14、le返回falseo- c file检测文件是否是字符设备文件,如果是,则返回true。-c$file返回false。- d file检测文件是否是目录,如果是,则返回true。-d$file返回falseo- f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。 -f $file 返回trueo- g file检测文件是否设置了 SGID位,如果是,则返回true。-g$file返回falseo- k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true.-k$file返回falseo- p file检测文件是否是具名管道,如

15、果是,则返回true。-p$file返回falseo- u file检测文件是否设置了 SUID位,如果是,则返回true。-u$file返回falseo- r file检测文件是否可读,如果是,则返回true。-r$file返回trueo-w检测文件是否可写,如果是,则返回trueo -w $file 返回trueofile- x file检测文件是否可执行,如果是,则返回true。-x$file返回trueo- s file检测文件是否为空(文件大小是否大于0 ),不为空返回true。-s$file返回true。- e file检测文件(包括目录)是否存在,如果存在,则返回true。-e$

16、file返回true11、if else 语句Shell有三种if . else语句:if . fi 语句;if . . . else . fi 语句;if . . . elif . else . f i 语句。12、test 命令Shell中的LesL命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面 的测试。1)数值测试参数 说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真Tt小于则为真-le小于等于则为真例如:numl=100num2=100if test $numl -eq $num2thenecho The two numbers are eq

17、ual! elseecho The two numbers are not equal! Fi14 for循环 语法:for变量in列表 docommand1 command2 commandN done列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。 例子:显示主目录下以.bash开头的文件:#!/bin/bashfor FILE in $H0ME/. bash* doecho $FILEdone运行结果:/root/. bash_history/root/. bash_logout/root/. bash_profile/root/, bashrc18、Shell 函数1)定

18、义Shell函数的定义格式如下: function_name () list of commands return value )也可以在函数名前加上关键字functiono2)函数返回值可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。Shell函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示 失败。如果return其他数据,比如一个字符串,往往会得到错误提示:“numeric argument requiredo如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本 在需要的时候访问这个变量来获得函数返回值。调用

19、函数只需要给出函数名,不需要加括号。20、Shell输入输出重定向Unix命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示。 一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器。1)输出重定向命令的输出不仅可以是显示器,还可以很容易的转移向到文件,这被称为输出重定向。命令输出重定向的语法为: $ command file这样,输出到显示器的内容就可以被重定向到文件。输出重定向会覆盖文件内容,请看下面的例子:$ echo line 1 users$ cat users line 12)输入重定向和输出重定向一样,Unix命令也可以从文件获取

20、输入,语法为: command file这样,本来需要从键盘获取输入的命令会转移到文件读取内容。例如,计算users文件中的行数,可以使用下面的命令: $ wc -1 users2 users也可以将输入重定向到users文件:$ wc -1 users2注意:上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知 道从标准输入读取内容。4) Here Document EOFHere Document目前没有统一的翻译,这里暂译为”嵌入文档Here Document是Shell 中的一种特殊的重定向方式,它的基本的形式如下: command /dev/null/dev/n

21、ull是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容, 那么什么也读不到。但是/dev/null文件非常有用,将命令的输出重定向到它,会起到禁 止输出”的效果。21项目中shell1、定时建文件夹,makeDir. sh:定时任务,每天00: 01在前置机相应目录下创建当前日期文件夹。hostl=,10. xxx. xx. xx ftpuserl=xxxftppasswdl=xxx#获取当前日期及时间day =date + %Y%m%d20210501#ftp连接前置机ftp -nv FTPENDopen $hostluser $ftpuserl $ftppasswdlb

22、inaryprompt offcd /xxx/download/xxmkdir $daycd /xxx/upload/xxmkdir $daybyeFTPEND2、从前置机下载文件到应用服务器 downloadFile.sh#$1下载文件名$2本地存放文件的目录$3前置机存放文件的目录if -Z $1 thenecho “the fileName is empty! ! !/z exit fiif -Z $2 thenecho the localPath is empty!” exit fiif -Z $3 thenecho the remotePath is empty! ! ! exit

23、firemotePath=$3 hostl=,10. xxx. xx. xx ftpuseri=xxx ftppasswdl=xxx ftp -nv FTPEND open $hostluser $ftpuserl $ftppasswdl binary prompt off cd $3 led $2get. $1 bye FTPEND5、清理临时文件每月十号。* * 10 * * sh /data/xxx/xx/deleteTmpFiles. sh #!/bin/bash#删除临时文件夹 folder=/xxx/xxx/xx lastMonth= date -d 1 month ago +%Y%nf echo date+%Y%m%dif d $folder then

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁