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主要用于简单的整数运算,包括+-\*/%等
反撇号用于引用命令的运行结果
可用[]代替,注意左右都至少一个空格
语法结构:
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函数定义格式
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递归查找
基本正则表达式:可为字符串,如果为字符串,最好用“”如果是模式匹配,用‘’调用变量时,也应该使用“”
常用举例子
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结尾的文件
原文链接:https://www.f2er.com/bash/391717.html