shell学习笔记

\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格式:命令地址

地址格式:

  1. 不给地址,对全文进行处理
  2. 单地址:

#:指定的行

$:最后一行 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. 匹配之前的项任意次

+ 匹配之前的项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次或任意次

  1. 任意个字符

? 任意一个字符

[ ]

[! ] 或 [^ ] 取反

[ ]  [[ ]] 区别

[  ]  用于单个判断条件

[  ]  用于多个判断条件

环境变量

添加环境变量

  1. 在etc/profile文件中添加,对所有用户生效,添加之后执行source etc/profile 生效,否则下次开机才能生效。
  2. 在当前用户的 .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"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值