Linux Shell基础知识
- 一、Linux Shell基础概念
- 1.1 Shell定义
- 1.2 命令行提示符
- 二、初识Shell
- 2.1 Shell定义
- 2.2 登录Shell相关文件
- 2.3 Shell中的变量
- 变量类型
- 变量的引用
- 单引号\' '与双引号\" \"
- 变量的删除与检查
- 2.4 Shell中的扩展
- 大括号扩展{ }
- 其他扩展
一、Linux Shell基础概念
1.1 Shell定义
Linux Shell是用户和Linux内核之间的接口程序,为用户提供使用操作系统的接口。
从定义我们可以看出,Linux Shell本质上还是一个应用程序,这个程序最主要的功能就是解译使用者在命令行提示符中输入的指令。
1.2 命令行提示符
通常,可以通过命令行提示符来区分用户属性
-
"$"代表超级用户(root)
-
"#"表示普通用户
在bash中,可以通过修改bashrc配置文件修改命令行提示符格式,如图:
系统的bashrc文件位于/etc/bashrc,用户的路径是/home/.bashrc。
二、初识Shell
2.1 Shell定义
Shell脚本是通过编写一系列的Shell命令和控制结构,来实现自动化任务、批处理和系统管理等功能。
关于Bash Shell:Bash Shell是Bourn-Again Shell的简写,是对Bourne Shell的改进版本。后面关于Linux Shell的概念都是以Bash为平台。
2.2 登录Shell相关文件
系统级
- /etc/profile——系统级别的初始化文件,包含了系统范围的环境变量和初始化脚本,用户登录时会自动执行该文件。并设置系统的环境变量和默认配置,可以在该文件中配置"PATH"和自定义的全局的命令。
- /ect/bashrc——也是系统级别的初始化文件,但是该文件特定于Bash Shell,只有当交互式的Shell启动时才会执行该文件,不对其他非交互式的Shell生效,如sh等。
- /etc/bash.logout——系统级别的Shell清理脚本,Shell退出时执行。
用户级
- ~/.bash_profile、~.bash_login、~.profile——用户个人初始化脚本,这三个文件存在多个时按顺序查找,执行第一个,后面的不执行。该文件仅在用户登录时执行一次,用于设置用户的环境变量和启动程序。
- ~/.bashrc——用户个人的每个交互式Shell的启动脚本。每次启动新的交互式 Bash Shell 时执行,用于自定义 Bash Shell 的行为和功能。这里区分.bash_profile和.bashrc,前者是指通过用户名和密码登录到操作系统时执行一次,后者是指每次在终端打开新的交互式Bash Shell时都会执行。
- ~/.bash_logout——用户个人的登录Shell清理脚本,当登录Shell退出时执行。
2.3 Shell中的变量
变量类型
Shell中有两种类型的变量:系统变量(环境变量)和用户自定义的变量
- 系统变量,如PATH、HOSTNAME、SHELL等,可以通过env或者printenv指令查看当前系统中的所有系统变量。
环境变量本质上是操作系统提供的一种全局数据结构,用于存储和访问各种配置信息、运行时参数和系统状态等。它们可以在不同的进程之间进行传递,并在不同的应用程序中使用。操作系统将环境变量存储在其内部数据结构中,并通过API提供对这些变量的访问。应用程序可以通过读取和设置环境变量来获得操作系统所提供的配置信息和功能。 - 用户变量,即用户创建和维护的变量,用户变量的生命周期仅限于Shell会话,打开一个新的窗口或Shell重启变量不再有效。使用"=“为变量赋值,使用”$"后跟变量名表示变量的值。
变量的引用
使用"$“后跟变量名表示变量的值,引用变量时根据需要加上”"。
单引号’ '与双引号" "
当使用单引号 ’ 进行字符串扩展时,会完全保留字符串中的原始文本,不进行任何变量扩展或转义字符替换。这意味着在单引号内部,所有的特殊字符和变量都被视为普通字符,不进行解析。
相比之下,使用双引号 " 进行字符串扩展时,会进行变量扩展和部分转义字符替换。双引号内的变量会被替换为其对应的值,而某些转义字符如 \n 会被解释为相应的特殊字符(换行符)。
下面的例子体现了使用单引号和双引号的区别:
变量的删除与检查
删除,通常使用unset指令来删除一个变量
检查,即检查一个变量是否存在,一般有两种格式
- {变量名? 错误信息}
- {变量名?: 错误信息},区别是当要查找的变量不存在时,第二种方式也会打印 ? 后面的内容
2.4 Shell中的扩展
在Shell中,扩展(Expansion)是指将特定的表达式替换为相应的字符串值的过程。Shell中的扩展方式有8种,它们分别是(按扩展的先后顺序排序):大括号扩展、波浪号扩展、参数和变量扩展、命令替换、算术扩展、进程替换、单词拆分和文件名扩展。
大括号扩展{ }
大括号扩展的模式在形式上有一个可选的前缀,其后是一组包含在大括号内的用逗号分隔的字符串或是序列表达式,最后是一个可选的后缀。
例如,echo {a,b,c} 将输出 a b c。看一个较复杂的例子:
大括号扩展的问题可以分层理解,在本例中,一级只有一项,即最外层的大括号,a和i分别是其前缀和后缀;二级是最外层大括号内部的内容,有两个大括号扩展和一个单独的h。之后按顺序逐项回显。
利用大括号扩展批量创建目录或者文件:
大括号扩展中的范围表示
- {<START>…<END>}
以{a…z}为例,在大括号扩展 {a…z} 中的两个点号(…)表示范围。这种语法可以用于生成连续的字符序列.
- {<START>…<END>…<INCR>}
Bash 4.0中提供的大括号扩展的新功能,与前面的区别是这里多了一个增量INCR,用于指定每次的增量,如{a…z…5},{1…100…10}。
其他扩展
- 波浪号扩展
使用波浪号 ~ 来扩展用户主目录的路径。例如,ls ~/Documents 将列出当前用户主目录下的 “Documents” 目录。 - 命令替换
使用反引号``或者$()进行命令替换,注意区分反引号和单引号。
除此以外,还有参数和变量扩展、算术扩展、进程替换、单词拆分和文件名扩展等,此处不展开讲述。