\n 换行符
基本运算
$[ ] $(( )) expr let bc
expr 1 + 2 整数运算,可用变量$a。要有空格,乘法要转义 \* ,其他运算不用转义
expr $a + 3 变量要用$
echo $((a+3)) 变量不用$
echo $[a+3] 变量不用$
let y=a+3 变量不用$
a=$[2+3] 可赋值
bc 小数计算
echo `1.3+2.5` | bc
let a++
流程控制
if语句
if [ ];then
elif [ ]
else
fi
read -p “是否终止?(y/n)” input
if [ $input == “y” ]
exit
fi
for语句
for((i=1;i<=5;i++))
do
done
for
do
done
for i in {1..5}
do
echo $i
done
while语句
while [ ]
do
done
n=0
while [ $n -lt 5 ]
do
echo $n
let i++
done
until
条件为false才执行
until
do
done
contusion
跳出当前循环,进入下一个循环
break
结束所有循环
case
read input
case $input in
1|2|3|4|5) echo “$input”
;;
*) echo “输入错误”
;;
esac
文件包含
test1.sh
url=”abc.com”
test2.sh
../test1.sh
echo $url
函数
function fun(){
echo “hello”
}
函数调用
fun
函数参数:
function fun(){
echo “参数1是:$1”
echo “参数2是:$2”
}
fun 2 4
head
查看文件前5行: head -5 a.txt
tail
查看文件最后5行:tail -5 a.txt tail -n 3 a.txt
查看文件5到8行:sed -n ‘5,8p’ a.txt
grep (9)
逐行扫描
grep -r “aaa” 递归查找当前目录及其子目录
-n 显示行号
-v 反向输出
-o 只打印匹配的
-i 忽略大小写
-E 扩展正则表达式
-c 出现次数
-nA3 显示后3行
-nC3 显示前3行
-e 或
-f a.txt b.txt 筛选b中和a相同的内容
Sort (4)
-r 从大到小排序
-k 按列排序 sort -rk 2 a.txt #k要在最后
-n 把文本转为数字后排序
-u 删除重复行,重复行可不相邻
expr (3)
expr substr “aaabbbccc” 3 5 #截取字符串
expr length “aaaaaaa” #计算字符串长度
expr 1 + 2
wc (3)
-l 计算行数
-w 计算单词个数
-c 计算字母个数
Sed
流编辑器,逐行处理
Sed [option] ‘script;script’
常用选项:
-n 不主动打印全部
-e 多点编辑 sed -n ‘1p’ -e ‘2p’ a.txt
-f file 从文件中读取脚本
-r 使用扩展正则表达式
-i.bak 备份后在原文件编辑
-I 在原文件编辑
-s 将多个文件视为独立文件
Script格式:命令地址
地址格式:
- 不给地址,对全文进行处理
- 单地址:
#:指定的行
$:最后一行 sed -n ‘$p’ a.txt
/pattern/ 正则匹配的行 sed -n ‘/^a/p’ a.txt
3,地址范围:
#,#
#,+#
/pat/,/pat/
#,/pat/
/pat/,#
4,步进:
1~2 奇数行 sed -n ‘1~2p’ a.txt
2~2 偶数行 sed -n ‘2~2p’ a.txt
命令:
P 打印匹配的内容
Ip 忽略大小写输出
d 删除
a 在指定 的行后追加文本
i 在指定的行之前追加文本
c 替换
w file 保存指定的行到文件 sed ‘1w a.txt’ b.txt
r file 读取文件内容追加到匹配的行之后
= 打印行号
!匹配的行取反
q 结束或退出sed
查找替换:
sed ‘3s/pat/par/g’ a.txt s前不带参数,对全文进行处理
sed ‘/^#/d;/^$/d’ 删除注释行和空行
sed ‘/^device/,/\}$/p’
多行注释
方法1:
:<<!
echo a
echo bbb
!
方法2:
:’
echo a
echo bbb
‘
函数
ls (3)
-a 显示所有文件,包括隐藏的
-l 显示文件详细信息
-t 按时间输出
echo (2)
-e 解析转义字符
echo -e “aa\nbb\ncc”
aa
bb
cc
-n 不加换行符,不换行输出
printf
printf %.2s aaa 输出2个字符
aa
cat (2)
-n 显示所有行行号
-b 显示非空行行号
Cat a.txt b.txt c.txt
Tac
上下行倒序打印
Rev
行前后倒序打印
cp (2)
-rf 复制目录和文件
mkdir (1)
-p aa/bb/cc 创建多级目录
mv
移动文件或目录
mv a.txt b.txt 文件重命名
du
-sh 查看目录或文件大小
tr (4)
-c 除了a之外,都替换为b
echo “aaabbb” | tr -c a c
aaaccc
-d 删除
echo “aaabbb” | tr -d aaa
bbb
-t 替换
echo “aaabbb” | tr -t a b
bbbbbb
-s 去重
echo “aaabbb” | tr -s ‘[a-z]’
ab
stat
显示文件的系统状态
seq
打印序列化数字
seq 2 5
2
3
4
5
seq 1 2 5 步长为2
1
3
5
shuf
生成随机序列
seq 5 | shuf
1
3
2
5
4
shuf -i 5-10 规定数字范围
6
5
8
9
10
date
date +%y%m%d%h%m%s y区分大小写
find
目录结构中搜索文件
find path -option actions
find ./ -name “*txt” #必须有双引号
-maxdepth 查找最大目录层级
-mindepth 查找最小目录层级
find -maxdepth 2 -mindepth 2 -name “*txt”
-depth 先处理文件,后处理目录
-name 忽略大小写
-link n 链接n的文件
-user username 根据用户查找
-group groupname 根据群组查找
-type
type可以是以下类型
f 普通文件
d mulu
b 块设备文件
p 管道文件
-empty 空文件或空目录
-size 根据大小查找
-atime 时间
-mtime
-ctime
-perm 权限
-exec command {} \; 对找到的文件执行command命令,{}指找到的文件
find a.txt -exec cp {} aa \;
-delete 删除找到的文件
awk
语法:awk option ‘pattern{action}’ file
选项:
-f file 从文件中读取awk源程序
-F “fs” 指定输入字段分隔符
-v var=value 变量赋值
模式:
BEGIN{}
END{}
/regular expression/ 匹配正则
pattern && pattern 与
pattern | pattern 或
! pattern 非
pattern 1,pattern2
内置变量:
FS 输入字段分隔符,默认是空格或制表符
OFS 输出字段分隔符,默认是空格
RS 输入记录分隔符,默认是换行符
ORS 输出记录分隔符,默认是换行符
NF 列数
NR 行数
内置函数:
index()
sub()
match()
gsub(r,s)
gsub(r,s,t)
substr(s,p,n)
substr(s,p)
split(s,a,fs)
exit
exit 0 以成功状态退出
exit 1 以失败状态退出
tee
tee file 输入的数据保存在file中
tar
打包备份文件
-c 建立新的备份文件
-f 指定备份文件
-v 显示指令执行过程
-z 通过gzip指令处理备份文件
tar -czvf test.tar.gz /test 压缩文件
tar -xzvf test.tar.gz 解压文件
tar -czvf log_`date + %y%m%d%h%m%s`.tar.gz aaa
export (3)
export -p 列出所有环境变量
export 环境变量 新增环境变量
export -n 环境变量 删除环境变量
xargs
一般和管道一起使用
cat a.txt | xargs -n5 输出5列
column
column -t a.txt 对齐
uniq
uniq 删除重复项,需要先sort排序
-c 显示重复次数
start
start . 打开所在文件夹
read (2)
-r 不允许反斜杠转义任何字符
-p
read -p “请输入数字” a
rename
支持正则表达式
time
脚本或命令执行时间
time ls
time test.sh
rmdir
删除空目录
-p 删除多级空目录
set (2)
-e 命令返回值不等于0,则立即退出shell
-x 显示指令
comm
要先排序
comm -12 file1 file2 打印两个文件相同的行
vi/vim
i 进入编辑模式
esc 退出编辑模式
:wq 保存退出
:q! 不保存退出
:w filename 另存为新文件
source
source file 使修改的文件生效
. file 使修改的文件生效
tree
-l 显示指定数目层级
-d 只显示目录
whereis
cd
cd 进入个人主目录
cd- 进入上次所在的目录
yum
yum install package
yum search package
yum list
yum provides */nginx 查询文件在哪个包
ps
-a 显示所有进程
df
-h 列出磁盘使用量
tty
查看当前shell类型
特殊变量 (5)
$0 脚本自身名字
$? 上一条命令是否执行成功,0成功,非0失败
$# 位置参数总数
数组
普通数组
数组格式: arr=(2 3 4)
添加或修改数组元素: arr[3]=10
读取元素: ${arr[0]}
获取所有元素: ${arr[*]}
删除数组元素: unset arr[2]
删除整个数组: unset arr
数组拼接: new_arr=(${arr[*] ${arr[*]}})
关联数组
声明关联数组: declare -a 数组名
一次赋值一个值
数组名[索引]=值
一次赋多个值
数组名=([索引]=值 [索引]=值 [索引]=值)
访问关联数组
echo ${数组名[索引]}
访问所有值
${arr[@]}
${arr[*]}
访问所有数组下标
echo ${!arr[*]}
echo ${!arr[@]}
获取元素个数
echo ${#arr[*]}
echo ${#arr[@]}
获取某个值得长度
echo ${#arr[a]}
条件表达式 (3)
[ ] [ $a -ge $b ] 要有空格
[[ ]] [[ $a -ge $b ]] 要有空格
test expression test 2 -lt 4
整数比较符 (6)
eq 等于
gt 大于
lt 小于
ge 大于等于
le 小于等于
nq 不等于
字符串比较符 (9)
== 等于
!= 不等于
>= 大于等于
<= 小于等于
- 大于
< 小于
-n 字符串长度大于0为真
-z 字符串长度等于0为真
str 字符串存在为真
文件测试符 (7)
-e 文件目录存在为真
-f 文件存在为真
-d 目录存在为真
-r 有读权限
-w 有写权限
-x 有执行权限
-s 文件存在且大小等于0为真
布尔运算符 (3)
! 非
-a 与
-o 或 在[ ]中使用
逻辑运算符 (3)
&& 逻辑与
|| 逻辑或 在(())或[[ ]]中使用
整数运算符 (5)
+
-
*
/
% 取余
字符串处理
${var%sh} 截取sh左边的内容
${var#sh}
获取字符串长度
${#var}
字符串切片
var=”abcdefg”
${var:3:2}
de
获取最后两个字符
${var: (-2)}
如果变量为空就重新赋值
${var=”aaa”}
替换字符串
${var/aaa/bbb}
字符串拼接
str=”${str1} aaa ${str2}” 中间可以添加字符串
type
type cd 查看命令是否为内建命令
正则表达式 (15)
^ 行起始标志
$ 行尾标记
. 匹配任何一个字符
- 匹配之前的项任意次
+ 匹配之前的项1次以上
? 匹配之前的项0次或1次
[ ] 匹配[ ]中的任意一个字符
[^ ]
[ - ]
( ) 分组 (abc){2} 匹配abcabc
{n}
{n,}
{n.m}
| 或 a(b|c) 匹配ab 或ac
\ 转义字符 a\.b 匹配a.b
[:alnum:] 字母与数字字符
[:alpha:] 字母字符,包括大小写
[:blank:] 空格与制表符
[:digit:] 数字字符
[:lower:] 小写字母
[:upper:] 大写字母
[:punct:] 标点符号
[:space:] 包括换行符、回车等在内的所有空白字符
\b 单词边界
\B 非单词边界
\d 单个数字字符
\D 单个非数字字符
\n 换行符
\s 单个空白字符
\S 单个非空白字符
\r 回车
\w 单个单词字符
\W 单个非单词字符
通配符
*在通配符里表示任意个字符,在正则屁表示0次或任意次
- 任意个字符
? 任意一个字符
[ ]
[! ] 或 [^ ] 取反
[ ] 和 [[ ]] 区别
[ ] 用于单个判断条件
[ ] 用于多个判断条件
环境变量
添加环境变量
- 在etc/profile文件中添加,对所有用户生效,添加之后执行source etc/profile 生效,否则下次开机才能生效。
- 在当前用户的 .bash_profile 添加,只对当前用户生效
Evn
显示所有环境变量
$( ) 将括号内的结果赋值给变量
查看当前使用的shell
echo ${shell}
设置主机名
临时:
hostname name
永久:
set -hostname name
help
查看所有内置命令
hash
hash 显示缓存命令
hash -r 清除缓存
创建别名:
alias name=”newname”
撤销别名
unalias name
unalias -a 撤销所有别名
lscpu
查看cpu信息
free
查看内存
sblk
查看硬盘和分区
arch
查看系统架构
uname -r
查看内核版本
查看操作系统发行过的版本
cat /etc/os-release
history
-c 清除历史命令
n 显示最近n条历史命令
快捷键
ctrl + l 清屏
nl
打印非空行,相当于 cat -b
cut
paste
按列合并文件
paste a.txt b.txt
-t “:” 设置分隔符
diff
patch
file
查看文件类型
trap
2)sigint 终止
9)sigkill 终止
20)sigstp 停止
dd
=~
匹配正则
dump
备份文件
只读变量
先定义,后赋值
readonly name
declare -r name
查看只读变量
readonly
declare -r
打印带颜色字符
echo -e "\e[0;33maaa\e[m"