【嵌入式八股18】Shell
一、Shell 种类
在 Linux 和 Unix 系统中,存在多种不同类型的 Shell,每种 Shell 都有其独特的特性和适用场景。常见的 Shell 类型如下:
bash | 是目前最常用的 Shell,它是 Bourne Again SHell 的缩写。bash 兼容 Bourne Shell 的语法,同时增加了许多新的特性,如命令历史记录、命令补全、作业控制等,功能强大且易于使用。 |
csh | C Shell 的缩写,其语法风格类似于 C 语言,提供了类似 C 语言的控制结构和命令历史功能,适合熟悉 C 语言的用户。 |
ksh | Korn Shell 的缩写,结合了 Bourne Shell 的优点,并增加了一些高级功能,如数组、函数等,在性能和功能上有较好的平衡。 |
zsh | Z Shell 的缩写,它在 bash 的基础上进行了扩展,提供了更强大的命令补全、语法高亮、主题定制等功能,受到很多开发者的喜爱。 |
二、基本语法
(一)定义和使用变量
在 Shell 脚本中,变量的定义和使用非常简单。以下是一个示例脚本:
#!/bin/sh
# 定义一个变量 a,并赋值为 "hello world"
a="hello world"
# 打印变量 a 的值
echo $a
# 注意:单引号会原样输出内容,不会进行变量替换
echo 'a is xiaxaiwen${a}'
(二)if - else 条件语句
if - else
语句用于根据条件执行不同的代码块。其基本语法如下:
if [ 条件判断 ]; then
# 条件为真时执行的代码
执行语句1
elif [ 其他条件判断 ]; then
# 其他条件为真时执行的代码
执行语句2
else
# 所有条件都不满足时执行的代码
执行语句3
fi
(三)[]
条件测试
在使用 []
进行条件测试时,前后一定要加空格。例如:
if [ "$a" = "hello" ]; then
echo "变量 a 的值为 hello"
fi
(四)Shell 常用命令
以下是一些常见的 Shell 命令及其说明:
echo |
将文字内容打印在屏幕上,例如 echo "Hello, World!" 。 |
ls |
列出文件列表,可使用不同的选项来控制输出格式,如 ls -l 显示详细信息。 |
wc |
用于计算文件的行数(-l )、单词数(-w )和字符数(-c ),例如 wc -l file.txt 统计文件的行数。 |
cp |
用于文件拷贝,语法为 cp 源文件 目标文件 ,如 cp file1.txt file2.txt 。 |
mv |
可以重命名文件或移动文件,例如 mv oldname.txt newname.txt 重命名文件,mv file.txt /new/directory/ 移动文件。 |
rm |
删除文件,使用时要谨慎,如 rm file.txt 删除指定文件。 |
grep |
在文件内搜索字符串,例如 grep 'searchstring' file.txt 在文件 file.txt 中搜索包含 searchstring 的行。 |
cut -b |
指定欲显示的文件内容范围,并将它们输出到标准输出设备。例如,输出每行第 5 个到第 9 个字符可使用 cut -b5-9 file.txt 。注意不要和 cat 命令混淆,这是两个完全不同的命令。 |
cat |
输出文件内容到标准输出设备(屏幕)上,如 cat file.txt 显示文件内容。 |
file |
得到文件类型,例如 file file.txt 可查看文件的类型。 |
read var |
提示用户输入,并将输入赋值给变量,例如 read name 等待用户输入姓名并赋值给 name 变量。 |
sort |
对文件中的行进行排序,如 sort file.txt 对文件 file.txt 的行进行排序。 |
uniq |
删除文本文件中重复出现的行,通常与 sort 命令结合使用,如 `sort file.txt |
expr |
进行数学运算,例如运行 expr 2 "+" 3 得到结果为 5。注意运算符需要用引号括起来。 |
find |
搜索文件,例如根据文件名搜索可使用 find . -name filename -print ,其中 . 表示当前目录。 |
tee |
将数据输出到标准输出设备(屏幕)和文件,例如 `ls |
basename |
返回不包含路径的文件名,例如 basename /bin/tux 将返回 tux 。 |
dirname |
返回文件所在路径,例如 dirname /bin/tux 将返回 /bin 。 |
head |
输出文本文件开头几行,默认输出前 10 行,可使用 -n 选项指定行数,如 head -n 5 file.txt 输出前 5 行。 |
tail |
输出文本文件末尾几行,默认输出后 10 行,同样可使用 -n 选项指定行数,如 tail -n 3 file.txt 输出后 3 行。 |
sed |
是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式进行搜索。例如,将 linuxfocus 替换为 LinuxFocus 可使用 `cat text.file |
awk |
用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用 -F 指定其他分割符。例如,`cat file.txt |
env |
显示系统预设的环境变量。 |
(五)Shell 变量类型
在 Shell 中,变量名只能包含数字、字母和下划线。以下是不同类型的 Shell 变量:
1. 局部变量
局部变量在脚本或命令中定义,仅在当前 Shell 实例中有效。例如:
#!/bin/sh
local_var="This is a local variable"
echo $local_var
2. Shell 变量特殊变量
$0 |
当前脚本的文件名。 |
$n |
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 ,第二个参数是 $2 。 |
$# |
传递给脚本或函数的参数个数。 |
$* |
传递给脚本或函数的所有参数,将所有参数视为一个整体。 |
$@ |
传递给脚本或函数的所有参数。被双引号(" " )包含时,与 $* 稍有不同,$@ 会将每个参数单独处理。 |
$? |
上个命令的退出状态,或函数的返回值。通常,返回值为 0 表示命令执行成功,非 0 值表示执行失败。 |
$$ |
当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 |
(六)条件语句
1. 操作符
!! |
表示执行上一条指令。 |
!n |
表示执行命令历史中第 n 条指令。 |
* |
匹配零个或多个字符,常用于文件通配。 |
? |
匹配一个字符,常用于文件通配。 |
2. 数值比较运算符
-eq |
相等,用于比较两个数值是否相等。 |
-ne |
不等,用于比较两个数值是否不相等。 |
-gt |
大于,用于比较一个数值是否大于另一个数值。 |
-lt |
小于,用于比较一个数值是否小于另一个数值。 |
-le |
小于等于,用于比较一个数值是否小于或等于另一个数值。 |
-ge |
大于等于,用于比较一个数值是否大于或等于另一个数值。 |
3. 字符串比较运算符
= |
相等,用于比较两个字符串是否相等。 |
!= |
不等,用于比较两个字符串是否不相等。 |
-z |
空串,用于判断一个字符串是否为空。 |
-n |
非空串,用于判断一个字符串是否不为空。 |
4. 文件比较运算符
-d |
目录,用于判断一个路径是否为目录。 |
-f |
文件,用于判断一个路径是否为文件。 |
-L |
链接,用于判断一个路径是否为符号链接。 |
-r |
可读,用于判断一个文件或目录是否可读。 |
-w |
可写,用于判断一个文件或目录是否可写。 |
-x |
可执行,用于判断一个文件或目录是否可执行。 |
-s |
文件非空,用于判断一个文件是否不为空 |
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式八股/模拟面试拷打 文章被收录于专栏
一些八股模拟拷打Point,万一有点用呢