shell(三)变量以及常用的shell命令

环境变量的设置

一、环境变量类型分为:
系统环境变量和用户自定义变量,列出系统中所有的环境变量可以使用env;
二、环境变量的文件:
1、对所有用户都生效:/etc/profile
2、如果写在了当前用户的家目录下,则只对当前用户生效、
3、开机首先加载/etc/profile文件中的环境变量,再加载/etc/profile.d/*.sh文件中的环境变量
不同用户设置环境变量常用的路径:
$HOME/.bashrc
$HOME/.bash_profile
3、Java的环境变量:通常放在全局环境的/etc/profile文件中

export JAVA_HOME=/application/jdk
export CLASSPATH= C L A S S P A T H : J A V A H O M E / l i b : CLASSPATH:JAVA_HOME/lib: CLASSPATH:JAVAHOME/lib:JAVA_HOME/jre/lib
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:JAVA_HOME/jre/bin: P A T H : PATH: PATH:HOME/bin
export RESIN_HOME=/application/resin

三、取消环境变量
1、取消临时环境变量
unset 环境变量
在这里插入图片描述
2、取消文件中的环境变量
如果写入文件中的环境变量,如果要取消环境变量,则需要在文件中删除环境变量的内容

常用的shell命令

diff和patch

diff 和 patch。
diff 和 patch 是一对工具,使用这对工具可以获取更新文件与历史文件的差异,并将更新应用到历史文件上。在数学上说,diff就是对两个集合的差运算,patch就是对两个集合的和运算。

diff

diff的英文解释为compare files line by line。我们可以看到diff是按照行内容比较两个文件的不同

diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

diff的使用格式

diff [参数][文件或者目录1][文件或者目录2]

参数说明
-i忽略大小写
-b忽略空格的变化
B忽略空白行
-a将比较的文件都当成纯文本文件处理
-r递归比较文件的子目录(如diff -r /etc/rc.d/rc3.d/ /etc/rc.d/rc5.d/比较两个不同开机运行级别的目录)

diff比较结果中一般有三种结果:
a - add
c - change
d - delete
在这里插入图片描述

<表示patch应当将这个标志后面的内容删除。
 .> 表示patch应当将这个标志后面的内容添加。
 “+” 比较的文件的后者比前着多一行
“-” 比较的文件的后者比前着少一行
“!” 比较的文件两者有差别的行
 -C或--context  与执行"-c-"指令相同。
-d或--minimal  使用不同的演算法,以较小的单位来做比较。
-D或ifdef  此参数的输出格式可用于前置处理器巨集。
-e或--ed  此参数的输出格式可用于ed的script文件。
-f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。
-H或--speed-large-files  比较大文件时,可加快速度。
-l或--ignore-matching-lines  若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。
-i或--ignore-case  不检查大小写的不同。
-l或--paginate  将结果交由pr程序来分页。
-n或--rcs  将比较结果以RCS的格式来显示。
-N或--new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
-P或--unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。
-q或--brief  仅显示有无差异,不显示详细的信息。
-r或--recursive  比较子目录中的文件。
-s或--report-identical-files  若没有发现任何差异,仍然显示信息。
-S或--starting-file  在比较目录时,从指定的文件开始比较。
-t或--expand-tabs  在输出时,将tab字符展开。
-T或--initial-tab  在每行前面加上tab字符以便对齐。
-u,-U或--unified=  以合并的方式来显示文件内容的不同。
即统一格式的输出。在合并中也使用的是这种模式。

在这里插入图片描述
在这里插入图片描述

diff -u

diff -u file2 file1生成补丁
在这里插入图片描述

-b 保留原文件的内容

 diff -u file1 file3 > file1.patch  ###生成file1的patch文件
 1118  patch -b file1 file1.patch      ###生成file1的补丁文件
 1120  cat file1.orig 					###-b会在生成patch文件的时候会
 保留file1的源文件

-r 比较目录文件的不同,比较的是目录中文件的不同

patch命令

patch的英文解释为: apply a diff file to an original
patch格式
patch [option] [origfile] [patchfile]
我们可以先用diff命令生成patch文件。然后使用patch命令将第二个文件内容修改成第一个文件的内容。

cut命令

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

cut命令得使用格式
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]

参数说明
-b以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c以字符为单位进行分割。
-d自定义分隔符,默认为制表符。
-f与-d一起使用,指定显示哪个区域。指定截取得列
-n取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sort和uniq

sort命令

sort 通常用来排序的命令

参数说明
-b忽略每行前面开始出的空格字符。
-c检查文件是否已经按照顺序排序
-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f排序时,将小写字母视为大写字母。
-i排序时,除了040至176之间的ASCII字符外,忽略其他的字符
-m将几个排序好的文件进行合并。
-M将前面3个字母依照月份的缩写进行排序。
-n依照数值的大小排序。
-u意味着是唯一的(unique),输出的结果是去完重了的。
-o<输出文件> 将排序后的结果存入指定的文件。
-r以相反的顺序来排序。
-t<分隔字符>指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位>以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位

在这里插入图片描述
在这里插入图片描述

uniq命令

uniq 对重复字符做相应的处理
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][–help][–version][输入文件][输出文件]

参数说明
-c或–count在每列旁边显示该行重复出现的次数
-d或–repeated仅显示重复出现的行列
-f<栏位>或–skip-fields=<栏位>忽略比较指定的栏位。
-s<字符位置>或–skip-chars=<字符位置>忽略比较指定的字符
-u或–unique仅显示出现一次的行列。
-w<字符位置>或–check-chars=<字符位置>指定要比较的字符
–help显示帮助
–version显示版本信息
file删除重复的行
-u只显示未重复的行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照员工信息排序
在这里插入图片描述

seq命令

seq命令用于产生从某个数到另外一个数之间的所有整数。

语法
seq [选项]… 尾数
seq [选项]… 首数 尾数
seq [选项]… 首数 增量 尾数

-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同

-f 的使用方式:seq -f"%3g" 9 11 表示的意思是显示9到10的数字,每一位数字占用3个位置。
%后面指定数字的位数 默认是%g,%3g那么数字位数不足部分是空格。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
seq是按数字大小正序排列,需要倒序排列,可以使用 tac
在这里插入图片描述

join命令

jion命令是用来拼接两个文件的命令;
使用方法是找到两个文件中相同的行,将两个文件加以合并并输出到指定文件中。

-a<1或2> 除了显示原来的输出内容之外,还显示指定文件中没有相同栏位的行。
-e<字符串>[文件1][文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
-i或--igore-case 比较栏位内容时,忽略大小写的差异。
-o<格式> 按照指定的格式来显示结果。
-t<字符> 使用栏位的分隔字符。
-v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
-1<栏位> 连接[文件1]指定的栏位。
-2<栏位> 连接[文件2]指定的栏位。
--help 显示帮助。
--version 显示版本信息。

在这里插入图片描述
在这里插入图片描述

join -t : file1 file2 两个文件使用:拼接起来内拼接

join -a1 file1 file2 ###-a1表示显示第一个文件中的内容

在这里插入图片描述

tr命令

tr经常用于文件中大小写的转换;用于转换或删除文件中的字符。从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

参数说明:
-c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d, --delete:删除指令字符
-s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
-t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
--help:显示程序用法信息
--version:显示程序本身的版本信息

在这里插入图片描述
1、大小写的转换

[root@reg tr]# echo "HI WESTOS"
HI WESTOS
[root@reg tr]# echo "HI WESTOS" | tr "A-Z" "a-z"
hi westos

2、tr命令的转换
使用换行替换文件中空格

[root@reg tr]# echo "HI WESTOS" | tr ' '  '\n'
HI
WESTOS

3、删除所有0-9范围内的数字


[root@reg tr]# echo "I am 16 years old" |tr -d '0-9'
I am  years old

在这里插入图片描述
在这里插入图片描述

xargs命令

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

命令格式
somecommand |xargs -item  command

-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。

实例:
1、xargs 用作替换工具,读取输入数据重新格式化后输出

在这里插入图片描述在这里插入图片描述

2、-n的参数
cat test |xargs -n3
在这里插入图片描述
3、 -d自定义一个分界符
在这里插入图片描述
4、-p询问用户是否执行参数
在这里插入图片描述
5、-t 打印出最重要执行的命令,不需要用户进行确认
在这里插入图片描述
6、-I 命令,-I后面的name可以理解为一个变量,这个变量的内容指的就是test文件中的所有内容,-c后面双引号的内容,就是需要执行的参数

[root@reg xargs]# cat test |xargs -I name sh -c "echo name;touch  name"
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
[root@reg xargs]# ls
1  b  d  f  h  j  l  mkdir  o  q  s  test  v  x  z
a  c  e  g  i  k  m  n      p  r  t  u     w  y
[root@reg xargs]# 
```用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

7、xargs 其他应用
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
 cat url-list.txt | xargs wget -c

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值