【面试全纪实 | Linux 04 Shell类】请回答,你真的了解Linux吗?

🗺️博客地图

📍1.Shell 脚本是什么?

📍2.什么是默认登录 Shell ?

📍3.在 Shell 脚本中,如何写入注释?

📍4.可以在 Shell 脚本中使用哪些类型的变量?

📍5.Shell脚本中 $? 标记的用途是什么?

📍6.Bourne Shell(bash) 中有哪些特殊的变量?

📍7.如何取消变量或取消变量赋值?

📍8.Shell 脚本中 if 语法如何嵌套?

📍9.在 Shell 脚本中如何比较两个数字?

📍10.Shell 脚本中 case 语句的语法?

📍11.Shell 脚本中 for 循环语法?

📍12.Shell 脚本中 while 循环语法?

📍13.do-while 语句的基本格式?

📍14.Shell 脚本中 break 命令的作用?

📍15.Shell 脚本中 continue 命令的作用?

📍16.如何使脚本可执行?

📍17.如何调试 Shell脚本?

📍18.如何将标准输出和错误输出同时重定向到同一位置?

📍19.在 Shell 脚本中,如何测试文件?

📍20.在 Shell 脚本如何定义函数呢?

📍21.如何让 Shell 就脚本得到来自终端的输入?

📍22.如何执行算术运算?


1.Shell 脚本是什么?

一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本 ) 来完成这些日常工作任务。

2.什么是默认登录 Shell

Linux 操作系统, "/bin/bash" 是默认登录 Shell ,是在创建用户时分配的。
使用 chsh 命令可以改变默认的 Shell 。示例如下所示:
  • 格式:
chsh <用户名> -s <新shell>
  • 示例:
chsh muzi -s /bin/sh

3.在 Shell 脚本中,如何写入注释?

注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以 # 开头。例子如下:
#!/bin/bash
#这是一个shell测试脚本

拓展:shell脚本开头#!/bin/bash的作用

在 Shell 脚本中,#!/bin/bash 意思是指定脚本使用 Bash 解释器。它出现在脚本的第一行,并告诉操作系统使用 Bash 解释器来执行该脚本。

4.可以在 Shell 脚本中使用哪些类型的变量?

Shell 脚本,我们可以使用两种类型的变量:
  • 系统定义变量:系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过 set 命令查看。
  • 用户定义变量:用户变量由系统用户来生成和定义,变量的值可以通过命令 "echo $<变量名>" 查看。

5.Shell脚本中 $? 标记的用途是什么?

在写一个 Shell 脚本时,如果你想要检查前一命令是否执行成功,在 if 条件中使用 $? 可以来检查前一命令的结束状态。
  • 如果结束状态是 0 ,说明前一个命令执行成功。例如:
[root@localhost ~]# ls /usr/bin/share
[root@localhost ~]# echo $?
0
  • 如果结束状态不是0,说明命令执行失败。例如:
[root@localhost ~]# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
[root@localhost ~]# echo $?
2

6.Bourne Shell(bash) 中有哪些特殊的变量?

下面列出了 Bourne Shell 为命令行设置的特殊变量:
  • $?这个变量用来存储上一个命令的退出状态。退出状态为0表示命令成功执行,非0值表示命令执行失败。
  • $0这个变量存储当前执行的脚本或程序的名字。
  • $1$9用于获取命令行传递的参数。
  • $#这个变量存储传递给脚本的参数个数。
  • $*这个变量存储作为一个单字符串的所有参数,与位置有关。
  • $@这个变量也存储所有参数,但是它保留了每个参数的位置,它可以被双引号引用,以便于每个参数作为独立的字符串。
  • $$这个变量存储当前shell进程的PID。
  • $!这个变量存储最后一个后台运行的进程的PID。
  • $-当前Shell的标志(Flag)。
  • $_:上一个命令的最后一个参数。

7.如何取消变量或取消变量赋值?

unset 命令用于取消变量或取消变量赋值。语法如下所示:
unset <变量名>

8.Shell 脚本中 if 语法如何嵌套?

if [ 条件 ]
then
        命令1
        命令2
        ……
fi
if [ 条件 ]
then
        命令1
        命令2
        ……
else
        命令1
        命令2
        ……
fi

9. Shell 脚本中如何比较两个数字?

if-then 中使用测试命令( -gt 等),来比较两个数字。
例如:
 
#!/bin/bash
x=10
y=20

if [ $x -gt $y ]
then
    echo “x大于y”
else
    echo “y大于x”
fi

10.Shell 脚本中 case 语句的语法?

基础语法:
case 变量 in
   值1) 指令1... ;;
   值2) 指令2... ;;
   *) 默认指令... ;;
esac

示例:

#!/bin/bash
read -p "Please input a number: " i
case $i in
    1) echo "The num you input is 1" ;;
    2) echo "The num you input is 2" ;;
    3) echo "The num you input is 3" ;;
    *) echo "Please input [0-9] int." exit ;;
esac

11.Shell 脚本中 for 循环语法?

基础语法:
for 变量 in 循环列表
do
    命令1
    命令2
    ……
done

12.Shell 脚本中 while 循环语法?

  • 如同 for 循环,while 循环只要条件成立就重复它的命令块。
  • 不同于 for循环,while 循环会不断迭代,直到它的条件不为真。

基础语法:

while [ 条件 ]
do
    命令1
    命令2
    ……
done

13.do-while 语句的基本格式?

do-while 语句类似于 while 语句,但是也有不同:
  • 执行顺序‌:与while循环不同,do-while语句首先执行一次循环体内的命令,然后再检查条件是否满足。如果条件为真,则继续执行循环体内的命令;如果条件为假,则退出循环‌1。
  • 至少执行一次‌:由于do-while语句首先执行命令,因此无论条件是否满足,循环体内的命令至少会被执行一次‌

下面是用 do-while 语句的语法:

do {
    命令1
    命令2
    ……
} while [ 条件 ]

使用场景‌:
do-while语句适用于那些需要在循环开始前至少执行一次操作,并且后续操作依赖于某些条件的情况。例如,初始化变量、设置初始状态等操作可以在do-while语句的循环体中完成,然后根据条件判断是否继续执行后续操作‌。

示例:

假设我们想要打印1到10的数字,并且每次打印后检查是否达到10,可以使用do-while语句如下:

do {
    echo $i
    ((i++))
} while [ $i -lt 10 ]

这段代码会首先打印变量i的值,然后增加i的值,最后检查i是否小于10。如果小于10,则继续执行循环体内的命令;否则退出循环‌。

14.Shell 脚本中 break 命令的作用?

break 命令一个简单的用途是退出执行中的循环。我们可以在 while until 循环中使用 break 命令跳出循环。

15.Shell 脚本中 continue 命令的作用?

continue 命令不同于 break 命令,它只跳出当前循环的迭代,而不是整个循环。 continue 命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。

16.如何使脚本可执行?

使用 chmod 命令来使脚本可执行。例子如下:
chmod +x script.sh

17.如何调试 Shell脚本?

使用 -x参 数( sh -x script.sh )可以调试 Shell 脚本。
另一个种方法是使用 -nv 参数 ( sh -nv script.sh )

18.如何将标准输出和错误输出同时重定向到同一位置?

在Linux系统中:

0 表示标准输入,1表示标准输出,2表示标准错误输出。

1、使用2>&1
表示将标准错误输出重定向到标准输入
ls /usr/share/doc > out.txt 2>&1
2、使用&>

&>符号用于将标准输出(STDOUT)和标准错误输出(STDERR)重定向到同一个文件。‌

具体来说,>符号用于将标准输出重定向到文件,而2>&1表示将标准错误输出重定向到当前的标准输出(即>所指定的文件)。因此,&>结合使用可以将标准输出和标准错误输出都重定向到同一个文件中。

ls /usr/share/doc &> out.txt

19.在 Shell 脚本中,如何测试文件?

test 命令可以用来测试文件。基础用法如下表格
  • 文件测试参数
操作符描述
-b file如果file是文件并且是特殊块文件,则返回true</div>
-c file如果file是字符文件,则返回true
-d file如果file存在且是目录,则返回true
-a/-e file如果file存在,则返回true
-f file如果file存在且是常规文件,则返回true
-g file如果file的GroupId已设置,则返回true
-h/-L file如果file是一个符号链接,则返回true
-k file如果file文件存在且粘滞位已设置,则返回true
-p file如果file是命名管道(FIFO),则返回true
-r file如果file文件存在且可读,则返回true
-s file如果file文件大小不为零,则返回true
-t file如果file已打开并与终端关联,则返回true
-u file如果file的UserId已设置,则返回true
-w file如果file文件存在且可写,则返回true
-x file如果file文件存在且可执行,则返回true
file1 -ot file2如果file1比file2旧,则返回true
file1 -nt file2如果file1比file2新,则返回true
file1 -ef file2如果file1是file2的符号链接或硬链接,则返回true
  • 字符串测试参数
操作符描述
-n string如果字符串长度非零,则返回true
-z string如果字符长度为零,则返回true
string1 = string2如果两个字符相同,则返回true
string1 != string2如果两个字符不相同,则返回true
string如果字符非空,则返回true
  • 数值比较测试参数
操作符描述
num1 -eq num2如果连个数值相等,则返回true
num1 -ne num2如果连个数值不等,则返回true
num1 -gt num2如果num1大于num2,则返回true
num1 -ge num2如果num1大于或等于num2,则返回true
num1 -lt num2如果num1小于num2,则返回true
num1 -le num2如果num1小于或等于num2,则返回true
  • 组合运算符参数(用于单个或多个测试)
操作符描述
!expression一元否定运算符
expression1 -a expression2二元与运算符
expression1 -o expression2二元或运算符
\ (Expression\)必须使用反斜杠转义分组括号
  • 退出码参数
操作符描述
0返回true
1返回false
>1发生错误

20.在 Shell 脚本如何定义函数呢?

函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。
基本语法:
function_name() {
  # 函数体
  command1
  command2
  # ...
}

示例:

#!/bin/bash
 
greet() {
  echo "Hello, $1!"
}
 
# 调用函数
greet "World"

当你运行这个脚本时,它会输出:

Hello, World!

21.如何让 Shell 就脚本得到来自终端的输入?

read 命令可以读取来自终端(使用键盘)的数据。 read 命令得到用户的输入并置于你给出的变量中。
例子如下:
#编辑脚本
[root@localhost ~]# vi /tmp/test.sh
#写入以下内容
#!/bin/bash
echo ‘Please enter your name’
read name

echo “My Name is $name”

#执行脚本
[root@localhost ~]# ./test.sh
Please enter your name
[root@localhost ~]# muzi
My Name is muzi

22.如何执行算术运算?

有两种方法来执行算术运算:
1 、使用 expr 命令:
[root@localhost ~]# expr 1 + 3
4
[root@localhost ~]# expr 10 - 3
7
[root@localhost ~]# expr 10 \* 2  #注意,乘法这里要加上转义符号
20
[root@localhost ~]# expr 10 / 2
5
2 、用$和方括号( $[ 表达式 ] ):
var1=100
var2=200
var3=$[var1+var2+1]
echo $var3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子Linux

各位看官老爷,行行好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值