1.shell概述
1.1shell是什么
shell是一个命令行解释器,她为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序
shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用Linux系统命令
1.2shell的分类
*Bourne Shell:从1979起Unix就开始使用
Bourne Shell,Bourne Shell的主文件名为sh
*C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
*Shell的两种主要语法类型有BOUrne和C,这两种语法不兼容。Bourne家族主要包括sh、 ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh
*Bash:Bash与sh兼容,现在使用的Liunx就是使用Bash作为用户的基本Shell
1.3Liunx支持的shell
查看/etc/shells文件
2.shell脚本的执行方式
2.1echo输出命令
语法:echo [选项] [输出内容]
选项:
-e 支持反斜杠控制的字符转换
例:
2.2第一个脚本
2.3脚本执行
*赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
*通过Bash调用执行脚本
bash hello.sh
3.bash的基本功能
3.1历史命令与命令补全
3.1.1历史命令
语法:history [选项] [历史命令保存文件]
选项:
-c 清空历史命令
-w 把缓存的历史命令写入命令保存文件 ~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
3.1.2历史命令的调用
*使用上、下箭头调用以前的历史命令
8使用“!n”重复执行第n条历史命令
*使用“!!”重复执行上一条命令
*使用“!字符串”重复执行最后一条以该字符串开头的命令
3.1.3命令与文件补全
在bash中,命令与文件补全,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全
3.2别名与快捷键
3.2.1命令别名
语法:alias 别名='原命令'
查看别名:alias
3.2.2命令执行时的顺序
*1.执行用绝对路径或相对路径执行的命令
*2.执行别名
*3.执行bash的内部命令
*4.执行按照¥PATH环境变量定义的目录查找顺序找到的第一个命令
3.2.3让别名永久生效
修改/root/.bashrc的文件内容
3.2.4删除别名
语法:unalias 别名
3.2.5bash常用快捷键
3.3输入、输出重定向
输出重定向
类型 | 符号 | 作用 |
标准输出重定向 | 命令 > 文件 | 以覆盖方式 |
命令 > 文件 | 以追加方式 | |
标准错误输出重定向 | 错误命令 2> 文件 | 以覆盖方式 |
错误命令 2>> 文件 | 以追加方式 |
正确输出和错误输 出同时保存 |
命令 > 文件 2>&1 | 以覆盖方式 |
命令 >> 文件 2>&1 | 以追加方式 | |
命令 &> 文件 | 以覆盖方式 | |
命令 &>> 文件 | 以追加方式 | |
命令 >> 文件1 2>> 文件2 |
把正确的输出追加到文件1中, 把错误的输出追加到文件2中 |
输入重定向
语法:命令 < 文件
3.4多命令顺序执行与管道符
多命令顺序执行
多命令执行符 | 格式 | 作用 |
; | 命令1;命令2 |
多个命令顺序执行,命令之间没 有任何逻辑联系 |
&& | 命令1&&命令2 |
逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1&&命令2 |
逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
管道符
语法:命令1 | 命令2 //命令1的正确输出作为命令2的操作对象
3.5通配符与其他特殊符号
通配符 | 作用 |
? | 匹配一个任意字符 |
* | 匹配0个或任意多个字符 |
[] | 匹配中括号中任意一个字符 |
[-] | 匹配中括号中任意一个字符,-代表一个范围 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符 |
bash中其他特殊字符
符号 | 作 用 |
' ' | 单引号。在单引号中所有的特殊符号都没有特殊含义 |
" " |
双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”、“\”是 例外,拥有“调用变量值”、“引用命令”、“转义符”的特殊含义 |
` ` |
反引号。反引号括起来的内容是系统命令,在bash中会先执行它。 和$()作用一样 |
$() | 和反引号作用一样,用来引用系统命令 |
# | 在shell脚本中,#开头的行代表注释 |
$ |
用于调用变量的值,如需要调用变量name的值时,需要用$name 的方式得到变量的值 |
\ | 转移符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。 |
4.bash变量
什么是变量
变量是计算机内存的单元,其中存放的值可以改变。当shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息
4.1用户自定义变量
语法:变量名=变量值
注意:如果变量值中含有空格就要用""
变量的调用:$变量名
变量的查看:set
变量的删除:unset 变量名
4.2环境变量
4.2.1环境变量是什么
用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效
4.2.2设置环境变量
export 变量名=变量值
查看环境变量:env
删除环境变量:unset 变量名
4.2.3系统常见环境变量
PATH :系统查找命令路径
PATH变量叠加:PASH="$PATH":/root/sh
4.3位置参数变量
位置参数变量 | 作 用 |
$n | n为数字,$0代表命令本身,$1-$9代表第一个到第九个参数,十以上的参数需要用大括号包含,如${10} |
$* | 这个变量代表命令行中所有的参数,$*把所欲的参数看成一个整体 |
$@ | 这个变量也代表命令行中的所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行所有参数的个数 |
4.4预定义变量
4.4.1预定义变量
预定义变量 | 作 用 |
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
4.4.2接收键盘输入
语法:read [选项] [变量名]
选项:
-p “提示信息” 在等待read输入时,输出提示信息
-t 秒数 read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数 read命令只接受指定的字符数,就会执行
-s 隐藏输入的数据,适用于机密信息的输入