文章目录
10.Shell基础
10.1Shell概述
- 简介
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。 - Shell的分类
● 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兼容,现在使用的Linux 就是使用Bash作为用户的基本Shell
10.2Shell脚本的执行方式
- echo输出命令
echo [选项] [输出内容]
-e
支持反斜线控制的字符转换
控制字符 | 作用 |
---|---|
\ | 输出\本身 |
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出行末的换行符。和“-n”选项一致 |
\e | ESCAPE键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\0nnn | 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数 |
-
执行脚本的三种方式:
./xxx.sh
需要先赋予执行权限chmod 755 xxx.sh
. xxx.sh
bash xxx.sh
-
注意事项
● 脚本第一行的#!/bin/Bash
不是注释,是标识下面的语句为Shell脚本
● python命令加上-u
(unbuffered)参数后会强制其标准输出也同标准错误一样不通过缓存直接打印到屏幕
●dos2unix [文件名]
可以将Windows系统的脚本格式转化为Linux系统脚本格式
10.3Bash的基本功能
10.3.1历史命令、命令别名与常用快捷键
- 历史命令
history [选项] [历史命令保存文件]
-c
清空历史命令
-w
把缓存中的历史命令写入历史命令保存文件~/.bash_history
默认保存1000条,可在环境变量配置文件/etc/profile中进行修改 - 命令别名
alias 别名='原命令'
查询命令别名alias
删除别名unalias 别名
系统别名文件/root/.bashrc ,修改后永久生效
Bash常用快捷键
10.3.2输入输出重定向
1.标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
2.输出重定向
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输 出到指定的文件或设备当中 |
标准输出重定向 | 命令 >> 文件 | 以追加的方式,把命令的 正确输出输出到指定的文 件或设备当中 |
标准错误输出重定向 | 错误命令 2>文件 | 以覆盖的方式,把命令的 错误输出输出到指定的文 件或设备当中 |
标准错误输出重定向 | 错误命令 2>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输 出和错误输出都保存到同 一个文件当中 |
正确输出和错误输出同时保存 | 命令 >> 文件 2>&1 | 以追加的方式,把正确输 出和错误输出都保存到同 一个文件当中 |
正确输出和错误输出同时保存 | 命令 &>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 &>>文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 |
正确输出和错误输出同时保存 | 命令 >> 文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中 |
3.输入重定向
- 统计输入信息
wc [选项] [文件名]
-c
统计字节数
-w
统计单词数
-l
统计行数
● 命令<文件 把文件作为命令的输入
● 命令<< 标识符
10.3.3多命令顺序执行与管道符
1.多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1 ;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系,就算第一条报错,第二条也会执行 |
&& | 命令1 && 命令2 | 逻辑与当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1 || 命令2 | 逻辑或当命令1 执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
- 磁盘文件复制
dd if=输入文件 of=输出文件 bs=字节数 count=个数
if=输入文件
指定源文件或源设备
of=输出文件
指定目标文件或目标设备
bs=字节数
指定一次输入/输出多少字节,即把这些字节看做 一个数据块
count=个数
指定输入/输出多少个数据块
2.管道符
- 命令1的正确输出作为命令2的操作对象
命令1 | 命令2
10.3.4通配符与其他特殊符号
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如:[abc]代表一定匹配 一个字符,或者是a,或者是b,或者是c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z] 代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0- 9]代表匹配一个不是数字的字符 |
其他特殊符号 | 作用 |
---|---|
‘’ | 在单引号中所有的特殊符号,如“$”和“`”(反引号)都没有特殊含义 |
“” | 在双引号中特殊符号都没有特殊含义,但是“$”、“`” 和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义 |
`` | 反引号括起来的内容是系统命令,在Bash中会先执行它。 和$()作用一样,推荐使用$(),因为反引号非常容易看错 |
$() | 和反引号作用一样,用来引用系统命令 |
# | 注释 |
$ | 用于调用变量的值 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符 |
10.4Bash的变量
10.4.1用户自定义变量
- 变量简介
变量是计算机内存的单元,其中存放的值可以改变。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。 - 变量设置规则
● 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
● Bash中变量的默认类型都是字符串型,如果要进行数值运算,则需指定变量类型为数值型。
● 变量用等号连接值,等号左右两侧不能有空格。
● 变量的值如果有空格,需要使用单引号或双引号包括。
● 在变量的值中,可以使用“\”转义符。
● 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用${变量名}包含。
● 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
● 环境变量名建议大写,便于区分。 - 变量分类
● 用户自定义变量
● 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
● 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
● 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。 - 本地变量
● 变量调用echo $name
● 查看当前系统全部变量set
● 变量删除unset nam e
10.4.2环境变量
- 简介
用户自定义变量只在当前的Shell中生效,环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,环境变量就会在所有的Shell中生效 - 设置环境变量
声明变量export 变量名=变量值
查询变量env
删除变量unset 变量名
10.4.3位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10}. |
$* | 这个变量代表命令行中所有的参数,$*把所 有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过 $@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
10.4.4预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果 这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
- 接收键盘输入
read [选项] [变量名]
-p
“提示信息”:在等待read输入时,输出提示信息
-t
秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
-n
字符数:read命令只接受指定的字符数,就会 执行
-s
隐藏输入的数据,适用于机密信息的输入
10.5Bash运算符
10.5.1数值运算与运算符
- declare声明变量类型
declare [+/-][选项] 变量名
-
给变量设定类型属性
+
取消变量的类型属性
-i
将变量声明为整数型(integer)
-x
将变量声明为环境变量
-p
显示指定变量的被声明的类型 - 数值运算
# 方法1:declare
[root@localhost ~] aa=11
[root@localhost ~] bb=22 #给变量aa和bb赋值
[root@localhost ~] declare -i cc=$aa+$bb
# 方法2:expr或let数值运算工具,注意“+”号左右两侧必须有空格
[root@localhost ~] aa=11
[root@localhost ~] bb=22
[root@localhost ~] dd=$(expr $aa + $bb)
# 方法3:“$((运算式))”或“$[运算式]” (推荐)
[root@localhost ~] aa=11
[root@localhost ~] bb=22
[root@localhost ~] ff=$(( $aa+$bb ))
[root@localhost ~] gg=$[ $aa+$bb ]
- 运算符