一、shell编程:
常用的解释器:Bash
编写: #!/bin/bash 说明后面的脚本用什么程序来解释的
# 行首以#开头的是注释
运行: 权限:chmod +x scriptfile
执行:bash scriptfile arg1 arg2 ...
测试: bash -n /path/to/scriptfile 检查语法错误,不会实际执行脚本
bash -x /path/to/scriptfile 详细打印脚本执行过程
二、变量:
变量分类:
本地变量:作用域当前shell
环境变量:作用域当前shell和其子shell。export
局部变量:作用域函数中。local
位置变量:$1,$2...
特殊变量:$?取命令的状态返回值,0代表正常,大于0有误
$0文件名
$#参数个数
$*所有参数,全部参数合为一个字符串
$@所有参数,每个参数是独立的字符串
只有被双引号引起来的时候$*、$@才有区别
$$当前进程的ID
显示变量:set
export
env
peintenv
删除变量:unset
输出重定向:
0:标准输入
1:标准输出
2:标准错误
>:是定向输出覆盖到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空
>>:将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾
>&:将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件
|&:将一个标准错误 管道 输送 到另一个命令作为输入
1>:标准输出
2>:将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件
2>>:将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
2>&1: 将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出
/dev/null黑洞
测试表达式:[ EXPRESSION ]或[[ ]]注意前后的空格
数值比较,前后有空格: -gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-it 是否小于
-le是否小于等于
字符串的比较,前后有空格: == 是否等于
> 大于,用于[[ ]]
< 小于,用于[[ ]]
!= 不等于
=~模式匹配,用于[[ ]],使用扩展正则表达式
-z 空为真,非空为假
-n 不空为真,空为假
文件测试: -e file:文件存在为真,否则为假
-f file:是否存在且为普通文件
-d file:是否存在且为目录文件
-r file:是否存在可读
-w file:是否存在且可写
-x file:是否存在且可执行
-s file:是否存在且非空
file1 -nt file2:file1是否新于file2
file1 -ot file2:file1是否旧于file2
算数运算: 算数运算符:+、-、*、/、%、**(乘方)
$[算术表达式]
$((算术表达式))
let var=算术表达式
三、数组:
索引从0开始
支持关联数组,索引唯一但不是数字
显示声明: declare -a 普通数组
declare -A 关联数组
元素赋值:weekdays[4]=“Thursday”
数组初始化:array=(zero one two three four five)
稀疏初始化:array=([0]=one [3]=three [7]="seven")
${array[*]}、${array[@]} 取全部元素
${#array[*]}、${#array[@]} 取元素个数
${#array[0]}、${array}取第一个元素的长度
提取,切片:
array=(/dev/*)
echo ${array[*]:3}
echo ${array[*]:186:1}
替换:
array=(/dev/*)
echo ${array[*]/dev/abc}
字符串切片:
str=abcdef
echo ${#str}返回长度
echo ${str:3:1} offset偏移为3,length为1.长度不写,取到结束。offset为负数就是反向取,length为负数表示从右侧第几个。
四、语句:
if条件语句:
if 条件;then
elif 条件;then
else
fi
循环语句:
while 语句:条件满足循环
while 条件 ;do
语句
[break]
done
until语句:条件满足退出
until 条件;do
语句
[break]
done
for语句:
for 变量 in 列表;do
语句
[break]
done
列表生成:
1、{1..100}
2、‘seq [起始数] [跨度数] 结束数’
3、ls /etc 生成文件列表
五、输入重定向:<
1、 < file 和 0<file表示从文件接收输入
例如: grep ‘a’ file 和grep ‘a’ <file
2、 cat > /tmp/eof <<EOF
cat > /tmp/eof <EOF
这是特殊代码块,用重定向的方式把命令序列传递给交互式程序或者命令中。