linux shell(2)
一、什么是Linux Shell?
概念:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在Linux内核与用户之间的解释器程序,现在Linux通常指/bin/bash解释器来负责向内核翻译以及传达用户/程序指令,shell相当于操作系统的“外壳”
二、Shell的使用方式
- 交互式---命令行
--人工干预。智能化程度高
--逐条解释执行,效率底
- 非交互式---脚本
需要提前设计,智能化难度大
批量执行,效率高
方便在后台静悄悄地运行
三、bash的基本功能
3.1历史命令
linux可以使用history命令查看历史命令,历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改(HISTSIZE属性)
history命令使用方法:
history 选项 文件名
-c | 清空历史命令 |
-w | 将缓存中的历史命令写入文件中 |
上下箭头键 | 查看以前的命令 |
!n | 重复执行第n条命令 |
!! | 重复执行上一条命令 |
! 字符串 | 重复执行最后一条以该字符串开头的命令 |
3.2命令补全
使用tab键可以补全命令或文件名
命令别名
alias | 设置命令别名 |
unalias | 取消命令别名 |
3.3管道
管道符“|”在用于将linux命令行前一个命令的输出作为后一个命令的输入
3.4输入输出重定向
重定向命令列表如下:
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
3.5命令行编辑
3.6命令行展开
3.7通配符
通配符 | 作用 |
? | 匹配任意单个字符 |
* | 匹配0个或多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符,例如:[abc] 代表一定匹配一个字符, 或者是a,或者是b,或者是c. |
[m-n] | 匹配中括号中任意一个字符,- 代表一个范围。例如:[a-z]代表 匹配一个小写字母 |
[^] | 逻辑非,表示匹配不上中括号内的一个字符,例如:[^0-9]代表 匹配一个不上数字的字符。 |
Bash中其它特殊符号
符号 | 作用 |
'' | 单引号;在单引号中所有的特殊符号,如"$"和“ · ”(反引号)都没有特殊含义 |
"" | 双引号;在双引号中特殊符号都没有特殊含义,但是“$”和“ · ” 和“ \ ”是例外, 拥有“调用变量的值”、“”引用命令“和”转义符“的特殊含义 |
`` | 反引号;反引号括起来的命令是系统命令,在Bash中会先执行它。和$()作用一样, 不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号命令一样,用来引用系统命令 |
# | 在Shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要使用$name的方式得到变量的值。 |
\ | 转义符,跟在 \ 之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出”$“符号,而不是 当做是变量引用 |
3.8 Bash变量和环境配置文件
3.8.1 Bash变量分类
1)用户自定义变量:只在当前的shell生效
2)环境变量:主要保存的是和系统操作环境相关的数据
3)位置参数变量:主要用来向脚本当中传递参数或数据,变量名不能自定义,变量作用书固定的
4)预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
3.8.2 Bash变量定义规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头
2)在Bash中,变量的默认类型都是字符串型,如果需要进行数值计算,则必须指定变量类型为数值型
3)变量用等号连接值,等号左右两侧不能有空格
4)变量的值如果有空格,需要使用单引号或双引号包括
5)在变量的值中,可以使用“\”转义符
6)如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要使用双引号包含“$变量名”或用${变量名}包含
7)如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
8)环境变量名建议大写,便于区分
3.8.3 Bash变量定义方法
- 本地变量
变量名= 变量值
- 环境变量
export 变量名=变量值
3.8.4 查看与添加系统变量
1)系统查找命令路径
echo $PATH
2)PATH变量叠加
PATH=”$PATH”:/root/sh
3.8.5 环境变量的配置文件
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bashshell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bashshell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_logout:当每次退出系统(退出bashshell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
~/.bash_profile是交互式、login 方式进入 bash 运行的
~/.bashrc是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
.bash_profile文件在通过控制台(或远程登录, 比如ssh)登录(login)系统的时候被执行的shell脚本.
而 .bashrc则是在打开虚拟终端的时候才会起作用,比如在GNOME,KDE中执行rxvt.
通俗的理解
~/.bash_profile是交互式、login 方式进入 bash 运行的
~/.bashrc是交互式 non-login 方式进入 bash 运行的
3.9编程