首页 > 系统服务 > 详细

shell基础知识

时间:2020-01-16 14:16:19      阅读:65      评论:0      收藏:0      [点我收藏+]

一、什么是shell 

    shell是系统跟计算机硬件交互时使用的中间介质,他是系统的一个工具。

    实际上,shell和计算机硬件之间还有一层东西——系统内核。

    用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,shell再传给系统内核,内核再之配硬件执行

  1.1 记录历史命令

    我们执行的命令都会记录在家目录的.bash_history文件中

    #!!

      //连续两个!表示执行上一条命令

    #!n

      //这里n代表数字,表示执行历史的第n条命令

    #!字符串(字符串大于等于1)

      //例如 !pw 表示执行命令历史最近一次以pw开头的命令

  1.2 命令和文件名补全

    tab键可以帮我们补全一个指令,一个文件或一个路径

    连续按两次tab键,会列出所有文件名或命令

  1.3 别名

    #alisa

      //展示目前系统预设的别名

    另外,我们也可以自定义别名,格式:alisa[命令别名]=[‘具体命令‘]

    #alisa aming=‘pwd‘

    #aming

    /root

    #unalisa aming

      //删除自定义别名

    #aming

    bash:aming:未找到命令...

  1.4 通配符

    在bash下,可以用*匹配零个或多个字符,用?匹配一个字符

  1.5 输入/输出重定向

    <               输入重定向

    >               输出重定向(存在则取代)

    >>             追加输出重定向(继续添加)

  1.6 管道符

    前面已经提过管道符 | ,它用于将前一个指令的输出作为后一个指令的输人

  1.7 作业控制

    当运行进程时,可以将它暂停(Ctrl+Z),然后使用fg命令恢复他。

    使用bg调到后台运行,使用Ctrl+C终止

二、变量

  2.1命令env

    使用命令env可以列出系统预设的所有系统变量

    #env  

    下面介绍几个常用的环境变量

    ·HOSTNAME:表示主机名称

    ·SHELL:表示当前用户的shell类型

    ·HISTSIZE:表示历史记录数

    ·MAIL:表示当前用户的邮件存放目录

    ·PATH:该变量决定了shell将到哪个目录里寻找命令或程序

    ·PWD:表示当前目录

    ·LANG:与语言有关的环境变量,多语言环境可修改此环境变量

    ·HOME:表示当前用户的家目录

    ·LOGNAME:当前用户登录的用户名

  2.2 命令set

    使用命令set可以列出系统预设的所有系统变量

    #set 

    set命令不仅能显示系统预设的变量,也能显示用户自定义的变量

    #myname=Aming

    #echo $myname

    Aming

    #set |grep myname

    #exit

    exit

    #echo $myname

    Aming

    使用bash命令可以再打开一个shell,此时先前设置的myname变量就已经不存在了

    退出当前的shell回到原来的shell,myname变量还在。

    如果想一直存在的操作方法是:

    □允许系统内所有用户登录后都能使用该变量。具体的操作方法是:在/etc/profile文件的最后一

    行加入export myname=Aming, 然后运行source /etc/profile就可以生效了。此时再运行bash .

    命令或者切换到其他账户(如su - test)就可以看到效果。如下所示:

    #echo "export myname=Aming" >> /etc/profile

    #source !$

    source /etc/profile

    #bash

    #echo $myname

    Aming

    #exit

    exit

    #su - test

    $echo $myname

    Aming

    □仅允许当前用户使用该变量。具体的操作方法是:在用户主目录下的.bashrc文件的最后一行

    加入export myname=Aming,然后运行source .bashrc就可以生效了。这时再登录test账户,

    myname变量则不会生效了。这里source命令的作用是将目前设定的配置刷新,即不用注销再

    登录也能生效。

    阿铭在上例中使用myname=Aming来设置变量myname,在Linux下设置自定义变量,有哪些规则呢?

    □设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格。

    □变量名只能由字母、数字以及下划线组成,而且不能以数字开头。

    □当变量内容带有特殊字符(如空格)时,需要加上单引号。示例命令如下:

    # myname=‘Aming Li‘

    # echo $myname

    Aming Li

    有一种情况需要你注意,就是变量内容中本身带有单引号,这时就需要加双引号了。示例命令如下:

    # myname="Aming‘s"

    # echo $myname

    Aming‘s

    如果变量内容中需要用到其他命令,运行结果则可以使用反引号。示例命令如下:

    # myname=`pwd`

    # echo $myname

    /root

    变量内容可以累加其他变量的内容,但需要加双引号。示例命令如下:

    # myname= " $LOGNAME " Aming

    # echo $myname

    rootAming

    如果你不小心把双引号错加为单引号,则得不到你想要的结果。示例命令如下:

三、系统环境变量与个人环境变量的配置文件

     □/etc/profile:这个文件预设了几个重要变量,例如:PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE,umask等

    □/etc/bashrc:这个文件主要预设umask以及PS1。PS1就是我们在输入命令时前面的那串字符。

    # echo $PS1

    [\u@\h \W]\$

    其中,\u指用户,\h指主机名,\W指当前目录,\$ 指字符# (如果是普通用户,则显示为$ )。

    □.bash_ profile: 该文件定义了用户的个人化路径与环境变量的文件名称。

    每个用户都可使用该文件输人专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。

    .bashre:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,

    该文件会被读取。例如,你可以将用户自定义的别名或者自定义变量写到这个文件中。

    □.bash_history:用于记录命令历史的

    □.bash_ logout: 当退出shell时,会执行该文件。你可以将一些清理的 工作放到这个文件中。

四、Linux shell中的特殊符号

  4.1 *代表零个或多个任意字符

    这个字符前面已经介绍过,这里再次提到,它的用法如下:

    # ls /tmp/4_6/test*

    /tmp/4_6/test1  /tmp/4_6/test111 /tmp/4_6/test4  /tmp/4_6/test5

  4.2 ?只代表任意一个字符

    这个字符的用法如下:

    # touch /tmp/4_6/testa

    # ls -d /tmp/4_6/test?

    /tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5 /tmp/4_6/testa

    不管是数字还是字母,只要是一一个字符,都能匹配出来。

  4.3 注释符号#

    这个符号在Linux中表示注释说明,即#后面的内容都会被忽略。用法如下:

    # abc=123 #aaaa

    # echo $abc

    123

  4.4 脱义符号\

    这个字符会将后面的特殊符号(如* )还原为普通字符。用法如下:

    # ls -d test\*

    ls:无法访问test*:没有那个文件或目录

  4.5 管道符|

    这个字符前面曾多次出现过,它的作用是将前面命令的输出作为后面命令的输入。这里提到的后

    面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用。

    例如cat、less、head 、tail、grep、cut、sort、WC、uniq、tee、 tr、split、sed、 awk等,

    其中grep、sed和awk是正则表达式

    必须掌握的工具,在第11章中会详细介绍。管道符的用法如下:

    # cat testb.txt |wc -1

    0

  4.6 命令cut

    格式:cut -d ‘分割字符‘ -cf n    (n代表数字)

    □ -d:后面接分割字符,分割字符要用单引号括起来

    □ -c:后面接的是第几个字符

    □ -f:后面接第几个区块

    cut命令的用法如下:

    # cat /etc/passwd|cut -d ‘:‘ -f 1 |head -5

    root

    bin

    daemon

    adm

    lp

    -d选项后面加冒号作为分隔字符,-f 1表示截取第- -段, - f和1之间的空格可有可无。

  4.7 命令sort

    sort命令是用来排序的

    格式:sort [-t 分隔符] [-kn1,n2] [-nru]           n1和n2值得是数字

    □ -t:后面跟分隔符

    □ -n:表示使用纯数字排序

    □ -r:表示反向排序

    □ -kn1,n2:表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段进行排序

    如不加任何选项,则按照首字符向后按ASCII码值进行比较,升序输出

  4.8 命令wc

    wc命令用于统计文档的行数、字符数和词数。

    常用选项:-l(统计行数),-m(统计字符数),-w(统计词数)

  4.9 命令uniq

    uniq命令用来删除重复的行。

    该命令只有-c选项比较常用,它表示统计重复的行数,并把行数写在前面。

    (使用uniq前,必须给文件排序‘sort’,否则不管用)

  4.10 命令tee

    tee命令后面跟文件名,其作用类似于重定向>,但它比重定向多一个功能,即把文件写人后面所

    跟的文件时,还显示在屏幕上。该命令常用于管道符|后。示例命令如下:

    # echo " aaaaaaaaaaaaaaaaaaaaa"I tee testb.txt

    aaaaaaaaaaaaaaaaaaaaaaaaa

    # cat testb. txt

    aaaaaaaaaaaaaaaaaaaaaaaaa

  4.11 命令tr

    tr命令是用来替换字符的

    □ -d:表示删除某个字符,后面要跟删除的字符

    □ -s:表示删除重复的字符

    例如:把/etc/passwd头两行小写换成大写字母

    #head -n2 /etc/passwd |tr ‘[a-z]‘ ‘[A-Z]‘

  4.12 命令split

    split命令用于切割文档,常用-b和-l

    □ -b:表示依据大小来分割文档,单位byte

    #split -b 500 文件名

    □ -l:表示依据行数分割文档

    #split -l 10 文件名

  4.13 特殊符号$

    符号$可以用作变量前面的标识符,还可以和!结合起来使用。

  4.14 特殊符号;

    通常,我们都是在一-行中输入- -个命令,然后回车就运行了。

    如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;。

  4.15 特殊符号~

    符号~表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username。

  4.16 特殊符号&

    如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。比

    如,可以用在sleep后,如下所示:

    # sleep 30 &

    [1] 3808

    # jobs

    [1]+ 运行中      sleep 30 &

  4.17 2>和2>>

    代表错误重定向和错误追加重定向

  4.18 中括号[ ]

    中括号内为字符组合,代表字符组合中的任意-一个,可以是-一个范围(1-3,a-z)

  4.19 特殊符号&&和||

    举例说明两方的区别

    □ command1 ; command2

    □ command1 && command2

    □ command1 || command2

    使用;时,不管command1是否执行成功,都会执行command2。

    使用&&时,只有command1执行成功后,command2才会执行,否则command2不执行。

    使用||时,command1执行成功后 则command2不执行,否则执行command2 ,

    即command1 和command2中总有一条命令会执行。

shell基础知识

原文:https://www.cnblogs.com/wft9/p/12186036.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!