首页 运维干货面试你必须懂的bash之25问!

面试你必须懂的bash之25问!

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

Bash shell 25问


一、Shell脚本是什么、它是必需的吗?

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

二、什么是默认登录shell,如何改变指定用户的登录shell?

在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示:

  • chsh <username> -s <shell>

三、可以在shell脚本中使用哪些类型的变量?

可以定义如下两种类型的变量

  • 系统定义变量
  • 用户定义变量

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

可以有两种实现方法:

  • 2>&1
  • &>

五、shell脚本中”if”语法如何嵌套?

示例如下:
if [ 条件 ] then;
    command ...
else 
    if [ 条件 ] then; 
        command...
    else 
        command...
    fi 
fi

六、shell脚本中”$?”标记的用途是什么?

“$?”可以来检查前一命令的结束状态,通常”0”表示成功,”1-255”表示运行失败

七、在shell脚本中如何比较两个数字 ?

可以使用-gt-lt`` 、-ne-eq`来进行比较。

八、shell脚本中break命令的作用 ?

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

九、shell脚本中continue命令的作用 ?

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

十、如何执行一个脚本?

通常赋予脚本执行权限或使用bash命令调用,如下所示:
  • chmod +x script.sh
  • bash script.sh

十一、脚本的基本格式?

如下格式:

#!/bin/bash
#
#auther: magedu
#description:This is scripts
脚本主体

十二、如何调试shell脚本?

通常使用bash 命令中 -x参数来执行脚本,如下格式:
  • bash -x script.sh

十三、shell脚本如何比较字符串?

如下格式:
#!/bin/bash
A="mageu"
B="magedu"

[[ "$A" == "$B" ]] && echo "字符串相同" || echo "字符串不同"

十四、bash中有哪些特殊变量?

  • $0 : 命令行中的脚本名字
  • $1..$9 : 脚本可接受的参数个数
  • $# : 命令行参数的数量
  • $* : 所有命令参数,转换为一个字符串
  • $@ :  所有命令参数,转换为一个字符串

十五、脚本中如何测试文件?

  • -d : 文件是否存在且是目录
  • -e : 文件是否存在
  • -f : 文件是否存在且是普通文件
  • -r : 文件存在且是否可读
  • -s : 文件存在且不为空
  • -w : 文件存在且可写
  • -x : 文件存在且可执行

十六、脚本中如何得到来自用户终端的输入值?

如下示例:
#!/bin/bash
#
#auther: mage team
#
read -p "Please Enter Your Chooice: " STR
echo "${STR}

十七、如何撤消变量或取消变量的值?

  • unset $VAR
  • VAR=

十八、bash中如何进行算术运算?

有如下三种方法:
  • let i++
  • expr 1 + 2
  • $[ 2 + 3]
  • $(($num1 + $num2))

十九、如何定义一个函数?

方法一:
func_name() {
    func body
    ...
}
方法二:
function func_name(){
    func body
    ...
}

二十、如何在shell脚本中使用BC计算器?

  • VAR=$(echo "options;expression" | bc)

二十一、如何查看所有的非打印字符?

如下操作步骤
  • 使用vim工具打开文本;
  • 使用ESC + : ,进入命令模式;
  • 输入set list

二十二、如何向脚本传递一个信号?

使用trap命令来获取,如下格式:
#!/bin/bash
# auther: mage team
trap 'echo "quit";exit1' INT

二十三、如何定义一个数组?

有如下方式:
  • declare -a NAME : 申明一个索引数组
  • declare -A NAME : 申明一个关联数组

二十四、如何计算一个数组的元素个数?

可以使用如下方式来引用:
  • ${#ARRAY_NAME[*]}
  • ${#ARRAY_NAME[@]}
可以在脚本中计算
#!/bin/bash
# auther : mage team
#
file_list=(`ls /www/log/access_log/`)
NUM= $[ ${#file_list[*]} - 1 ]
echo "$NUM"

二十五、如何引用一个变量?

有如下两种方式:
  • $VAR_NAME
  • ${VAR_NAME}

文章出处:运维部落

文:马哥Linux团队

本文链接:https://www.yunweipai.com/8312.html

网友评论comments

发表回复

您的电子邮箱地址不会被公开。

暂无评论

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部