shell概述
shell是命令解释器,shell是解释性语言
shell脚本执行方式
转译符
控制字符 | 作用 |
---|
\\ | 输出\本身 |
\a | 输出告警音 |
\b | 退格键,向左删除 |
\c | 取消行末的换行符. |
\e | escape键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符,也就是tab键 |
\v | 垂直制表符 |
第一个脚本
#!/bin/Bash 这句话不是注释,这句话代表以下程序是shell脚本
- 执行脚本
- chmod 755 hello.sh
./hello.sh
- 通过bash调用执行脚本
bash hello.sh
- cat -A hello.sh 显示文件里面所有的内容,包括隐藏的字符
- linux里面的回车符号是
符号,window下面的回车符是M
- ** 所以windows下面的编辑的文件是不能够在linux里面执行的!
- dos2unix 文件 将windows格式的文件转换为linux格式
- ** dos2unix Tetris.sh
相反:unix2dos Tetris.sh 将linux格式转换为Windows格式文件
**Tetris.sh 这是用shell脚本写的一个俄罗斯方块,有颜色,可以在网上搜索一下,比较难!
bash的基本功能
历史命令与补全
history [选项] [历史命令保存文件]
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件
~/.bash_history
** 历史命令默认保存1000条,可在环境变量配置文件/etc/profile中修改
tab键命令补全,向上向下箭头查找历史命令的上一条,下一条!
别名与快捷键
命令别名
alias 别名='原命令'
alias 查询命令别名
unlias 删除别名
* 让别名永久生效
vi /root/.bashrc
命令的执行时顺序
- 第一顺位执行用绝对路径或者相对路径执行的命令。
- 第二顺位执行别名。
- 第三顺位执行bash内部命令。
- 第四顺位按照path环境变量的目录查找到的第一个命令。
bash常用快捷键
快捷键 | 作用 |
---|
ctrl+A | 把光标移动到命令行开头 |
Ctrl+E | 把光标移动到命令行结尾 |
Ctrl+C | 强行终止当前的命令 |
Ctrl+L | 清屏,相当于clear命令 |
Ctrl+U | 删除或者剪切光标之前的命令 |
Ctrl+K | 删除或者剪切光标之后的命令 |
Ctrl+Y | 粘贴上面两个命令剪切的内容 |
Ctrl+R | 在历史命令中搜索,会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。 |
Ctrl+D | 退出当前终端 |
Ctrl+Z | 暂停,并放入后台。 |
Ctrl+S | 暂停屏幕输出 |
Ctrl+Q | 恢复屏幕输出 |
输入输出重定向
输出重定向
类型 | 符号 | 作用 |
---|
标准输出重定向 | 命令>文件 | 覆盖的方式写入文件 |
^ | 命令>>文件 | 以追加的方式 |
标准错误输出重定向 | 错误命令 2>文件 | 以覆盖的方式 |
^ | 错误命令 2>>文件 | 以追加的方式 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出保存到同一个文件 |
^ | 命令 >> 文件 2>&1 | 以追加的方式 |
^ | 命令 &> 文件 | 以覆盖的方式 |
^ | 命令 &>> 文件 | 以追加的方式 |
^ | 命令 >>文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中 |
输入重定向
wc [选项] [文件名]
-c 统计字节数
-w 统计单词书
-l 统计行数
- 命令 < 文件
把文件作为命令的输入
- 命令 << hello
把内容之间的内容作为命令的输入
多命令顺序执行与管道符
多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|
; | 命令1 ; 命令2 | 命令顺序执行,两条命令都会执行 |
&& | 命令1 && 命令2 | 逻辑与,当命令1正确执行,命令2才会执行 |
|| | 命令1 || 命令2 | 逻辑或,当命令1正确执行,命令2不会执行 |
管道符
命令1 | 命令2
命令1的正确输出作为命令2的操作对象
通配符和其他特殊符号
通配符 | 作用 |
---|
? | 匹配一个任意字符 |
* | 匹配0个或者多个任意字符 |
[] | 匹配括号中的任意一个字符 |
[-] | 匹配中括号中任意一个字符,-代表一个范围,如:[a-z] |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。如:[^0-9]代表匹配一个不是数字的字符。 |
特殊符号
符号 | 作用 |
---|
’ ‘ | 在单引号中所有的特殊符号,都没有特殊含义 |
” “ | 在双引号中特殊符号都没有特殊含义,但是”$”,”`”,”\”是例外,分别拥有调用变量的值,引用命令,转译符的特殊含义 |
“ | 反引号括起来的内容是系统命令,在bash中会先执行它 |
$() | 和反引号一样 |
# | 以#开头的行代表注释 |
$ | 用来调用或者引用变量的值 |
\ | 转译符 |
bash变量
bash变量
用户自定义变量--变量名称和变量的值都可以任意修改
环境变量--变量值可以修改,也可以自己新建变量名称和变量值
位置参数变量--只可以修改变量值
预定义变量–只可以修改变量的值
用户自定义变量
- 字母数字下划线,不能以数字开头
- 在bash中,变量的默认类型都是字符串类型,如果要进行数值的运算,则必须制定变量类型为数值型。
变量使用
变量调用--echo $变量名或者echo "$变量名"
变量查看--set
变量删除–unset 变量名
环境变量
环境变量的设置
export 变量名=变量值--设置环境变量
export 本地变量--设置环境变量
env或者set--查看环境变量
$变量名--调用环境变量
unset 变量名--删除变量
--可在当前的bash下面再定义一个子shell(bash或者csh),这样的话两个shell就成了父子关系的shell,直接在命令行输入bash或者csh就可以开启一个子shell。
--查看当前的进程树pstree
环境变量可以在当前shell和其子shell里面生效
PATH
系统查找命令的路径
PATH="$PATH":/root/sh--PATH变量的叠加
PS1
定义系统提示符的变量:
\d :代表日期,格式为weekday month date,例如:"Mon Aug1"
\H:完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
使用方法:
PS1='自定义内容'
注意两边的单引号
示例: PS1='(\u@\H \d \t)\$'
位置参数变量
参数 | 作用
—|—
n|
0代表命令本身,
1−
9代表第一到第九个参数,十以上的数字需要使用大括号
10.
*|这个变量代表命令行中所有的参数,
∗把有的参数看成一个整体
@|这个变量代表命令行中所有的参数,
@会把每个参数区别对待
#|命令行中所有参数的个数
预定义变量
预定义变量 | 作用 |
---|
$? | 如果这个值为0,证明上一个命令正确执行;如果这个值不为0(这个值命令自己决定的,是写脚本的人自己定义好的),证明上一个命令执行不正确; |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
接受键盘输入
read [选项] [变量名]
-p "提示信息" --在等待read输入时,输出提示信息
-t 秒数 --read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数 --read命令只接受指定的字符数,就会执行
-s --隐藏输入的数据,适用于机密信息的输入,如密码
数值运算与运算符
declare声明变量类型
declare [+/-][选项] 变量名
选项:
-:给变量设定类型
+:取消变量类型
-i:将变量设定为整数型
-x:设定为环境变量
-p:显示变量被设定的类型
expr或者let数值运算工具
aa=11
bb=22
dd=$(expr $aa+$bb)
--最后dd的值为33
((运算式))或者
[运算式]
dd=$(($aa+$bb))
--dd的值为33
运算符
运算符 | 说明 | 举例 |
---|
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [
a==
b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [
a!=
b ] 返回 true。 |
环境变量配置文件
环境变量配置文件简介
source命令
source 命令--强制性的让配置文件生效也可以写成 . 配置文件
系统中主要有5类环境变量系统文件
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
其他配置文件和登录信息
注销时候生效的环境变量的配置的文件
- ~/.bash_history
其他配置文件
- ~/.bash_history
shell登录信息
本地终端欢迎信息:/etc/issue
远程终端欢迎信息:/etc/issue.net
-- 注意,转译符在这个文件中不能生效
-- 是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”,重启服务之后生效。
登录后欢迎信息:/etc/notd