shell基础
[root@wangchao ~]# history //查看历史命令(默认存1000个)
[root@wangchao ~]# ls ~/.bash_history //root用户的命令历史
[root@wangchao ~]# echo $HISTSIZE
1000 //保存1000条命令
[root@wangchao ~]# !! //执行上一条命令
echo $HISTSIZE
1000
!$执行上一条命令的最后一个参数
[root@wangchao ~]# cat /etc/passwd
[root@wangchao ~]# ls !$
ls /etc/passwd
/etc/passwd
[root@wangchao ~]# !684 //执行第684条历史命令
[root@wangchao ~]# !ls //执行历史命令最近的已ls开头的命令
ls /etc/passwd
/etc/passwd
[root@wangchao ~]# ls /usr/lo[Tab键] //Tab键可补全命令或路径
[root@wangchao ~]# alias //查看别名
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which--tty-only --read-alias --show-dot --show-tilde'
[root@wangchao ~]# alias aaa='cat 1.txt' //执行aaa=执行cat 1.txt(只在当前shell中有效)
[root@wangchao ~]# aaa
[root@wangchao ~]# unalias aaa //取消别名
[root@wangchao ~]# ls *.txt //*通配符,匹配所有已.txt结尾的
[root@wangchao ~]# ls ?.txt //?匹配一个字符
| :管道符,将一个命令的结果输出给另一个命令
[root@wangchao ~]# cat /etc/passwd|wc -l //统计行
35
[root@wangchao ~]# echo"111">1.txt //输出重定向
[root@wangchao ~]# cat 1.txt
111
[root@wangchao ~]# echo"111">>1.txt //追加重定向
[root@wangchao ~]# cat 1.txt
111
111
[root@wangchao ~]# wc -l <1.txt //反向重定向,把文件内容输出给命令
2
[root@wangchao ~]# ls 1111 //无文件
ls: cannot access 1111: No such file ordirectory
[root@wangchao ~]# ls 1111 > 1.txt //正确重定向失败(无1111文件)
ls: cannot access 1111: No such file ordirectory
[root@wangchao ~]# ls 1111 2> 1.txt //错误从定向
[root@wangchao ~]# ls 1111 2>> 1.txt //错误追加从定向
[root@wangchao ~]# sleep 100 //待机100秒
Ctrl+C //暂停命令,停止命令
[root@wangchao ~]# sleep 100
Ctrl+Z //退出命令()
[root@wangchao ~]# jobs //查看stop的命令(或任务)
[1]+ Stopped sleep 100
[root@wangchao ~]# fg //将第一个(带+好的)命令调回前台
sleep 100
[root@wangchao ~]# sleep 100
Ctrl+Z
[1]+ Stopped sleep 100
[root@wangchao ~]# sleep 200
Ctrl+Z
[2]+ Stopped sleep 200
[root@wangchao ~]# jobs
[1]- Stopped sleep 100
[2]+ Stopped sleep 200
[root@wangchao ~]# fg 2 //调回2的任务
sleep 200
[root@wangchao ~]# bg //将任务调到后台运行
[1]+ sleep 100 &
[root@wangchao ~]# jobs //后台的命令
shell变量
[root@wangchao ~]# env //看系统变量
[root@wangchao ~]# echo $HOSTNAME //显示变量值,变量前加$
wangchao
[root@wangchao ~]# set
//显示系统环境变量(比env输出多,含自定义,额外变量等)
[root@wangchao ~]# a=1 //设置a=1,set能看到,而env看不到
[root@wangchao ~]# set
[root@wangchao ~]# env
[root@wangchao ~]# a=1;b=2 //自定义变量
[root@wangchao ~]# echo $a $b
1 2
[root@wangchao ~]# b='ls /tmp/' //当变量为特殊字符时,需''引起
[root@wangchao ~]# echo $b
ls /tmp/
[root@wangchao ~]# which vim
/usr/bin/vim
[root@wangchao ~]# which vim
/usr/bin/vim
[root@wangchao ~]# myvim=`which vim`
//使myvim=which vim的执行结果,需加反引号引起,非单引号
[root@wangchao ~]# echo $myvim
/usr/bin/vim
[root@wangchao ~]# echo $a
1
[root@wangchao ~]# c="$a"12 //两个变量叠加英文内容
[root@wangchao ~]# echo $c
112
[root@wangchao ~]# echo $a
1
[root@wangchao ~]# echo $myvim
/usr/bin/vim
[root@wangchao ~]# d="myvim"3 //两个变量结合
[root@wangchao ~]# echo $d
myvim3
[root@wangchao ~]# d="myvim"$a //加两个变量
[root@wangchao ~]# echo $d
myvim1
[root@wangchao ~]# bash //进入子bash
[root@wangchao ~]# echo $d //之前定义的变量都已失效了
[root@wangchao ~]# export a=1 //使a成为全局变量
[root@wangchao ~]# echo $a
1
要使其变量在其他用户端也生效,需加入配置文件
[root@wangchao ~]# unset a //取消变量设置
系统和用户的环境变量配置文件
[root@wangchao ~]# ls /etc/profile
/etc/profile
[root@wangchao ~]# vim /etc/profile
[root@wangchao ~]# vim/etc/profile.d/path.sh //自定义shell时,建议写在该目录下
exportPATH=$PATH:/usr/local/mysql/bin:/usr/local/apache2/bin
[root@wangchao ~]# source /etc/profile
//使配置生效,该文件会使profile.d下的文件都执行一遍
[root@wangchao ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/apache2/bin已加入
该环境变量下每个用户都有效
[root@wangchao~]# vim /etc/bashrc //系统对应的环境变量
[root@wangchao ~]# echo $PS1 //显示的为[root@wangchao ~]格式
[\u@\h \W]\$
\u 用户, \h 主机名, \W 当前目录,\$ 就是 #,普通用户为 $。
[root@wangchao ~]# cd /etc/init.d/
[root@wangchao init.d]#
[root@wangchao init.d]# PS1='[\u@\h \w]\$' //显示全路径
[root@wangchao /etc/init.d]#
root@wangchao /etc/init.d]#PS1='[\u@\h\W]\$' //改回
[root@wangchao init.d]#vim/etc/profile.d/umask.sh
umask 0012
[root@wangchao init.d]#source /etc/profile
[root@wangchao init.d]#umask
0012
[root@wangchao profile.d]#cd
[root@wangchao ~]#ls -al
-rw-------. 1 root root 19257 Jun 13 08:11 .bash_history //保存的历史命令
-rw-r--r--. 1 root root 18 May 20 2009 .bash_logout //为退出后执行的命令
-rw-r--r--. 1 root root 176 May 20 2009 .bash_profile //可针对用户定义变量
-rw-r--r--. 1 root root 176 Sep 23 2004 .bashrc //定义用户别名
shell中特殊符号
*通配符、 ?匹配一位 、#注释而失效 、 \脱义符 、
| 管道符一条命令的结果给另一条命令
[root@wangchao ~]#ls #1.txt //执行了ls 1.txt被#符注释了
[root@wangchao ~]#ls \#1.txt //将#脱义,查看#1.txt文件
[root@wangchao ~]#cat 1.txt |wc -l
2
$变量前缀,使用变量、 !$上一条命令最后一个参数、
;用于两个命令中间,将两命令写在一行、 ~家目录、 &把一命令丢到后台
[root@wangchao ~]#sleep 10&
[1] 21300
>重定向、 >>追加重定向 2>错误重定向 2>>错误追加重定向 <反向重定向
[root@wangchao ~]#wc -l <1.txt
2
[] :[0-9]任意数字0-9
[root@wangchao ~]#ls [12].txt //等于ls 1.txt+ls 2.txt
1.txt
cut命令
[root@wangchao ~]#cat /etc/passwd
[root@wangchao ~]#cut -d: -f 3 /etc/passwd
//将passwd文件,每行已:为分割符,取第三段的值
[root@wangchao ~]#cut -d: -f 3,4,5/etc/passwd
//将passwd文件,每行已:为分割符,取第3,4,5段的值
[root@wangchao ~]#cut -c 10 /etc/passwd //取文件每行第10个字符
[root@wangchao ~]#cut -c 1-10 /etc/passwd //取文件每行第1-10个字符
sort命令 排序
[root@wangchao ~]#sort /etc/passwd //排序(已ASISS大小码排序)
[root@wangchao ~]#sort -t: -k3 /etc/passwd //已:为分割,将第三段排序
[root@wangchao ~]#sort -t: -k3 -n/etc/passwd //已:为分割,将第三段按数字大小排序
[root@wangchao ~]#sort -t: -k3,5 -n/etc/passwd //已:为分割,将第3-5段按数字大小排序
[root@wangchao ~]#sort -t: -k3,5 -n -r/etc/passwd
//已:为分割,将第3-5段按数字大小反排序(大的排上)
[root@wangchao ~]#sort -t: -k3,5 -n -r -u/etc/passwd
//已:为分割,将第3-5段按数字大小反排序取消重复项
wc命令
[root@wangchao ~]#wc -l 1.txt 2.txt //统计行数
[root@wangchao ~]#wc -w 1.txt //统计单词数
[root@wangchao ~]#wc -m 1.txt //统计字符数
uniq和tee命令
uniq可用与去重复,亦可用于统计多少行重复
[root@wangchao ~]#uniq 1.txt //(消除挨着的重复项)
[root@wangchao ~]#uniq -c 1.txt //统计重复个数
在使用uniq时,重复项如果不挨着会认为不是重复项,因此在用uniq前可先排序
[root@wangchao ~]#sort 1.txt |uniq -c
[root@wangchao ~]#sort 1.txt |uniq //效果一样
[root@wangchao ~]#sort -u 1.txt
tee用于重定向,双重输出
[root@wangchao ~]#echo"111">1.txt //111重定向给1.txt,屏幕不显示
[root@wangchao ~]#cat 1.txt
111
[root@wangchao ~]#echo "1111"|tee1.txt //111重定向给1.txt,屏幕上显示
1111
tr和split
[root@wangchao ~]#ls *.txt
1.txt
[root@wangchao ~]#ls *.txt|tr 'a-z' 'A-Z' //将小写字母改成大写
1.TXT
[root@wangchao ~]#echo "ldfeddg"|tr 'd' 'S' //将d改成S显示
lSfeSSg
[root@wangchao ~]#split -b 50m 1.txt //将1.txt已50m为大小分割
[root@wangchao ~]#split -l 100 1.txt //将1.txt已100行为分割分割文件
[root@wangchao ~]#split -l 10anaconda-ks.cfg
[root@wangchao ~]#ls
xaa xad xag xac xaf xab xae
[root@wangchao ~]#wc -l x* //文件被已每个10行分割
10xaa
10xab
10xac
10xad
10xae
10xaf
4xag
[root@wangchao ~]#du -sb anaconda-ks.cfg
1392 anaconda-ks.cfg
[root@wangchao ~]#split -b 100 anaconda-ks.cfg
[root@wangchao ~]#ls -lh xa*
-rw-rw-r--. 1 root root 100 Jun 13 10:15xaa
-rw-rw-r--. 1 root root 100 Jun 13 10:15xab
-rw-rw-r--. 1 root root 100 Jun 13 10:15xac
-rw-rw-r--. 1 root root 100 Jun 13 10:15xad
-rw-rw-r--. 1 root root 100 Jun 13 10:15xae
-rw-rw-r--. 1 root root 100 Jun 13 10:15xaf
-rw-rw-r--. 1 root root 100 Jun 13 10:15xag
-rw-rw-r--. 1 root root 100 Jun 13 10:15xah
-rw-rw-r--. 1 root root 100 Jun 13 10:15xai
-rw-rw-r--. 1 root root 100 Jun 13 10:15xaj
-rw-rw-r--. 1 root root 100 Jun 13 10:15xak
-rw-rw-r--. 1 root root 100 Jun 13 10:15xal
-rw-rw-r--. 1 root root 100 Jun 13 10:15xam
-rw-rw-r--. 1 root root 92 Jun 13 10:15 xan
//每个文件大小分成100
[root@wangchao ~]#split -b 100anaconda-ks.cfg new_
new_ad new_aj new_ae new_ak new_af new_al new_ag new_am
//分割后已new_命名
shell中连接符(并且和或者)
&&并且 、 ||或者
[root@wangchao ~]#ls 1.txt&&ls2.txt
1.txt
2.txt
[root@wangchao ~]#ls 10.txt&&ls2.txt
ls: cannot access 10.txt: No such file ordirectory
[root@wangchao ~]#ls 1.txt&&ls 20.txt
1.txt
ls: cannot access 20.txt: No such file ordirectory
&&前面的命令执行成功才能执行后面的命令
前面的命令执行不成功,后面的命令不能执行
[root@wangchao ~]#ls 1.txt||ls 20.txt
1.txt
[root@wangchao ~]#ls 10.txt||ls 2.txt
ls: cannot access 10.txt: No such file ordirectory
2.txt
||前面的命令未执行成功,执行后面的命令
&&:左边的命令执行成功后,才会执行后面的命令
||:左边的命令未执行成功,执行后面的命令
;:左边的命令执行成功与否,后面的命令都会执行
grep过滤
[root@wangchao ~]#grep 'root' /etc/passwd //匹配root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@wangchao ~]#cp /etc/passwd 1.txt
[root@wangchao ~]#grep --color 'root'/etc/passwd //匹配的关键字用颜色匹配出
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@wangchao ~]#grep --color -n 'root'/etc/passwd //显示第几行匹配上
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
为方便,grep --color用cg代替
[root@wangchao ~]#alias cg='grep --color'
[root@wangchao ~]#cg -c 'root' 1.txt //root出现了几行
2
[root@wangchao ~]#cg -v 'root' 1.txt //-v取反,显示未出现root的行
[root@wangchao ~]#cg -A 2 'root' 1.txt //显示匹配root的行,其下两行也显示出
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
[root@wangchao ~]#cg -n -A 2 'root' 1.txt //-n前面显示行数
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
11:operator:x:11:0:operator:/root:/sbin/nologin
12-games:x:12:100:games:/usr/games:/sbin/nologin
13-gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
[root@wangchao ~]#cg -n -B 2 'root' 1.txt //匹配行,其上两行也显示出
[root@wangchao ~]#cg -n -C 2 'root' 1.txt //匹配root行,其上下两行都显示出
[root@wangchao ~]#cg -r 'iptables' /etc/* //匹配含iptables的文件(显示文件名)
[root@wangchao ~]#cg -rh 'iptables' /etc/*
//匹配含iptables的文件(只显示结果,不显示文件名)
[root@wangchao ~]#grep -n 'tom' 1.txt
34:tom:x:500:500::/home/tom:/bin/bash
[root@wangchao ~]#cg -n 'tom' 1.txt
34:tom:x:500:500::/home/tom:/bin/bash
[root@wangchao ~]#cg -v 'nologin' 1.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
tom:x:500:500::/home/tom:/bin/bash
[root@wangchao ~]#cg '[0-9]' 1.txt
[root@wangchao ~]#cg '[aN]' 1.txt
[root@wangchao ~]#cg '^[0-9]' 1.txt //以数字开头的行
[root@wangchao ~]#cg '[^0-9]' 1.txt //包含非数字的行
[root@wangchao ~]#cg '^[^0-9]' 1.txt //不以数字开头的行
[root@wangchao ~]#cg '^$' 1.txt //空行
[root@wangchao ~]#cg -v '^$' 1.txt //非空行
[root@wangchao ~]#cg 'r.o' 1.txt //匹配r.o .为任一字符的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@wangchao ~]#cg 'r*o' 1.txt //*为任意个字符,任意多个*前面的字符
[root@wangchao ~]#cg 'r.*o' 1.txt
//r开头o结尾的字符,.为任一个字符,*任意个*前面的字符
[root@wangchao ~]#cg 'r\?o' 1.txt //\为脱义,0或1个?号前面的字符
[root@wangchao ~]#cg -E 'r?o' 1.txt //效果与上一条命令一样
grep -E=egrep
grep -E=egrep
grep --color 'r\?o' 1.txt ==egrep --color'r?o' 1.txt
[root@wangchao ~]#egrep --color 'r+o' 1.txt //1个或多个+前面的字符
[root@wangchao ~]#grep -E 'r+o' 1.txt
[root@wangchao ~]#cg 'r\+o' 1.txt
//以上三条命令效果相同
.:任意一个字符 、 *:0个或多个*前面的字符 、 .*:任意个任意字符
?:0个或一个?前面的字符、 +:1个或多个+前面的字符
[root@wangchao ~]#egrep --color'root|nologin' 1.txt //匹配root或者nologin
[root@wangchao ~]#grep --color 'root' 1.txt| grep --color 'nologin'
operator:x:11:0:operator:/root:/sbin/nologin
//并且匹配两次,即匹配root,又匹配nologin的
root@wangchao ~]#egrep --color '(rr)+'1.txt
[root@wangchao ~]#egrep -E --color'(rr){1,3}' 1.txt //出现1-3次rr的
[root@wangchao ~]#grep --color '\(rr\)\{1,3\}'1.txt //效果与上一条相同
sed命令
[root@wangchao ~]#sed -n '10'P 1.txt //P打印,打印第10行
[root@wangchao ~]#sed -n '1,10'P 1.txt //打印第1-10行
[root@wangchao ~]#sed -n '30,$'P 1.txt //打印第30行至尾行
[root@wangchao ~]#sed -n '/root/'p 1.txt //打印匹配/root/的行
[root@wangchao ~]#sed -n '/r.o/'P 1.txt
[root@wangchao ~]#sed -n '/r*o/'P 1.txt //含O的行
[root@wangchao ~]#sed -n '/r\?o/'P 1.txt
[root@wangchao ~]#sed -n '/r\+o/'P 1.txt //1个或多个r.....o的
[root@wangchao ~]#sed -n '/root\|nologin/'P1.txt //含root或nologin的
[root@wangchao ~]#sed -n '/\(oo\)\+/'p1.txt //1对或多对oo的
[root@wangchao ~]#sed -r -n '/(rr)+/'p1.txt
grep可以用的sed都可以用,sed -r与grep -E类似
[root@wangchao ~]#sed -n -r '/[^0-9]/'p1.txt
sed比grep多的功能
[root@wangchao ~]#sed '/[0-9]/'d 1.txt //删除数字的行
[root@wangchao ~]#sed '1,19'd 1.txt //删除1-19行,只是显示上删除了,原文件未删除
[root@wangchao ~]#cp 1.txt 2.txt
[root@wangchao ~]#sed -i '1,19'd 1.txt //-i使文件1-19行删除
[root@wangchao ~]#sed'1,10s/nologin/login/g' 1.txt
//将1-10行的nologin,替换成login
[root@wangchao ~]#cat 1.txt //原文件未改变
加-i可对文件进行更改
[root@wangchao ~]#sed'1,10s/\/sbin\/nologin/login/g' 1.txt
[root@wangchao ~]#sed's#/sbin/nologin#login#g' 1.txt
//s全局更改,用#代替/号,不用脱义
[root@wangchao ~]#sed 's#^.*$#login#g' 1.txt //所有行都改成login
[root@wangchao ~]#sed 's#^.*$#&login#g'1.txt //所有尾行加login
root@wangchao ~]#sed 's#[0-9]##g' 1.txt //将数字用空代替(删除数字)
[root@wangchao ~]#sed 's#[a-zA-Z]##g' 1.txt //删除字母
[root@wangchao ~]#sed 's#[^1-9a-zA-Z]##g' 1.txt //删除特殊字符
[root@wangchao ~]#sed -r's#(^[a-z]+)(:.*:)(.*$)#\3\2\1#g' 1.txt //将第一段与最后一段对调
[root@wangchao ~]#sed -n '/root/p;/tom/p'1.txt
//包含/root/或tom的行(如果一行中既含root又含tom,将显示两次)
[root@wangchao ~]#sed -n -e '/user/p' -e'/tom/p' 1.txt //与上一条命令类似
[root@wangchao ~]#sed -n -r '/user|tom/p'1.txt
//一行中既含user的又含tom的只显示一次
awk命令
[root@wangchao ~]# cp /etc/passwd 1.txt
[root@wangchao ~]# awk -F ':' '{print $3}'1.txt //以:为分割,打印第三段
[root@wangchao ~]# awk -F ':' '{print$3,$4}' 1.txt //以:为分割,打印第3、4段
[root@wangchao ~]# awk -F ':''OFS=":" {print$3,$4}' 1.txt //显示出:分割符
[root@wangchao ~]# awk '/user/' 1.txt
[root@wangchao ~]# awk '/user|root/' 1.txt //显示root或user的行
[root@wangchao ~]# awk '/r*o/' 1.txt //匹配0个o或多个r…o的行
[root@wangchao ~]# awk '/r+o/' 1.txt
[root@wangchao ~]# awk '/r.*o/' 1.txt
[root@wangchao ~]# awk '/(oo)+/' 1.txt
[root@wangchao ~]# awk -F ':' '$1~/r*o/{print $3}' 1.txt //打印匹配出的第三段
[root@wangchao ~]# awk -F ':' '$1~/r*o/{print $1,$3};$1~/user/ {print $1,$3}' 1.txt
//用了两条命令
[root@wangchao ~]# awk -F ':' '$1~/r*o/{print $1,$3};$1~/nobody/ {print $1,$3}' 1.txt
//同时满足两个条件的会答应两次
[root@wangchao ~]# awk -F ':' '$1~/r*o|nobody/{print$1,$3}' 1.txt
//r*o或nobody的显示一次
[root@wangchao ~]# awk -F ':''$3="root"' 1.txt //显示root的行
[root@wangchao ~]# awk -F ':''$1=="nobody"||$7~/nolog/' 1.txt
//1段位nobody或nolog的行
[root@wangchao ~]# awk -F ':''$3>="500"' 1.txt //按ASCII码大小排,大于500的行
[root@wangchao ~]# awk -F ':''$7!=/sbin/login' 1.txt
[root@wangchao ~]# awk -F ':' '$7!~/login/'1.txt //第七段不匹配nolog的
[root@wangchao ~]# awk -F ':' '$3<$4'1.txt //第三段小于第四段的
[root@wangchao ~]# awk -F ':''OFS=":";$3=$4' 1.txt
//以:为分割,第三段=第四段的值
[root@wangchao ~]# awk -F ':' 'NR<10'1.txt //打印前10行
[root@wangchao ~]# awk -F ':' 'NR==10'1.txt //打印第10行
[root@wangchao~]# awk -F ':' 'NR==10 {print$1,$5}' 1.txt //打印第十行第1、5段
[root@wangchao~]# awk -F ':' '{if(NR==10) print $1,$7'} 1.txt //打印第10行第1、7段
[root@wangchao~]# awk -F ':' '{print NF}' 1.txt //以:为分割,显示每行分成几段
root@wangchao ~]# awk -F ':' '{print$NR,$NF}' 1.txt //打印第n行的n段
[root@wangchao ~]# awk -F ':' '$7=$3+$4'1.txt
//第7段为3、4段相加(默认段有改变后打印,默认以空格为分割符)
[root@wangchao ~]# awk -F ':''OFS=":";$7=$3+$4' 1.txt //以:为分割,显示了两遍
[root@wangchao ~]# awk -F ':''OFS=":" {$7=$3+$4;print $0}' 1.txt
//以:为分割并且赋值用{}括起来
[root@wangchao ~]# awk -F ':''{(sum=sum+$3)};END{print sum}' 1.txt //第三段相加