微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shell脚本基础知识

一. 别名

我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。如果不想用了,还可以用unalias解除别名功能。直接敲alias会看到目前系统预设的alias。下面是系统预设的alias指令:

你也可以自定义你想要的指令别名。alias语法很简单,alias [命令别名]=[’具体的命令’]。

二. 记录命令历史

我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户主目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。

三. 子shell以及变量

如果在当前shell中运行bash指令后,则会进入一个新的shell,这个shell就是原来shell的子shell了,不妨你用pstree指令来查看一下。pstree这个指令会把linux系统中所有进程通过树形结构打印出来。

在父shell中设定一个变量后,进入子shell后该变量是不会生效的,如果想让这个变量在子shell中生效则要用到export指令。

使用env命令即可全部列出系统预设的全部系统变量了。

四. 系统环境变量与个人环境变量的配置文件

上面讲到了系统的变量,在linux系统中,为什么用户一登陆shell就自动有了这些变量呢?这些变量被存到了哪里呢?

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

  • /etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是我们在敲命令时,前面那串字符了。

除了两个系统级别的配置文件外,每个用户的主目录下还有几个这样的隐藏文件

五. linux shell中的特殊符号

  1. * :代表零个或多个字符或数字。

  2. ? :只代表一个任意的字符。

  3. [ ] :中括号,中间为字符组合,代表中间字符中的任意一个

  4. # :这个符号在linux中表示注释说明的意思,即”#”后面的内容linux忽略掉。

  5. \ :转意字符,将后面的特殊符号(例如”*” )还原为普通字符。

  6. ;:分号。平时我们都是在一行中敲一个命令,然后回车就运行了,那么想在一行中运行两个或两个以上的命令如何呢?则需要在命令之间加一个”;”了。

  7. $ :除了用于变量前面的标识符外,还有一个妙用,就是和’!’结合起来使用。

    !$’表示上条命中最后一个变量(也许称为变量不合适,总之就是上条命令中最后出现的那个东西)例如上边命令最后是test?,那么在当前命令下输入!$则代表test?。

  8. ~ :用户的主目录,如果是root则是 /root ,普通用户则是 /home/username。

  9. & :如果想把一条命令放到后台执行的话,则需要加上这个符号。通常用于命令运行时间非常长的情况。

    使用jobs可以查看当前shell中后台执行的任务。用fg可以调到前台执行。这里的sleep命令就是休眠的意思,后面跟数字,单位为秒。

  10. >,>>,2>,2>> :输入重定向的命令是<,输出重定向的命令是>,追加重定向>>。,另外还有错误重定向2>,以及错误追加重定向2>>。 输入重定向用于改变命令的输入,输出重定向用于改变命令的输出输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。

  11. && 与 ||:在上面刚刚提到了分号,用于多条命令间的分隔符。另外还有两个可以用于多条命令中间的特殊符号,那就是 “&&”和”||”。下面把这几种情况全列出:

    1) command1 ; command2
    2) command1 && command2
    3) command1 || command2

    使用”;”时,不管command1是否执行成功都会执行command2; 使用”&&”时,只有command1执行成功后,command2才会执行,否则command2不执行;使用”||”时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行。

  12. | :管道符,前面多次说过,它的作用在于将符号前面命令的结果丢给符号后面的命令。这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用,例如cat,less,head,tail,grep,cut,sort,wc,uniq,tee,tr,split,sed,awk等等,其中grep,awk为正则表达式必须掌握的工具。

    1)grep :过滤一个或多个字符

    2) cut :截取一个字段

    语法:cut -d “分隔字符” [-cf] n 这里的n是数字

    -d :后面跟分隔字符,分隔字符要用双引号括起来

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

    -f :后面接的是第几个区块(类似数组的第几个元素,下标从1开始)

    3) sort :用做排序

    语法:sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2

    -t 分隔符 :作用跟cut的-d一个意思

    -n :使用纯数字排序

    -r :反向排序

    -u :去重复

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


    k1表示用root、bin、dameon、adm、lp按字母排序,k3用0,1,2,3,4来按数字排序。

    4) uniq :去重复的行,常用的选项只有一个

    -c :统计重复的行数,并把行数写在前面(有多少行重复)

    5)tee :后跟文件名,类似与重定向”>”,但是比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上。

    6) wc :统计文档的行数、字符数、词数,常用的选项为:

    -l :统计行数

    -m :统计字符数

    -w :统计词数

    7)tr :替换字符,常用来处理文档中出现的特殊符号,如DOS文档中出现的^M符号。常用的选项有两个:

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

    -s :把重复的字符去掉

    最常用的就是小大写转换: tr ‘[a-z]’ ‘[A-Z]’


    tr命令并不会修改文件

    8)split :切割文档,常用选项:

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

    -l :依据行数来分割文档

参考文章http://www.92csz.com/study/linux/12.htm

如何你觉得本文对你有所帮助,欢迎打赏并谢谢你的支持

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐