linux内核xyz,linux基础,shell基础知识,3

shell特殊符_cut命令

特殊符号:

* 任意个任意字符

? 任意一个字符

# 注释字符

\ 脱义字符

| 管道符

d11aa8d91922d6df9b71bfdeaef8db9e.png

cut命令

cut 分割, -d 分隔符 -f 指定段号 -c 指定第几个字符

使用-c参数,不能跟-f和-d配合使用

b58189539016d40cd023b7628c3b06fd.png

sort排序, -n 以数字排序 -r 反序 -t 分隔符 -kn1 或者 -kn1,n2

sort是按照ASCII码表排序的,特殊符号居前,数字,字母,但是环境变量也会影响sort的排序。

8fc3e79063288957ab0f3e471d357b4d.png

523ec9e236ad4436382c1a950fc30f2a.png

sort -n 排序的话,字母和特殊符号会认定为0排在前面

7c124ec671ea0864fc475edb54fe8e26.png

0fe80800d0c395372aac0f6f3f8a434b.png

wc -l 统计行数 -m 统计字符 -w 统计词

在用wc -m参数时,统计是有加上换行符的,用cat -A 1.txt可以查看

7bf1b990211c79a59c2778ed45ea3819.png

0e4d55289cc000c5ca12551cb953b351.png

在用-w参数统计词,是以空白字符为分隔符

da4e719252f128a1f954992aea2ae76c.png

uniq 去重, -c 统计行数

uniq 常跟 sort 配合使用,先排序在去重

55c76413d2dd5de16b9236f5f6650287.png

c4b7146aa83684b5cc6e7f62c2fd9d27.png

还可以配合-c参数使用

cc8c50e1a1f07692ce307de5a0b76546.png

tee 和 > 类似,重定向的同时还在屏幕显示

be69edf875b43da44af86b77932d2afd.png

tee -a 可以追加内容,类似>>

5d9b4f686361d972ebffaa107643db52.png

tr 替换字符,tr 'a' 'b' 大小替换, tr '[a-z]' '[A-Z]'

1b1117c6c4b8b36a23d9593247c6eb1c.png

ceb56298a8943c5c66660cefc9fbe876.png

split 切割, -b 大小(默认单位比特), -l 行数

9606faf61425dd9dfeafdab8d619e4d3.png

6a5e958e1fa85794cda05e40a2605232.png

切割的时候,可以指定前缀

split -b 100K 9.txt ABC 之类的

5273fc32cc1b4287f0e4cbc0313f1707.png

f99b3664a613c0887de928e3cc0dd1e4.png

特殊字符

$ 变量前缀,!$组合,正则里面表示行尾 ;多条命令写到一行,用分号分隔

a6f20e8df501de8894d55f586415637b.png

~用户家目录,后面正则表达式,表示匹配字符 &放到命令后面,会把命令丢到后台运行 [ ] 指定 || (或) 和&&,用于命令之间

|| 或 当前面的执行成功则不再执行后面的,

如果前面的执行不成功,则继续执行后面的。

[ -d 目录 ] || mkdir xxx

&& 与 只有前面的执行成功后,才继续执行后面的

f5cd9c149367329470d004830500b1e7.png

&> 错误和正确的都重定向到某个文件

测试题目

设置环境变量 HISTSIZE , 使其能够保存10000条命令历史。

编辑profile文件 vi /etc/profile 修改HISTSIZE 之后source /etc/profile

6483421a5110f0640415c64afb2e5054.png

1c1d851d2df84b4d8d17baa74bc9f0d9.png

为什么如果这样设置PS1 (PS1="[\u@\h \W]$ ") 显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的?

应该使用单引号:PS1='[\u@\h \W]$'

94a82276ed2c486948ecc381eed497d0.png

想办法把当前目录下的文件的文件名中的小写字母全部替换为大写字母。

for f in ls; do if echo $f |grep -q '[a-z]'; then mv $f echo $f|tr '[a-z]' '[A-Z]';fi; done

9e318d126605b64a6b29b2c317855c8c.png

使用sort以":"为分隔符,对/etc/passwd文件的第5列排序。

45e727411902316c0ee1b8bb550a230b.png

使用cut以":"为分隔符,截出/etc/passwd的第三段字符。

cut -d ":" -f 5 /etc/passwd

17fea5437790e4239a31d78fcd6b678f.png

简述这几个文件的作用: /etc/profile, /etc/bashrc, .bashrc, .bash_profile.

/etc/profile : 设置系统全局环境变量和启动程序,当用户登录Linux时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。预设的系统全局变量包括PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等。

/etc/bashrc : 为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。默认情况下,这个文件主要预设umask以及PS1等。

.bash_profile : 定义用户专有的环境变量和启动程序。当用户登录时,该文件仅仅执行一次。 默认情况下,它设置了一些环境变量,执行用户的.bashrc文件。

.bashrc :该文件包含专用于用户的shell的bash信息,当用户登录时以及每次打开新的shell时,该该文件被读取。可以将用户自定义的alias和变量写到这个文件中。

export 的作用是什么?

export用来声明变量,可以使变量在当前shell和子shell中生效

linux下自定义变量要符合什么样的规则呢?

(1) 设定变量的格式为“a=b”, 其中a为变量名,b为变量的内容,等号两边不能有空格; (2)变量名只能由英、数字以及下划线组成,而且不能以数字开头; (3)当变量内容带有特殊字符(如空格)时,需要加上单引号,变量内容中本身带有单引号的情况则使用双引号; (4)如果变量内容中需要用到其他命令运行结果则可以使用反引号; (5)变量内容可以累加其他变量的内容,需要加双引号。

如何把要运行的命令丢到后台跑?又如何把后台跑的进程给调到前台?

要将运行的命令丢到后台,可以先按CTRL+Z让其暂停, 然后使用bg命令将其丢到后台运行;或者执行命令时添加&后台标识, 格式为“命令+空格+&”。 将后台运行的进程调到前台,可以输入fg快捷键。

列出当前目录下以"test"开头的文件和目录。

7d5a08c5ac2ee4c2deaa19883a74ed08.png

如何把一个命令的输出内容不仅打印到屏幕上而且还可以重定向到一个文件内?

738ada5f388bb48a2c93de7f490e7368.png

假如有个命令很长,我们如何使用一个简单的字符串代替这个复杂的命令呢?请举例说明。

使用命令别名alias

0f956358986365dcaf625f1ce20885a0.png

我如何实现这样的功能,把一条命令丢到后台运行,而且把其正确输出和错误输出同时重定向到一个文件内?

989694523efcdacaf2b62e67ffeb1a4a.png

d72f03e4ea03d5d561dd09903f35929d.png

如何按照大小(假如按照10M)分隔一个大文件,又如何按照行数(假如10000行)分隔?

800b87743237c3879179edc56f9e9260.png

284937a1a8c5af439601b1fe634bf8f1.png

做实验,搞明白 ; && || 这三个符号的含义。

分号:可以用于个分隔多个命令在同一行进行执行。

&&:与 只有前面执行成功,才执行后面,

||:或 只要有一个命令执行成功就终止,执行后面的。

如果只想让某个用户使用某个变量如何做?

编辑用户家目录的.bashrc文件,设置变量然后source即可,如:abc=123

使用哪个命令会把系统当中所有的变量以及当前用户定义的自定义变量列出来

使用set命令

扩展

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令。子级的环境变量不会影响到父级。 fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。 sub-shell执行完毕后返回parent-shell. sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell

exec (exec /directory/script.sh):执行子级的命令后,不再执行父级命令。 exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本. 被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别

source (source /directory/script.sh):执行子级命令后继续执行父级命令,同时子级设置的环境变量会影响到父级的环境变量。 与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值