Shell 是一个命令解释器
和内核进行交互的界面
Shell还是一个功能强大的编程语言
再Shell中可以直接调用linux的编程命令
Shell 的起源
Bourne Shell 1979 Unix就开始使用 也就是现在的sh
C Shell
Bash :Bash与sh兼容,现在使用的Linux就是使用Bash作为用户基本的Shell
.sh 文件执行方式
1.给予权限 chmod 然后运行
2.bash + 文件运行
! Linux和windows的回车符不同,所以别再windows中编辑文件放到linux中
Bash基本功能
- 历史命令和命令补全
history [历史命令保存文件] #默认保存在家目录下
查看历史命令
-c 清空历史命令
-w 把缓存中的命令写入文件 ~/.bash_history
/etc/profile 可以修改历史记录保存条数 HISTSIZE
!n 会执行历史记录中的第n条
!! 重复执行上一条命令
!字串 重复执行上一条以该字串开头的命令
tab键补全 在输入中可以使用
-命令别名与常用快捷键
alias #查看别名
unalias #删除别名
命令执行顺序
1.绝对路径和相对路径
2.执行别名
3.执行Bash内部命令
4.$PATH环境变量目录查找顺序第一个命令
别名永久生效文件
./root/.bashsrc
快捷键
ctrl + u 删除光标前的所有内容
ctrl + k 删除光标后的所有内容
ctrl + r 历史命令的搜索
ctrl + d 退出当前终端
输入输出重定向
设备 | 文件描述符 | 类型 |
键盘 | 0 | 标准输入 |
显示器 | 1 | 标准输出 |
显示器 | 2 | 标准错误输出 |
输出重定向 (必须有输出的命令才能使用)
命令>文件 覆盖文件
命令>>文件 追加文件
错误命令 2> 文件覆盖,错误文件写入 ##注意 ! 2和> 间不能有空格
错误命令 2>> 文件追加,错误文件写入
例: ls > abc #把ls的结果保存到abc文件中
命令 > 文件 2>&1 覆盖方式,正确输出,错误输出都放入文件中
命令> > 文件 2>&1 追加方式,正确输出,错误输出都放入文件中
----------------------------------------------------------------
命令 &> 文件
命令 &> >文件 # 功能和?相同
命令 >> 文件1 2>> 文件2 命令正确放入文件1,错误的放入文件2
多命令顺序执行和管道符
: | 命令1:命令2 | 多个命令顺序执行,没有任何关系 |
&& | 命令1&&命令2 | 逻辑与,命令1执行正确命令2才会执行 |
|| | 命令1||命令2 | 逻辑或,命令1执行错误命令2才会执行 |
管道符 "|"
命令1的正确输出作为命令2的输出
通配符和其他特殊符号
? 匹配一个字符
* 匹配任意0或多个字符
[] 匹配中括号中任意一个字符 例:[efg] , [a-z]
[^] 逻辑非,表示匹配不是一个中括号的字符
'' | 单引号内容中特殊符号没有含义 |
"" | 双引号中"$" , "`", "\" 有特殊含义 |
·· | 反引号指系统变量
例 abc = ·date· echo $abc |
$(内容) | 和反引号用法相同 |
Bash 变量
用户自定义变量
-----只在当前的shell生效
变量不能以数字开头,在bash中变量默认类型都是字符串型
aa=123
set #查看系统中的所有变量
unset
环境变量
设置环境变量
export 变量名=变量值 #申明变量
env #查询变量
unset #删除变量
$PATH 系统查找命令的路径
PS1 #起始符
位置参数变量
$n n为数字,$0表示命令本身,$1-$9代表1-9个参数,10以上参数要用{}包含
$* 这个变量代表命令行中所有的参数,把所有参数当作一个整体
$@ 这个变量也表示命令行中的所有参数, 不过把每个参数区别对待
$# 这个变量表示命令行中所有参数的个数
预定义变量
$? 最后一次执行的命令返回状态,返回0表示正确
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
接受键盘收入
read [选项][变量名]
-p #提示信息
-t #秒数,等待时间,到时间就终止
-n 字符数 # 输入的字符数和字符数相同时 就执行了
-s #隐藏
Bash的运算符
Linux的shell当中默认都是字符串类型所以不能直接相加
declare [+/-][选项][变量名]
- 给变量设置类型
+ 取消变量属性
-i 将变量设置为整数型
-x 将变量设置为环境变量
-p 显示指定变量被声明的类型
expr 或 let
dd = $(expr $aa + $bb)
$((运算式))
$(($a+$b))
环境变量配置文件
source [配置文件] 或 . [配置文件]
#生效当前配置文件
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile # 对当前用户生效
~/.bashrc #对当前用户生效
/etc/bashrc
其他配置文件
~/.bash_logout #注销是执行
~/.bash_history #执行命令
/etc/issue # 登陆欢迎信息,对本地终端生效
/etc/issue.net
# 远程登陆欢迎信息,由ssh的配置文件/etc/ssh/sshd_config中配置Banner /etc/issue.net
# 再重启ssh服务service sshd restart
/etc/motd # 不管远程登陆还是本地都会生效,但是是登陆之后才会有信息