一、常用快捷键
Tab键可补全命令和文件内容
^c 终止运行的程序
^z 前台运行的程序挂起到后台
^d 退出
^l 清屏
^a 光标移动到命令行最前端
^e 光标移动到命令行后端
^u 删除光标前所有字符
^k 删除光标后所有字符
^r 搜索历史命令
二、常用通配符
* 匹配0或多个任意字符
? 匹配任意单个字符
[list] 匹配[]中任意单个字符或一组单个字符 [a-z]
[!list] 匹配除[]中包含的任意单个字符
{string1,string2,...} 匹配{}中任意单个或多个字符 {1..8}
bash中的引号:
双引号“” 把引号内容看成整体,允许$调用其变量值
单引号‘’ 把引号内容看成整体,禁止调用变量值,shell特殊符号视为普通字符
反撇号`` 与$()一样,引号、括号里命令优先,如存在嵌套,反撇号无法使用
三、shell基础知识
shell种类: cat /etc/shells
/bin/sh
/bin/bash 默认shell
/sbin/nologin 非交互,不能登录系统
/bin/dash 功能相对较少
/bin/csh 具有C风格的shell
/bin/tcsh csh增强版,兼容csh
shell脚本基本写法:
#!/bin/bash
或 #!/bin/env 解释器
执行方式: chmod +x shell.sh
./shell.sh 或直接绝对路径
非标准方式 bash shell.sh
或 source shell.sh
bash +x shell.sh 查看执行过程
bash +n shell.sh 检查脚本语法问题
四、变量
变量名=变量值
A=hello 定义变量值
echo $A 调用变量
或 echo ${A}
unset A 撤销变量
变量定义规则:
1、变量名严格区分大小写
2、变量名不能有特殊字符 # ?@ !
3、变量名不能以数字开头
4、等号两边不能有空格
5、变量名尽量见名知意
变量定义方式:
1、 A=1234567
echo ${A:2:4} 输出 3456 调用变量的一部分,从第三个字符截取4个字符
2、`` $() 可以把命令结果赋值给变量
3、交互式定义变量 read
read [选项] 变量名
-p 定义提示用户信息
-n 定义字符数
-s 不显示输入内容
-t 定义超时时间,秒
read -p "Input your name:" name
read -s -p "Input your password:" pass
read -n 5 -p "Input your name:" name 限制用户名5个字符
read -t 3 -p "Input your name:" name 限制输入时间3秒
read -p "Input your ip:" IP < ip.txt 变量引用文件内容
4、定义有类型的变量(declare)
declare 选项 变量名=变量值
-i 将变量作为整数 declare -i A=123
-r 定义只读变量 declare -r B=hello
-a 定义普通数组
-A 定义关联数组
-x 变量通过环境变量导出 declare -x AAA=123 相当于 export AAA=123
5、本地变量与全局变量
变量名=变量值 本地变量(只针对当前进程有效)
env 查看当前用户的环境变量
set 查看本地变量和环境变量
export 导出环境变量
系统启动后依次读取文件顺序:
/etc/profile 全局变量,所有用户所有bash
$HOME/.bash_profile 当前用户环境变量,用户登录时读取
$HOME/.bashrc 当前用户bash信息,用户登录时读取
/etc/bashrc 全局bash信息,别名,所有用户生效
$HOME/.bash_logout 当前用户退出当前shell最后读取
source 更改文件、变量生效
系统变量
$? 上一条命令的返回值
$0 表示执行程序或脚本名
$# 表示脚本后面参数个数
$* 表示脚本后面所有参数,整体输出,每个变量空格隔开
$@ 脚本后面所有参数,参数独立,全部输出
$1~$9 脚本后面位置参数
${10}~${n} 扩展位置参数
$$ 当前进程号
$! 当前终端后台运行任务的最后一个进程号
!$ 调用最后一条命令的参数
五、四则运算
四则运算符号:
$(( ))
$[ ]
expr
let
bc
i++ 先赋值,再运算
++i 先运算,再赋值