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
使用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中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.
特殊符号:
* 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符
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中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.
相关文章推荐
- linux基础知识之shell(2)
- Linux简单入门(十二)shell脚本之前的基础知识
- Linux基础-shell脚本知识整理和脚本编写----------变量、运算符、流程控制、函数、计划任务(发送邮件)
- Linux操作系统基础解析之(七)——Bash(Shell)基础知识(5)
- Linux下Shell基础知识简介
- Linux下Shell基础知识简介
- Linux学习3_学习shell脚本前应具备的基础知识
- linux shell脚本基础知识笔记
- Linux操作系统基础解析之(七)——Bash(Shell)基础知识(6)
- Linux基础知识——常用shell命令介绍(三)
- linux bashl学习(二) shell基础知识-番外篇
- linux变量及shell基础知识
- Linux 基础知识:Bash Shell 内置命令
- Linux——学习shell脚本之前的基础知识
- Linux操作系统Shell基础知识
- Linux基础知识——常用shell命令介绍(一)
- Linux小白日记(三)shell基础知识篇
- Linux基础知识——shell命令类型及命令使用帮助
- Linux基础知识之————shell学习总结之变量引用
- linux基础,shell基础知识,1