您的位置:首页 > 运维架构 > Shell

linux基础,shell基础知识,3

2017-11-16 00:00 746 查看
shell特殊符_cut命令

特殊符号:

*    任意个任意字符
?    任意一个字符
#    注释字符
\    脱义字符
|    管道符




cut命令

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

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



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

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





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





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

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





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



uniq 去重, -c 统计行数

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





还可以配合-c参数使用



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



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



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





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





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

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





特殊字符

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



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

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

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

[ -d 目录 ] || mkdir xxx

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



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

测试题目

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

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





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

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



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

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



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



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

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



简述这几个文件的作用: /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"开头的文件和目录。



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



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

使用命令别名alias



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





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





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

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

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

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

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

编辑用户家目录的.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中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: