shell脚本总结
shell总结 shell脚本的本质是shell命令的有序集合 建立shell脚本的步骤:建立shell脚本,编写任意多行操作系统命令或shell命令,增加文件的执行权限,结束 shell变量 shell允许用户建立变量存储数据,但不支持数据类型。将任何赋给变量的值都解释为一串字符 shell有如下四种变量:用户自定义变量,位置变量,预定义变量,环境变量 用户自定义变量: 定义变量:COUNT=1 使用时前面加$:echo$COUNT 删除变量的赋值:unsetCOUNT 位置变量: $0与键入的命令行一样,包含脚本文件名 $1,$2...$9分别包含第一个到第九个命令行参数 $#包含命令行参数的个数 $*包含所有命令行参数:“$1,$2...$9” $$包含正在执行进程的ID号 shell环境变量 CDPATH用于cd命令的查找路径 HOME用户主目录 PATH路径 shell程序和语句 shell程序由0到n条shell语句构成,shell语句包括三大类:功能性语句、结构性语句、说明性语句 说明性语句:以#开始的部分,不被解释执行 可以出现在程序的任意位置,可以单独一行,也可以接在执行语句的后面 功能性语句:任意操作系统命令、shell内部命令、自编程序、等 read从标准输入读出一行,赋给后面的变量 readvar#把读入的数据全部赋给var readvar1var2var3#把读入一行的第一、二个词分别赋给var1、var2,其他的都赋给var3 如果执行read语句时标准输入无数据,则程序在此停留等候,直到数据到来或终止运行 expr主要用于简单的整数运算,包括+-*/%等 反撇号用于引用命令的运行结果 test用于测试三种对象:字符串、整数、文件属性 可用[]代替,注意左右都至少一个空格 语法结构: case字符串变量in#case语句只能检测字符串变量 模式1) 命令表1 ;; 模式2) 命令表2 。。。。 *)#*表示其他所有 命令表n ;; esac 例如: case$1in file1) echo“file1” ;; file2) echo“file2” ;; *) echo“others” esac do 命令表 done 与上面的相反 循环控制语句: break和continue breakn跳出n层 continue 马上跳转到最近一层循环的下一轮循环 continuen转到最近n层循环语句的下一轮循环上 shell函数 shell程序中,常把完成固定功能且多次使用的一组命令封装在一个函数中,每当要使用时,调用函数名即可 函数调用前必须先定义,即顺序上先定义函数,再调用 调用程序可以传递参数给函数,函数可以用return语句把运行结果返回调用程序 函数只在当前shell中起作用,不能输出到子shell中 shell函数定义格式 functionfuntion_name()#function可以省掉 { ... } 函数调用方式 value_name=`function_name[arg1arg2...]`#函数结果返回给变量 正斜杠//之间 元字符:表达的是不同于字符本身的含义 本书中的元字符有两类:shell元字符、正则表达式元字符,它们各司其职,shell元字符是由shell解析的,就是下面所讲的文件名置换;正则表达式元字符是由各种执行模式操作的程序来解析的,如vi、grep、sed、awk --------------------------------------------------------------------- 正则表达式元字符: ^行首定位 $行尾定位 .匹配单个字符 *匹配0或多个重复的位于*前的字符 []匹配指定组字符中的任意一个;如[LlT] [-]匹配指定范围内的字符;如[x-yA-Z0-8] [^]匹配不在指定组内的字符 [^-]跟上面的相反 转移跟在后面的字符#转义元字符,使之不被解释 &;词首定位符#定位以什么开头的词 &;词尾定位符#定位以什么结尾的词 grep家族 grep家族由grep、egrep、fgrep组成 grep命令在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行 一般格式:grep[选项]基本正则表达式[文件] 选项:-n显示行号-i大小写不敏感-w表达式作为词来查找,也就是不是一个词的一部分-r递归查找 基本正则表达式:可为字符串,如果为字符串,最好用“”如果是模式匹配,用‘’调用变量时,也应该使用“” 文件:可以为多个文件;如A1A2 常用举例子 grep-n“your”www#文件www中查找含有your单词的行,且输出行号 grep-nw“your”www#文件www中查找含以your做单词的行,且输出行号 grep-nr‘[a-zA-Z0-9].you’./#递归./中查找含有以a-zA-Z0-9开始的单词 nd命令及xargs findpathname-options[-print-exec-ok] 常用的options为name此时记住要用引号将文件名模式引起来 find./“*org.txt”#在当前目录及子目录中寻找以org.txt结尾的文件 find找到文件后可用xargs对其操作 find./“*org.txt”|xargsls find./“*org.txt”|xargsgrep“device”#在结果中搜索device 启动 系统启动后 ->init->getty进程 ->/bin/login初始化环境,启动shell ->/bin/bash执行/ect/profile,执行~/.bash_profile~/.bash_login~/.profile,执行~/.bashrc ->等待用户输入 环境 一个进程的环境包括:变量等,它定义了可以从一个进程继承到下一个进程的特性 用户的shell配置定义在shell初始化文件中,bashshell有许多启动文件,这些文件可以执行source命令,对一个文件执行source命令会使得这个文件中的所有设置称为当前shell的一部分,也就是说不会创建子shell 登陆时,会执行~/.bash_profile文件执行source命令,如无,则source~/.bash_login,若无,则source~/.profile,这三个文件只能source一个,再source~/.bashrc ~/.bashrc:包含特定的变量和别名,当一个新的bashshell启动或bash脚本启动时会自动执行source~/.bashrc 在当前提示符下输入shell或bash启动的是子shell /etc/bashrc:系统级的函数和别名可以在/etc/bashrc文件中设置,主提示符一般在这设置 ~/.profile:是一个用户定义的初始化文件,它是被Bourneshell使用的,因此不能包括对bashshell的特定设置,运行bash时只有没找到其他文件时才source此文件,它允许用户定制和修改shell环境,也可以放应用程序的初始化 如:lsapp* cdcmdd* ?匹配文件(夹)名中的任意一个字符 [...] 匹配[]中的任意一个字符 [!...] 不匹配[]中!的任意一个字符 如:ls[a-z]*.o#匹配以a-z开头的已.o结尾的文件 ls[!0-9]*.o#匹配以非0-9开头的已.o结尾的文件 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |