shell编程入门
变量类型:
环境变量:
作用域为当前shell以及其子shell
创建:export VarName
本地变量
作用域:为整个bash进程,进程结束该变量就被撤销了
创建: VarName=Value
局部变量:
作用域:只能是某个函数,也只能在函数中使用
位置变量:用来引用函数的参数
例如:./file.sh /etc/fatab /etc/initab
$1:/etc/fstab
$2:/etc/initab
$n:..
shift:第一个位置变量被删除,后面的位置变量一次进1、
shift n:一次删除n个位置变量,后面的位置变量依次进你n
特殊变量:
$?:返回上一个命令的执行状态返回值
$#:表示位置参数的个数
$*:位置参数列表
$@:位置参数列表
程序执行状态有两种返回值
一个是0:表示执行成功
一个是(1-255,其中1,2,127系统留用)表示执行错误
脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境环境变量
脚本基础:
第1行为shebang----->指定解释器比如:/bin/bash
脚本执行的几种方法:
1、给予该脚本一个执行权限,然后输入文件的路径就可以执行
2、将该脚本所在的路径写入全局变量PATH中去,直接输入该脚本的名称即可执行
bash中的条件判断:
1、整数测试
2、字符测试
3、文件测试
条件测试的表达式‘
[ expression ]
[[ expression ]]
test expresssion
整数比较:
-eq :测试两个整数是否相等
-ne:测试两个整数是否不相等
-gt:测试一个整数是否大于另一个整数
-lt:测试一个整数是否小于另一个整数
-ge:大于或等于
le:小于等于
命令间逻辑关系(短路原则):
$$:逻辑与
||:逻辑非
条件语句:
1
if [] ; then
statement1
statement2
..........
fi
2
if []
then
statement1
statement2
..........
fi
3
if [] ;then
elif [] ;then
elif [] ;then
......
else
fi
文件测试:
-e FILE--->测试文件是否存在
-f FILE--->测试文件是否是普通文件
-d FILE----->指定路径是否为目录
-r FILE------>测试当前用户对指定文件是否具有读权限
-w FILE----->测试当前用户对指定文件是否具有写权限
-x FILE------>测试当前用户对指定文件是否具有执行权限
定义脚本的退出状态码:
exit:退出脚本
如果脚本没有明确定义退出状态吗,那么,最后执行的一条命令的退出状态吗为脚本的退出码
测试脚本是否有错误:
bash -n 脚本名称--->错误信息不一定可靠
bash -x 脚本名称--->单步执行
功能:是一个文本编辑器,是逐行编辑文本。
处理过程:sed将文本的逐个将一行读入内存中,在内存处理(编辑)之后,在显示在屏幕上,sed默认情况下不编辑源文件,只对内存的内容进行编辑
使用方法:
sed 'AddressCommmand' file1,file2,.....
Address:
1、StartLine,Endline:比如1,100
$:最后一行
$-1:倒数第二行
2、/regexp/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行到pattern2第一次匹配到的行
4、LineNumber:指定的行
5、 StartLine,+N:从开始的行向后N行
6、StartLine ,~N:从开始的行开始向前N行
Command:
d:删除符合条件的行
p:显示模式空间的行
a \string:在指定的行后面追加新行
i \sring :在指定的行前面添加内容
r file :将制定文件的内容写到指定的行
w file:将符合条件的行写到指定的文件中去
s \pattern\string\:查找并替换
s \pattern\string\修饰词(g【global】,i【忽略大小写】)
&:引用模式匹配到的整个串
\(\),\1\2--->后向引用
options:
-n : 静默模式,不默认显示模式空间中间的行
-i:直接修改源文件
-e SCRIPT -e SCRIPT :同时执行多个文件
-f /pathtofile file -->对文件file实施pathtofile中的脚本
字符串测试
=,==
!=
<
>
-n string 判断字符串是否为空,如果为空就是为真
-s string 判断字符串是否不空,不空就为真
循环结构:
for VAR in 列表 ;do
循环体
done
遍历完成之后,退出
生成列表
整数列表
{n1..n2}:生成n1到n2的列表
seq [起始数 [步进长度]] 终止