Shell基础知识点

  1. 通过/etc/shells文件下查看可用的shell。
  2. 通过/etc/passwd查看不同账号所使用的shell。
  3. 在~/.bash_history文件查看历史命令记录。
  4. 利用alias配置别名,例如alias lm=‘ls -al’,利用unalias取消别名。
  5. 利用type查看命令具体信息,包括是否是bash内建的变量,显示包含该命令的环境变量,别名 。
  6. 输入过程可用\Enter来换行,反斜杠和Enter之间无空格 。
  7. 变量在赋值时等号两边不能出现空格(之前在这上面踩过坑,记得否,这个和java规范有点点不同)。
  8. 双引号中文本的变量可以被实际值替换,而单引号中的变量不会利用实际值替换。
  9. export path 利用export path使变量变成环境变量。如果后面没有接参数,那么会打印所有的环境变量。(使用declare使环境变量变成自定义变量)。
  10. 利用unset取消变量。
  11. 利用环境变量RANDOM产生0到32767之间的整数,其他的随机数均可通过数学计算得出。
  12. 用set查看所有变量,包括环境变量和自定义变量。
  13. declare [-aixr] variable 申明变量类型。a申明数组,i申明整形,x申明环境变量,r申明只读变量。如果declare后面没有参数,那么系统将会显示所有的变量与内容,同set命令。(typeset的作用同declare,参数亦一样)。利用declare +aixr variable可以取消相应的类型。
  14. ${variable#要删除的字符},从前往后搜索,删除符合的最短字符。${variable##要删除的字符},从前往后搜索,删除满足条件的最长字符。但是不影响variable的值。在要删除的字符中可以添加*通配符匹配。
  15. ${variable%要删除的字符},${variable%%要删除的字符},意义同14点,不同的是,在查找字符串的时候,#是从前往后搜索。%是从后向前搜索。
  16. ${variable/srcStr/dstStr/} 利用detStr替换第一个srcStr。
  17. new_var=${old_var-content},如果old_var未申明,则将content的值赋给new_var,否则将old_var的值赋给new_var。
  18. new_var=${old_var:-content},若old_var未申明或者为空字符串,剩余同17点。
  19. history n n指查看最近n条命令。history -w强制将当前历史记录数据写入~/.bash_history文件中。一般可以这样使用,先利用history显示命令条数,然后利用!n,执行第n条命令。利用!str执行历史记录中str开头的命令。!!同向上箭头一样,执行上一个命令。
  20. 命令的搜索顺序如下:1.相对/绝对路径指定命令2.alias指定的命令 3.bash内建命令 4.PATH环境变量指定的路径命令。可以通过type -a 命令 查看命令的顺序。如type -a echo。
  21. login shell会通过/etc/profile文件读取整体环境配置,即对所有用户都生效的配置。 该配置文件会读取一些其他的文件来设置bash环境。
  22. 在login shell读取整体配置文件/etc/profile后,接下来会继续读取个人配置文件,而个人配置文件会按照先后顺序读取1.~/.bash_profile 2.~/.bash_login 3.~/.profile,如果其中一个存在则不会读取另外两个。
  23. 在no-login shell非登陆情况下,bash仅仅会读取~/.bashrc文件而已。
  24. 利用source或者.将配置文件读入到shell环境中,而不用注销在登录。
  25. 若要将标准输出和标准错误输出到同一个文件,写法为:> fileName 2> 1 > fileName。
  26. 针对每行信息进行切割,如cut -d “分割字符” -f fields,其中fields一般是数字,即显示切割后的第几个字符。 cut -c 字符区间,显示指定的字符区间的字符。
  27. 利用tee命令进行双向重导向,即将标准输入输出既输入输出到文件,也输入输出到屏幕。
  28. tr -d set 删除信息中的set字符,tr [a-z] [A-Z] 将所有的小写变成大写
  29. join命令处理两个文件中有相同数据的那一行,才将他们加在一起。如join -t “:” file1 file2 指文件中以:分隔的第一列数据如果文件1和文件2相同,则把2个文件中该行的数据整合成一行,并且文件2中的第一列数据不再显示。如join -t “:” -1 4 file1 -2 3 file2 指文件利用:分隔,取第一个文件的第4列数据,取文件2的第3列数据,如果相同,则把2个文件中该行的数据整合到一行,并且将该数据提取到行首。
  30. paste 将两个文件对应行显示在一行,中间默认用tab键隔开,利用-d可以设置分隔符,其中可以用-获取标准输入来代替file。
  31. expand [-t] file 将文件中的tab键利用空格来替换,默认是8个空格,利用-t可以指定空格个数。如expand -t 4 file,其中不能指定为0。(参考unexpand将空白转成tab)。
  32. 利用split进行文件分隔。split [-bl] file prefix,其中-b后面的参数指定分割成的文件大小,可加单位,如b,k,m等。 -l 后面的参数指定按照行数来分割文件,prefix作为分隔文件的前导文件(分割后的文件均会以prefix开头,系统会在后面加上字符区分不同的文件)。利用 cat prefix* >> newFile 将分割的文件合成一个文件(即利用数据重定向)。
  33. grep “查找字符” 文件名 可以搜索相关关键字
  34. man ascii 查看ascii码表
  35. cut -d “分割符” -f 指定列
  36. 利用sh *.sh或者./*sh来执行脚本,系统会开启一个新的子bash程序来执行该脚本文件,脚本执行完毕后数据均会移除。故在父bash程序中看不到该sh文件中所定义的变量及其他数据。 而利用.或者source执行脚本则是在当前bash环境中执行,故可以读取到脚本中的数据。
    利用sh或绝对/相对路径执行
    利用source命令执行
  37. 利用test命令测试文件类型,文件权限,整数之间比较,字符串判定等。
  38. 利用if写条件语句时,如果用[ ]写条件表达式,那么if和 [ 之间一定要有空格,否则系统会报有语法错误。 同时[ ]内部的表达式每个元素之间都需要空格。 可以参考一些系统的脚本文件,例如/etc/profile等。
  39. echo 命令不换行输出 echo “it is ok\c”
  40. 利用awk处理字符串时,一般需要文件或者标准输入,标准输入可以利用echo例如echo $var | awk match($0, regular_express); print($0),直接在awk命令后面使用<是无效的。
  41. 在mac上通过sh可以正常运行的脚本,在Ubuntu上报语法错误。网上资料说是部分bash不兼容的问题,可以更改执行方式,例如 bash 脚本.sh或者 . 脚本.sh
  42. fork炸弹 :(){ :|:& };:
  43. 对文件的名的提取可以通过${var%通配符}来获取
  44. 删除文件中的重复行 sort -n test.txt | uniq
  45. 变量 说明
    $0 脚本名称
    $n 传递给脚本或函数的第n个参数
    $! 上一个被执行的命令的pid
    $? 上一个命令退出的状态
    $$ 脚本的pid
    $# 传递给脚本或函数的参数个数
    $@ 传递给脚本/函数的所有参数(识别每个参数)
    $* 传递给脚本/函数的所有参数(把所有参数当成一个字符串)
  46. 46.

猜你喜欢

转载自blog.csdn.net/honeysx/article/details/56482393
今日推荐