Shell脚本和编程 | 青训营笔记

133 阅读2分钟

image.png


Shell基础概念

Shell的五大基本概念

名称作用
终端获取用户输入、展示运算结果的硬件设备
ttyteletypeWriter的简称,和终端等价,早期指电传打印机,在linux中是输入/输出环境
终端模拟器关联虚拟tty的输入输出软件
Shell处理来自终端模拟器的输入,解释执行后输出结果给终端
Bashshell的一种具体体现

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 * => 输入当前目录下所有目录、文件