天天看点

SHELL学习--shell脚本基础知识

  1. history保存历史命令1000条,history -c清空;

2.  !string调用最近使用的命令,!vim最近使用的vim;

    !vi:命令历史中最近一次以vi开头的命令;

    !n:!242调用history中第242条命令。

    !!执行上一条命令

    !$上一条命令的最后一个变量

        ####ls /some-path-to-a-directory

            cat !$/some-file.txt = cat /some-path-to-a-directory/some-file.txt

        ####ls testb.txt

            cat !$

3.alias重命名,alias h5='head -5',unalias h5取消重命名。

4.|管道符,连接多个命令,将一个命令的输出重定向到另一个命令,简单说就是将前面运行的结果丢给后面的命令。ps aux|grep mysql,或者ifconfig eth0|grep 'inet addr'过滤包含IP地址的数据包,echo "pass" | passwd --stdin tom将用户tom密码设置为pass

5.输入输出重定向,>覆盖,>>追加,2>错误重定向,2>>错误追加。

    ls > list.txt将ls输出保存到list.txt,

    hostname >> list.txt将主机名追加到list.txt中,

    ls abc install.log 2> error.txt仅将错误输出重定向到error.txt中,

    ls bbb 2>> error.txt  将错误追加到指定文档中,

    ls abc install.log>>all.txt 2>&1  将标准输出1和错误输出2均追加到all.txt

6.作业控制

    快捷键ctrl+a将光标移至行首,ctrl+e移至行为,ctrl+f右移一个,ctrl+b左移一个,ctrl+l清屏,ctrl+u删除光标到行首的字符,ctrl+k删除光标到行尾字符,ctrl+c终止进程,ctrl+z挂起进程,tops可以查看,ctrl+w删除光标前一个单词(以空格为分隔),ctrl+d删除后一个单词

    ctrl+z暂停任务,bg使暂停任务在后台运行,fg调到前台运行

        vmstat1>1.txt               vmstat 1 >/home/jason/vmstat1.log & 使该进程在后台运行&

        ctrl+z                      == bg pid

        jobs

        fg pid/bg pid

    命令序列使用:&开启子shell,使在后台运行,firefox &将前端打开的程序后台执行,tops查看,fg 1调回前台执行;

&使前台程序,挂起到后台,ctrl+z使程序暂停并挂起到后台。fg 1调回前台。

    杀死进程kill

        ps aux |grep vmstat 查看进程号

        kill pid  / kill -9 pid(遇到杀不死的进程)

7. &&多个命令组合执行,但必须前面成功执行再下一个命令,make && make install,ls test.txt && cat test.txt;

    ||多个命令组合,但必须前一个命令执行不成功,才执行下一个,id tom &>/dev/null &&echo "hi, tom" || echo "no such user",通过&>重定向将id输出屏蔽,然后&&和||判断显示语。

8. 变量

    环境变量PATH,shell预设的一个变量,代替了所有常用命令的绝对路径的设定,运行某个命令时不需输入全局路径

    echo $PATH/$HOME/$PWD/$LOGNAME.....显示变量的值

    echo $PATH决定shell在哪些目录下寻找命令或程序;  echo $HOME当前用户的家目录;echo $HISTSIZE历史命令记录的条数;echo $LOGNAME当前用户的登录名;  echo $HOSTNAME显示主机名;echo $SHELL显示shell的类型;

    env查看系统预设的环境变量,登录的用户不一样查询到的环境变量值也不一样

    set查看所有预设环境变量,包括系统预设变量和自定义变量

        myname=aming

        echo $myname

        set |grep myname

    自定义变量只能在当前shell下生效,重开一个shell则不存在,重开一个子shell和切换用户后

        echo "export myname=zhujiasheng" >>/etc/profile 追加,export申明变量

        source !$ 运行生效

            zhujiasheng

        su - jason

            echo $myname

                zhujiasheng(切换用户后任然可以运行该自定义变量)

      export申明变量

            export myname申明变量myname,使子shell也能使用该变量,但切换到其他用户不能使用

            export myname(不加变量名,申明所有自定义变量)

    自定义变量规则:

        1.格式a=b,a为变量名,b变量内容;

        2.变量名只能由英文,数字和下划线组成,不能以数字开头;

        3.变量内容有特殊符号(如空格),追加单引号

            myname='zhu jiasheng'

        4.变量内容本身带有单引号,改双引号

            myname="zhu jia'sheng"

        5.变量内容需要用到其他命令的结果,反引号

            myname=`pwd`

        6.变量内容累加其他变量内容,双引号

            myname="$LOGNAME"zhujiasheng

        单引号和双引号的区别:双引号,不去掉特殊字符的本身作用

                              单引号,使特殊符号失去本身意义。

    pstree把系统所有进程通过树形结构显示,

        # bash  打开子shell

        # pstree |grep bash查看打开的子shell

    取消变量

        unset myname

 9.系统给环境变量和个人环境变量配置文件

    /etc/profile存放PATH ,USER,LOGNAME,HOSTNAME等常用变量

    /etc/bashrc,预设umask和PS1

        echo $PS1显示命令行最前面的字符串[root@localhost ~]#

10.shell中特殊符号

    *零个或多个任意字符;?只代表一个字符,只能匹配一个;#注释说明;

    \脱意字符,ls -d test\*   

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

    |管道符,将前面命令的结果丢给后面的命令。一般作用在文档操作,例如cat,less,head,tail,cut,sort,wc,uniq,tee,split,sed,awk,grep正则表达式必须掌握工具

    cat testb.txt |wc -l用来计算文档有多少行

11.命令 cut

    截取某一字段

    cut -d '分隔符'

    cut -c n  第几个字符

    cut -f n  第几个区块

    head -n2 /etc/passwd |cut -d ';' -f1 

    head -n2 /etc/passwd|cut -c1,5,7截取文件头两行的第1,5,7个字符

12.排序  sort

    -t分隔符;-n使用纯数字排序;-r反向排序;-u去重复;kn1,n2从n1-n2区间进行排序。

    head -n5 /etc/passwd |sort  不加选项,则以首字符排序

    head -n5 /etc/passwd |sort -t : -k3 -n以:为分隔符,第3个字段,以纯数字排序

    head -n5 /etc/passwd |sort -t : -k3,5 -r 以:为分隔符,从第3-5字段,反向排序

13.统计  wc

    -l统计行数;-m 统计字符数;-w统计词数。

    wc /etc/passwd 不加选项,则三个统计值都会显示

    wc -l/-m/-w /etc/passwd

14. 统计重复行数 uniq

    -c 统计重复行数,并重复的行数写在最前面

    使用uniq前提对文件排序

    vim uniqtest.txt

        111

        222

        333

    sort uniqtest.txt |uniq -c

15.tee 类似重定向,把文件重定向到指定文件的同时,显示被写入的文件

      echo "aaaaaaaaaa" |tee  teetest.txt

    tr  替换字符,只针对字符,不能字符串

        head -n2 /etc/passwd |tr 'r' 'R'

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

16.文档切割 split

    -b 依据大小切割文档,单位byte

    -l 依据行数切割文档

继续阅读