SHELL笔记

来源:互联网 发布:淘宝打不开微信链接 编辑:程序博客网 时间:2024/06/14 21:00

2016-05-30
1. Shell 参数
- $0 Shell本身的文件名
- $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…
- $$ Shell本身的PID(ProcessID)
- $! Shell最后运行的后台Process的PID
- $? 最后运行的命令的结束代码(返回值)
- $- 使用Set命令设定的Flag一览
- $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有数。
- $@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
- $# 添加到Shell的参数个数

  1. wc –l file wc -w file wc -c file
    分别计算文件的行数(line) 、单词数(word)和字符数(character)
  2. grep ‘pattern’ file
    在文件内搜索字符串或和正则表达式匹配的字符串
  3. cut -b column file
    将指定范围内的文件内容输出到标准输出设备 (屏幕) 上。 比如: 输出5每至行9第个字符 cut -b5-9 file.txt, 注意不要和 cat 命令混淆,这是两个完全不同的命令
  4. cat file.txt
    输出文件内容到标准输出设备(屏幕)上
  5. file somefile
    取得文件 somefile 的文件类型
  6. read var
    read var 提示用户输入,并将输入内容赋值给变量var
  7. sort file.txt
    对 file.txt 文件所有行进行排序(显示在终端上,并不改变源文件)
  8. uniq
    只输出文件中内容不一致的行,如: sort file.txt | uniq
  9. expr
    进行数学运算,如要进行 2+3 的运算,命令为: expr 2 “+” 3
  10. find
    搜索文件,如根据文件名搜索:find . -name filename -print
  11. tee
    将数据输出到标准输出设备(屏幕)和文件,比如:somecommand|teeoutfile

    • firstname file
      返回不包含路径的文件名,如: basename /bin/tux 会返回 tux
    • dirname file
      返回文件所在路径,如:dirname /bin/tux 会返回 /bin
    • head file
      打印文本文件开头几行
    • tail file
      打印文件末尾几行
  12. 查找替换sed
    是一个基本的查找替换程序。 可以从标准输入 (如命令管道) 读入文本, 并将结果输出到标准输出幕)(;屏 该命令采用正则表达式进行搜索。不要和 shell 中的通配符相混淆。比如将 ubuntu 替换为 Ubuntu :cat text.file | sed ‘s/ubuntu/Ubuntu/’ > newtext.file
  13. awk
    best awk document
    awk
    用来提取文本文件中的字段。 缺省的字段分割符是空格, 可以使用-F 指定其它分割符。cat file.txt | awk -F, '{print $1 "," $3 }', 这里我们使用 , 作为字段分割符, 同时打印第一和第三个字段。 如果该文件内容Ad为am Bor, 34, IndiaKerry Miller, 22, USA,则上述命令的输出为:Adam Bor, IndiaKerry Miller, USA

  14. print与printf
    awk中同时提供了print和printf两种打印输出的函数。

    其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。

    printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

    awk -F ':' '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

  15. 管道,重定向,backtick(`)

    • 管道 (|) 将一个命令的输出作为另外一个命令的输入
      grep "hello" file.txt | wc -l
    • 重定向
      将命令的结果输出到文件,而不是标准输出(屏幕)
    • > 写入文件并复盖旧文件
    • ‘>>’ 加到文件末尾
    • backtick()
      反短斜线可以将一个命令的输出作为其它命令的命令行参数。
      将过去24小时内修改过的文件打包
      #!/bin/sh
      # The ticks are backticks (
      ) not normal quotes (‘):
      tar -zcvf lastmod.tar.gzfind . -mtime -1 -type f -print
  16. 流程控制
    1. if

      大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可 读等等……通常用” [ ] “来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。
      • [ -f “somefile” ] :判断是否是一个文件
      • [ -x “/bin/ls” ] :判断/bin/ls 是否存在并有可执行权限
      • [ -n “var"]:var 变量是否有值
      • [ “a"="b” ] :判断ab 是否相等
        通过man test查看所有测试表达式可以比较和判断的类型
  17. 逻辑操作符&& ||
    [ -f "/etc/shadow" ] && echo "This computer uses shadow passwords"
    表示如果/etc/shadow 文件存在, 则打印”This computer uses shadow passwords”。

    打印错误信息:
    #!/bin/sh
    mailfolder=/var/spool/mail/james
    [ -r “mailfolder"]||echo"Cannotread$mailfolder;exit1;echomailfolder has mail from:”
    grep “^From ” $mailfolder

    该脚本首先判断 mailfolder 是否可读, 如果可读则打印该文件中的”From” 一行。 如果不可读则或操作生效,
    打印错误信息后脚本退出。

  18. case 语句
    case 表达式可以用来匹配一个给定的字符串,而不是数字(可别和C 语言里的 switch…case 混淆) 。

    • 格式

      case…in
      …)do something here;;
      esac

    • 例子:smartzip脚本
      自动辨别出给定文件的类型,并自动解压
      ftype=file "$1"
      case “ftypein1:Zip archive”*)
      unzip “1;;1:gzip compressed”*)
      gunzip “s1;;1: bzip2 compressed"*) bunzip2 "1;;)errorFile1 can not be uncompressed with smartzip”;;
      esac

  19. select语句

    • 格式
      select var in …; do
      break;
      done
      … now $var can be use
    • 例子
      #!/bin/sh
      echo “What is your favourite OS?”
      select var in “Linux” “Gnu Hurd” “Free BSD” “Other”; do break
      done
      echo “Youhave selected $var”
    • 结果
      What is your favourite OS? 1) Linux
      2) Gnu Hurd
      3) Free BSD
      4) Other
      #? 1
      You have selected Linux
  20. while/for循环

    • 格式
      while…;do

      done
0 0