zxhfighter
7/21/2014 - 11:02 AM

shell introduction

shell introduction

Shell 简介

  1. 程序必须以下面的行开始,并放在文件的第一行 #!/bin/sh shell
  2. 编辑好脚本后需要使其可执行 chmod +x filename,然后执行sh ./filename
  3. shell脚本中的注释以#开头
  4. shell脚本中,所有变量由字符串组成,且不需要声明,赋值为变量名=值,取值用$变量名
  5. 假如变量为num=2,输出需要使用大括号echo "this is the ${num}nd"
  6. 除了程序中定义的变量外,还有环境变量,由export关键字处理过的变量叫做环境变量
  7. ls -al 以长格式列出所有文件,包括隐藏的(以点开头的)
  8. echo msg 输出msg,msg可以带变量
  9. 计算文件行数、单词树以及字符数:wc -l file 或 wc -w file 或 wc -c file
  10. 文件拷贝(强制覆盖和迭代)cp -fr sourcefile destfile
  11. 文件移动(强制) mv -f oldname newname
  12. 删除目录,忽略不存在的目录并迭代删除 rm -fr dir
  13. 在文件内搜索字符串 grep 'searchstring' file.txt
  14. 输出每行第5个到第9个字符 cut -b5-9 file.txt
  15. 打印文件内容 cat file.txt
  16. 得到文件类型 file file.txt
  17. 提示用户输入 read var
  18. 对file.txt文件中的行排序 sort file.txt
  19. 删除文件中重复行 sort file.txt | uniq
  20. 根据文件名搜索 find . -name filename -print
  21. 打印文本开头几行或者末尾几行 head file 或者 tail file
  22. sed命令可以用来新增(a)、删除(d)、插入(i)、替换(s)等功能 cat text | sed 's/oldstr/newstr/g' > newtext
  23. awk用来从文本文件中提取字段,默认分隔符为空格,可以试用-F指定其他分隔符 cat file.txt | awk -F, '{print $1 "," $3}'
  24. 管道 | ,将一个命令的输出作为另外一个命令的输入
  25. 重定向 > 写入文件并覆盖旧文件,重定向 >> 加到文件尾部,保留旧文件内容
  26. 反短斜线可以讲一个命令的输出作为另外一个命令的一个命令行参数 tar -zcvf lastmod.tar.gz find . -mtime -1 -type f -print
  27. 流程控制 if ...; then ... elif ...; then ... else ... fi
  28. 通常用[] 来表示条件测试,要确保方括号两边的空格 [ -f "somefile" ] 判断是否是一个文件 [ -x "/bin/ls" ] 判断/bin/ls是否存在并有可执行权限 [ -n "$var" ] 判断变量$var是否有值 [ "$a" = "$b" ] 判断$a和$b是否相等
  29. if流程语句的快捷操作,很熟悉吧,_ [ -f "/etc/shadow" ] && echo "this computer uses shadow passwords"
  30. case 表达式可以用来匹配一个给定的字符串,而不是数字 #!/bin/sh ftype=file "$1" case "$ftype" in "$1: Zip archive") unzip "$1" ;; "$1: gzip compressed") gunzip "$1" ;; "$1: bzip2 compressed"*) bunzip "$1" ;; *) error "File $1 can not be uncompressed with smartzip" ;; esac
  31. select表达式是一种bash的扩展应用,尤其擅长于交互式使用,这里不详述。
  32. while循环语句,break和continue关键词同c语言 while ...; do done
  33. for-loop表达式遍历字符串列表 for var in A B C ; do echo "var is $var" done
  34. 单引号可以防止任何遍历扩展,双引号可以防止通配符扩展但允许变量扩展 #!/bin/sh echo $SHELL echo "$SHELL" echo ‘$SHELL’ 上述运行的结果是什么呢?
  35. $* 表示整个参数串 $# 表示参数串中参数个数 $1表示第一个参数 #!/bin/sh if [ $# -lt 3 ] ; then cat << HELP exit 0 fi OLD = "$1" NEW = "$2" shift shift for file in $*; do if [ -f "$file" ] ; then newfile = echo "$file" | sed "s/${OLD}/${NEW}/g" if [ -f "$newfile" ] ; then echo "ERROR: $newfile exists already" else echo "renaming $file to $newfile ..." mv "$file" "$newfile" fi fi done
  36. 最简单的调试命令当然是使用echo命令(同javascript中的alert或者console.log) PS. 我们希望您现在可以开始写您自己的shell脚本,希望您玩得开心!