Linux shell学习

shell特点——

Linux有多种shell可以使用,默认的为bash,bash有以下几个主要特点。

1、命令记忆能力

在命令行中按上下键可以找到一个前/后输入的命令,这些命令记录在~/.bash_history中,这个文件记录的是上一次登录shell以前所执行过的所有命令,当前登录shell所执行的命令则暂存在临时内存中,成功注销系统后这些命令更新到文件中。历史命令可通过history命令查看,再次执行某个历史命令时可结合叹号!一起使用,叹号后面跟历史命令的序号。如果多重登录bash,即开几个bash窗口时,最后注销的那个bash会把前面bash的历史记录覆盖掉。

2、Tab键

在部分命令或文件未输入完全时,按Tab键一次可补全命令或文件,按Tab键两次可列出所有可用的命令或文件。

3、命令别名设置功能

使用alias可给一个较长的命令设置一个简单的别名,unalias取消设置,如下例子:

$alias lm='ls -alt'

上面alias命令设置别名只对当前bash有效,且bash退出后别名也就失效了,如何设置一次就可以永远在所有的bash中都有效呢?方法是把上面的别名设置命令写入~/.bashrc文件中,这个文件读入shell可使用source命令,也可以使用句点,或者重启电脑,这样便一劳永逸了。

4、内置命令type

通过type命令我们可以知道一个命令的类型,是内置命令,还是外部命令或者是一个别名,type命令本身是一个内置命令。type常用三个参数,-t显示命令类型,-p仅当命令类型为外部命令时才显示命令全路径,-a显示PATH环境变量中所有与命令相关的指令信息,也包括alias别名命令。

5、命令执行

命令执行需要按下Enter键,如果命令需要多行输入时,可在Enter键前紧接着一个\字符进行转义,之间不能有空格。

6、bash环境

1)路径与命令查找有一定的顺序,它们的先后顺序为:相对或绝对路径执行命令>alias命令>builtin命令>通过$PATH环境变量顺序找到的第一个命令。

2)我们可以自定义Linux登录与欢迎信息,配置文件为/etc/issue和/etc/motd,而/etc/issue.net是提供给telnet这个远程登录程序用的。

shell变量——

如其它编程语言一样,shell中也可以自定义变量,但有一定的规则,总结如下。

1、例如常见的环境变量PATH,变量的显示可通过echo命令查看,变量前要加$符号,变量可选择性地使用一对花括号括起来。

2、变量通过等号=赋值,等号两边不能有空格。

3、变量名称只能是英文或数字,开头字符不能为数字。

4、变量内容包含特殊字符时,可用转义字符\转义,双引号内的特殊字符如$保持原本特性,单引号内的特殊字符如$就是个普通字符,引号成对出现,从左向右匹配。

5、在一串命令中包含了其它命令时,其它的命令可以使用反单引号`命令`或者美元符号结合圆括号$(命令)的方式,这种命令会被先执行,执行结果作为输入信息。

6、变量累加内容时可用”$变量名称”或${变量名称}操作,如下:

$PATH=''$PATH''xxx
$PATH=${PATH}xxx

7、变量需要在子进程生效时,export这个变量,使其成为环境变量。进入一个子进程可以使用bash命令,退出时使用exit命令。

8、取消变量时使用unset。

9、环境变量查看可使用env命令,使用export命令也可以,set命令查看所有变量,包括环境变量和自定义变量。

10、declare命令用于声明变量类型,类似于typeset,-a表示数组,-i表示整数,-x类似于export,-r指定变量只读。

11、几个特殊变量:PS1为命令提示符,PS2为使用转义字符后第二行命令的提示符,$为本shell的PID,?为上个执行命令的回传码,回传码为0表示命令执行成功。

12、read命令可以读取键盘输入到变量,-p参数可以指定提示信息,例如:

$read -p ''please input your name:'' name

13、ulimit命令可以设置用户对系统资源使用的限制。

14、变量内容的删除可使用#、##、%、%%符号,内容替换可使用/、//符号。

${变量#关键词}——从左向右匹配,删除最短数据。
${变量##关键词}——从左向右匹配,删除最长数据。
${变量%关键词}——从右向左匹配,删除最短数据。
${变量%%关键词}——从右向左匹配,删除最长数据。
${变量/旧字符串/新字符串}——从左向右匹配,删除第一个匹配的数据。
${变量//旧字符串/新字符串}——从左向右匹配,删除所有匹配的数据。

15、变量值测试与替换可使用-、+、=、?、:符号等,效果如下:

常用组合键——

Ctrl + C:终止目前的命令。
Ctrl + D:输入结束EOF,可退出当前shell。
Ctrl + M:Enter键。
Ctrl + S:暂停屏幕的输出。
Ctrl + Q:回复屏幕的输出。
Ctrl + U:在提示字符下,将整行命令删除。
Ctrl + Z:暂停目前的命令。

常见通配符与特殊符号——

*:任意数目个任意字符。
?:任意一个字符。
[abcd]:任意一个方括号内的字符,即a、b、c、d中任意一个。
[a-z]:任意一个从a到z范围内的字符,关键在于中间的减号,表示范围。
[^abc]:^代表反向选择,即除了abc之外,任意一个其它的字符。
#:注释符号。
\:转义字符。
|:管线。
;:分号,连续几个命令间的分隔符。
~:用户主目录。
$:用于读取变量。
&:工作控制,当前命令后台作业。
!:逻辑非。
/:路径分隔符。
>、>>:数据流重定向,输出,分别是替换和追加。
2>、2>>:数据流重定向,错误输出,数字2与尖括号之间没有空格。
<、<<:数据流重定向,输入。
' ':单引号,上面提到了,不具有变量替换功能。
'' '':双引号,具有变量替换功能
` `:符号之间为可执行命令,等同于$()。
( ):相当于子shell。
{ }:命令区块的组合。

数据流重定向用法举例——

stdin、stdout、stderr其实是三个特殊的文件,文件标识符分别为0、1、2,下面的例子用到了 这几个数字。
把纯文本文件from中的内容复制到文件to,使用数据流重定向有以下两种方法:

$cat from > to
$cat > to < from

有时候执行某个命令时,有标准输出,也有标准错误输出,把标准输出重定向到文件file:

$command > file

把标准错误输出重定向到文件file:

$command 2> file

把标准输出、标注错误输出同时重定向到文件file有以下三种方法:

$command > file 2>&1
$command 2> file >&2
$command &> file

注意上面数字的用法。
/dev/null是一个特殊文件,可以理解为一个无限大的垃圾站,可以把任意不想要的数据重定向到这个文件里。

命令行连续执行几个命令——
方法一:使用分号

$command1; command2

方法二:使用&&和||符号

$command1 && command2
$command1 || command2

&&和||也就是通常所说的短路符号。

管线命令——

1、管线

管线即一个竖线|,左边的命令要有标准输出,且仅会处理标准输出,标准错误则忽略,右边的命令要能接受标准输入,下面介绍几个常用的管线命令。

2、cut

以行为单位,截取部分数据。

$echo $PATH | cut -d ':' -f 1

在PATH环境变量中,-d指定分隔符为冒号,冒号把PATH环境变量中的内容分割开,-f指定截取分割后的第几个字段,这里为第1个字段,还可以选择多个字段,以逗号隔开。-d指定的分隔符可以是空格,如下命令:

$last | cut -d ' ' -f 1
$export | cut -c 10-20

-c截取了每行第10个到第20个的字符。

3、grep

以行为单位,匹配目标字符串,匹配成功则输出整行内容,如:

$top | grep init

下面介绍几个常用的参数:
-c:计算字符串匹配的次数。
-i:忽略大小写。
-n:输出行号。
-v:反向选择,即输出没有匹配到字符串的行。
grep也可以单独使用,格式如下:

$grep [options] <string> <filename>

4、sort

sort即排序,如:

$ls | sort -r

-r表示反向排序。

5、uniq

uniq用于处理重复数据,只筛选一次,如:

$last | cut -d ' ' -f 1 | uniq -c

显示每一个帐号登入总次数。

6、wc

wc统计文本中有多少行、字符串、字符,如:

$wc filename

其中,-l可以统计行数,-w统计字符串,-c统计字符。

7、tee

从前面的几个命令可以看出,数据流重定向到文件后,屏幕就没有输出了,而这个tee就可以双向定向,一边到文件,一边到屏幕,如:

$ls | tee filename

ls的结果重定向到filename的同时也输出到了屏幕。

8、tr

tr用来删除或替换字符串。

$ls | tr [a-z] [A-Z]

如上例子,tr把ls的结果中的小写字母全部替换为了大写。

$ls | tr -d 'string'

-d参数指定要删除的字符串。

9、col

col过滤一些数据,选项与参数:
-x:将tab键转换成对等的空格键。
-b:在文件内有反斜杠/时,仅保留反斜杠最后接的那个字符。

10、join

把两行数据合并为一行,格式如下:

$join [options] file1 file2

选项与参数如下:

-t <string>:join默认以空格符分隔数据,-t指定具体的分割符,并且在file1和file2中查找string,查找成功时,把file1和file2的两行数据连成一行,且string只显示一次,在行首显示。 -i:忽略大小写。 -1 <num>:数字1,指定第一个文档file1要用哪个字段来分析。 -2 <num>:数字2,指定第二个文档file2要用哪个字段来分析。

11、paste

把多个文本行合并为一行,默认以tab键作为分隔符号,语法格式如下:

$paste [options] [files]

常用参数为-d,指定分隔符。

12、expand

expand将tab键转换为空格。

13、split

将大文件分隔为多个小文件,语法格式如下:

$split [options] [file] PREFIX

常用选项为-b,指定小文件大小,-l参数指定小文件行数。PREFIX为小文件前缀,可以选择性地指定为自定义的字符串。

14、xargs

xargs读入标准输入,以空格符或换行符作为分隔,把标准输入分隔成多个参数,然后执行指定的命令,格式如下:

$xargs [options] command

例如,下面的命令,在/tmp目录下查找名字为core的文件,

$find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f 

……….

你可能感兴趣的:(shell)