虽然现在Python在运维工作中被广泛使用,但是很多公司在找Linux云计算工程师的时候,还是会问到关于shell脚本的问题。它将帮助您在工作环境中自动执行许多任务。以下是面试过程中经常遇到的一些shell脚本面试题及答案:Q:1什么是shell脚本,有必要吗?答:shell脚本是一个包含一个或多个命令的文本文件。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以将这些命令全部添加到一个文本文件(Shell脚本)中来完成这些日常工作任务。Q:2什么是默认登录shell,如何更改指定用户的登录shell?答:在Linux操作系统中,“/bin/bash”是默认的登录shell,是在创建用户时指定的。使用chsh命令更改默认shell。示例如下:#chsh-s#chshlinuxtechi-s/bin/shQ:3shell脚本中可以使用哪些类型的变量?答:在shell脚本中,我们可以使用两种类型的变量:系统定义变量用户定义变量系统变量是由系统自己创建的。这些变量通常由大写字母组成,可以用“set”命令查看。用户变量由系统用户生成和定义,变量的值可以通过命令“echo$<变量名>”查看。Q:4如何将标准输出和错误输出同时重定向到同一个位置?答:有两种方法可以实现:方法一:2>&1(如#ls/usr/share/doc>out.txt2>&1)方法二:&>(如#ls/usr/share/doc&>out.txt)Q:5如何在shell脚本中嵌套if语法?答:基本语法如下:if[condition]thencommand1command2…..elseif[condition]thencommand1command2….elsecommand1command2…..fifiQ:6“的目的是什么?美元?”shell脚本中的令牌?答:在写shell脚本的时候,如果要检查前面的命令是否执行成功,用"$?"在if条件下检查上一个命令的结束状态。一个简单的例子如下:root@localhost:~#ls/usr/bin/shar/usr/bin/sharroot@localhost:~#echo$?0如果结束状态为0,表示执行了前面的命令成功地。root@localhost:~#ls/usr/bin/sharels:无法访问/usr/bin/share:没有那个文件或目录root@localhost:~#echo$?2如果结束状态不为0,则命令执行失败。Q:7如何在shell脚本中比较两个数字?答:在if-then中使用测试命令(-gt等)比较两个数,例子如下:#!/bin/bashx=10y=20if[$x-gt$y]thenecho"xisgreaterthany"elsecho"yisgreaterthanx"fiQ:8shell脚本中break命令的作用是什么?答:break命令的一个简单用法是退出正在执行的循环。我们可以在while和until循环中使用break命令来跳出循环。Q:9shell脚本中continue命令的作用是什么?答:continue命令与break命令不同。它只跳出循环的当前迭代,而不是跳出整个循环。continue命令在很多情况下很有用,比如发生错误,但我们仍想继续执行大循环。Q:10告诉我shell脚本中Case语句的语法?答:基本语法如下:casevariableinvalue1)command1command2.....thelastcommand!!值2)命令1命令2...最后一个命令;;esacQ:11shell脚本中while循环的语法?答案:与for循环一样,只要条件为真,while循环就会重复其命令块。与for循环不同,while循环迭代直到其条件不为真。基本语法:while[condition]docommand...doneQ:12如何使脚本可执行?答:使用chmod命令使脚本可执行。例子如下:#chmoda+xmyscript.shQ:13“#!/bin/bash”的作用是什么?答:#!/bin/bash是shell脚本的第一行,称为shebang行。这里的#符号称为散列,而!称为砰。意思是命令是通过/bin/bash来执行的。Q:14shell脚本中的for循环语法?答:for循环的基本语法:forvariableinlooplistdocommand1command2....lastcommanddoneQ:15如何调试shell脚本?答:使用'-x'参数(sh-xmyscript.sh)可以调试shell脚本。另一种方法是使用“-nv”参数(sh-nvmyscript.sh)。Q:16shell脚本如何比较字符串?答:测试命令可以用来比较字符串。测试命令比较字符串中的每个字符。Q:17Bourneshell(bash)中有哪些特殊变量?答:下表列出了Bourneshell为命令行设置的特殊变量。内置变量说明$0命令行中的脚本名称$1第一个命令行参数$2第二个命令行参数.........$9第九个命令行参数$#命令行参数个数$*所有命令行参数,分隔byspacesQ:18如何在shell脚本中测试一个文件?答:测试命令可以用来测试一个文件。基本用法如下:测试用法-dfilename如果文件存在并且是目录,返回true-efilename如果文件存在,返回true-ffilename如果文件存在并且是普通文件,返回true-rfilename如果文件存在且可读,返回true-sfilename返回true-wfilename如果文件存在且不为空返回true-xfilename如果文件存在且可写返回trueQ:19如果文件存在且可执行如何写shell脚本中的注释?回答:注释可以用来描述脚本可以做什么以及它是如何工作的。每个注释行都以#开头。例子如下:#!/bin/bash#这是一个commandecho“Iamloggedinas$USER”Q:20如何让shell从终端获取脚本的输入?答:读取命令可以从终端(使用键盘)读取数据。读取命令接受用户输入并将其放入您提供的变量中。例子如下:#vi/tmp/test.sh#!/bin/bashecho'Pleaseenteryourname'readnameecho“MyNameis$name”#./test.shPleaseenteryournameLinuxTechiMyNameisLinuxTechiQ:21How取消变量或取消变量赋值?答:“unset”命令用于取消变量或取消变量赋值。语法如下:#unset<变量名>Q:22如何进行算术运算?答:有两种方法可以进行算术运算:1.使用expr命令#expr5+22.使用美元符号和方括号($[expression])例如:test=$[16+4];test=$[16+4]Q:23do-while语句的基本格式是什么?答:do-while语句与while语句类似,但条件语句是检查Executethecommandbefore(LCTT译注:表示至少执行一次。)。下面是do-while语句的语法do{command}while(condition)Q:24如何在shell脚本中定义一个函数?答:函数是一个有名字的代码块。当我们定义一个代码块时,我们可以在我们的脚本中调用函数名,该块将被执行。示例如下:$diskusage(){df-h;}译注:下面是我给出的shell函数的语法,原文没有[function]函数名[()]{command;[returnint;]}原文出处:linuxtechi翻译链接:http://linux.cn/article-5311-...