- shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发动亲故以便运行程序的界面系统级程序
- 用户可以用 Shell 来启动、挂起、停止或者编写一些程序
- shell 还是一个功能相当强大的编程语言,易编写、易调试、灵活性较强
- shell 是解释执行的脚本语言,在 shell 中可以直接调用 Linux 系统命令
echo hello
echo -e "a\tb"
hello.sh
// 通过bash调用执行脚本
sh hello.sh
chmod 755 hello.sh
chmod u+x hello.sh
./hello.sh
- 命令别名就是小名
- 临时生效
alias cp="cp -i"
- 写入环境变量配置文件
vi ~/.bashrc
- source ~/.bashrc
- 删除别名
unalias 别名
- 绝对路径或者相对路径
- 别名
- bash 内部命令
- 按照
$PATH
环境变量定义的目录查找顺序
目录 | 用途 |
---|
ctril+c | 强制终止当前命令 |
ctril+l | 清屏 |
ctril+a | 光标移动到命令行首 |
ctril+e | 光标移动到命令行尾 |
ctril+u | 从光标所在的位置删除到行首 |
- history [选项] [历史命令保存文件]
- 选项
- -c 清除历史命令
- -w 把缓存中的历史命令写入命令保存文件 ~/.bash_history
- 默认保存 1000 条 /etc/profile HISSIZE-10000
- 使用上下肩头调用以前的历史命令
- 使用
!n
重复执行第 n 条历史命令 - 使用
!!
重复执行最后一条历史命令 - 使用
!字符串
重复执行最后一条以该字符串开头的命令
多命令执行符 | 格式 | 作用 | 案例 |
---|
; | 命令 1;命令 2 | 多个命令执行,命令之间没有任何逻辑联系 | echo 1;echo 2; |
&& | 命令 1&&命令 2 | 逻辑与 当命令 1 正确执行,则命令 2 才会执行 当命令 1 执行不正确,则命令 2 不会执行 | echo 1&&echo 2; |
\\ | 命令 1 \\命令 2 | 逻辑或 当命令 1 执行不正确,则命令 2 才会执行 当命令 1 正确执行,则命令 2 不会执行 | echo 1\\echo 2; |
- 命令 1 的正确输出会作为命令 2 的操作对象
- 命令 1 |命令 2
目录 | 用途 |
---|
? | 匹配一个任意字符 |
* | 匹配 0 个或任意字符,也就是可以匹配任意内容 |
[] | 匹配中括号中任意一个字符 |
[-] | 匹配中括号中任意一个字符,-代表范围 |
[^] | 匹配不是中括号中的一个字符 |
目录 | 用途 |
---|
" | 单引号。在单引号中所有的特殊符号,如$和’都没有特殊含义 |
"" | 双引号,在双引号里特殊符号都没有特殊含义,但是$”\例外,拥有调用变量值,引用命令和转义的含义 |
$() | 扩起来的是系统命令 |
# | 在 shell 脚本中,#开头的行代表注释 |
$ | 用于调用变量的值 |
\ | 转义符号 |
- 可以变化的量
- 变量必须以字母或下划线开头,名字中间只能由字母、数字下划线组成
- 变量名的长度不能超过 255 个字符
- 变量名在有效范围内必须唯一
- 变量默认类型都是字符串
- 这些变量的值是自己定义的
- 变量名不能为数字开头
- 等号左右两边不能有空格
m="$x"2
n=${x}2
echo $m $n
- 查询系统中默认所有已经生效的变量,包括系统变量,也包括自定义变量
- 环境变量是全局变量,而自定义变量是局部变量
- 自定义变量会在当前的 shell 中生效,而环境变量会在当前 shell 以及其子 shell 中生效
- 这种变量主要保存的是和系统操作环境相关的数据
- 变量可以自定义,但是对系统生效的环境变量和变量作用是固定的
变量名 | 含义 | 示例 |
---|
HOSTNAME | 主机名 | HOSTNAME=localhost |
SHELL | 当前的 shell | SHELL=/bin/bash |
HISTSIZE | 历史命令条数 | HISTSIZE=1000 |
SSH_CLIENT | 当前操作环境如果是用 SSH 连接的话,这里会记录客户端 IP | SSH_CLIENT=192.168.1.100 57596 22 |
USER | 当前登陆的用户 | USER=root |
- 这种变量主要是用来向脚本当中传递参数或数据的,变量名 benign 自定义,变量作用是固定的
变量名 | 含义 |
---|
$n | n 为数字,$0代表命令本身,$1-$9代表第1到第9个参数,10以上的参数需要用大括号包含,如${10} |
$* | 这个变量代表命令中所有的参数,$*把所有的变看数堪称一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数进行区分 |
$# | 这个变量代表命令行中所有参数的个数 |
- 是脚本中已经定义好的变量,变量名不能自定义,变量作用也是固定的
变量名 | 作用 |
---|
$? | 最后一次执行的命令的返回状态,0 表示正确执行,非 0 变量不正确执行 |
$$ | 当前进程的 PID |
read [选项] [变量名]
选项 | 含义 |
---|
-p | 提示信息,在等待 read 输入时,输出提示信息 |
-t | 秒数:read 命令会一直等待用户输入,使用此选项可以指定等待时间 |
-n | 字符数,read 命令只接收指定的字符数,就会执行 |
-s | 隐藏输入的数据,适用于机密信息的输入 |
- 用来声明变量类型
- declare[+/-][选项][变量名]
选项 | 含义 |
---|
- | 给变量设定类型属性 |
+ | 取消变量的类型属性 |
-a | 将变量声明为属组类型 |
-i | 将变量声明为正数型 |
-x | 将变量声明为环境变量 |
-r | 将变量声明为只读变量 |
-p | 显示指定变量的被声明的类型 |
declare -a names;
names[0] = zhangsan
names[2] = lisi
echo ${names[1]} // 打印第2个元素
echo ${names[*]} // 打印所有元素
- export 最终执行的是
declare -x
命令 declare -p
可以查看所有的类型
- 只要用 declare 声明变量的时候指定类型就可以进行数值
num1=2
num2=3
sum=$(expr $num1 + $num2)
echo $sum
- 修改完配置文件后,必须注销登陆才能生效,使用 source 命令可以不用重新登录
- .配置文件
- PATH、HISTSIZE、HOSTNAME 等环境变量写入对应的环境变量配置文件
- 环境变量配置文件中主要是定义系统操作环境的生效的胸默认变量
选项 | 含义 |
---|
/etc/profile | |
/etc/bashrc | |
~/.bash_profile | 只会对当前用户生效 |
~/.bashrc | 只会对单钱用户生效 |
选项 | 含义 |
---|
USER | 用户名 |
LOGNAME | 登陆名 |
MAIL | 邮箱地址 |
PATH | 查找路径 |
HOSTNAME | 主机名 |
umask | 权限掩码 |
- 在这里修改别名,配置 alias
- 调用
/etc/bashrc
PS1
登陆提示符在这里修改umask
PATH
变量- 调用
/etc/profile.d/星.sh
- 当正确退出计算机的时候历史记录会写入文件
~/.bash_history
- 本地中端欢迎信息
etc/issue
- 远程终端欢迎信息
etc/issue.net
- 不管元辰还是本地都可以生效
etc/motd
选项 | 含义 |
---|
\d | 显示当前系统信息 |
\s | 显示操作系统名称 |
\l | 显示登陆的终端号 |
\m | 显示硬件体系结构,如 386 等 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登陆用户的序列号 |