Shell基础概念
Shell的五大基本概念
| 名称 | 作用 |
|---|---|
| 终端 | 获取用户输入、展示运算结果的硬件设备 |
| tty | teletypeWriter的简称,和终端等价,早期指电传打印机,在linux中是输入/输出环境 |
| 终端模拟器 | 关联虚拟tty的输入输出软件 |
| Shell | 处理来自终端模拟器的输入,解释执行后输出结果给终端 |
| Bash | shell的一种具体体现 |
Q:终端和终端模拟器有什么区别呢?
A:终端是硬件设备,而终端模拟器是软件程序。终端模拟器通过模拟终端的行为,提供了一个虚拟的终端环境,用户可以在其中与计算机进行交互。
Q:Shell和bash的关系
A:正如老师上课时所说:“Shell和bash的关系如同父类和子类的关系”。Shell具有多个版本,除了我们常用的bash以外,还有sh、ksh、csh、zsh等版本。
语法和命令
四种方式实现数值计算
#! /bin/bash
let total1=5*3
declare -i total2=5*3
total3=`expr 5 \* 3`
total4=$((5 * 3))
echo ${total1}
echo ${total2}
echo ${total3}
echo ${total4}
所有的输出均为15哦~
注意,let与declare两个方式中,两个运算数与运算符之间是不能有空格的,否则会报错。而expr表达式中,乘号需要通过“*”形式进行转义,且两个运算数与运算符之间需要有一个空格。
重要语法&命令大杂烩
- 除了PS1外还有PS2这个环境变量,用于表示正在等待用户输入命令的状态。在默认情况下,PS2 的值为">"。自然,也能通过对PS2进行重新赋值来改变为你想要变成的符号。
家目录=根目录:家目录的路径为/home/user(此处代表某个用户名)。在家目录的父目录/home中,系统管理员可以创建新用户的家目录,并分配给每个用户一个唯一的用户名和密码,以便他们可以登录到系统并访问自己的文件和目录。- grep命令涉及到正则表达式的用法,可参考菜鸟教程中的讲解。此外对于ls、mv等命令不能直接使用,要搭配xargs处理。
- 判断命令中的“[[”比“[”更丰富,在整型比较中支持>、<、=,在字符串比较中支持=~正则。
- source命令是在当前进程中进行,而另外两种执行脚本的方式(bash test.sh或./test.sh)都是另开一个子进程进行,且“./”方式要先通过chmod赋予权限方可执行。
- builtin命令会直接执行,非builtin命令则会用$PATH查找,然后启动子进程执行。
执行过程和原理
shell展开
| 展开类型 | 概述 | 例子 |
|---|---|---|
| 大括号展开 | 一般由前缀、一对大括号、后缀组成 | {1..5} => 1 2 3 4 5 |
| 波浪号展开 | 用于展开路径名或者用户名 | ~/foo => $HOME/foo |
| 参数展开 | 内容范围广,主要包括间接参数扩展、空参数处理等 | ${parameter:offset} |
| 命令替换 | 在子进程中执行命令,并用得到的结果替换包裹的内容 | whoami or $(whoami) |
| 数学计算 | 使用$(())包裹数学运算表达式,得到结果并替换 | echo $((1+2)) => 3 |
| 文件名展开 | 当有单词没有被引号包裹,且其中出现了“*”,“?”,and “[” 字符,则shell会去按照正则匹配的方式查找文件名进行替换,如果没找到则保持不变。 | echo * => 输入当前目录下所有目录、文件 |