前段时间学了学shell,做了些笔记,希望对好学者有所帮助,如下:
1.echo "hello" 输出hello,自动打印换行符
echo "hello \c" 然echo不打印换行符
echo * 显示所有文件,不包括隐藏文件
echo .* 显示隐藏文件
2.printf format-string[arguments] 几乎实现了C中printf的功能,它不像echo自动换行
3.重定向
< 改变标准输入 program < file 将program的标准输入改为file
> 改变标准输出 program > file 将program的标准输出改为file
目标文件file不存在时,会新建file,若存在则会覆盖
program >> file 不覆盖已有file,而是把内容追加在file结尾处
4.参数使用:
$n 第n个参数(和C中的宏类似,$n只是简单的替代, $n$m可组合为一个参数:)
变量赋值"="左右不能有空格
5.通配符:
* 匹配多个字符
? 匹配一个字符
[charset] 匹配charset中的字符,如[0123456789]匹配一个数字0123456789,还可写成[0-9]
[!charset] 取charset的补集作为匹配集合
6.变量替换:
${parameter:-word} 若parameter为空或未设置,则用word代替parameter进行替换,parameter值不变
${parameter:=word} 若parameter为空或未设置,则parameter设为值word
${parameter:?message} 若parameter为空或未设置,则把message作为标准错误输出
${parameter:+word} 若parameter设置了,则用word代替parameter进行替换,parameter值不变
7.引用:
关闭一个字符的特殊意义
\
''
""
8. if list1 ————————————>list1退出代码为0时为真
then list2
elif list3
then list4
else
then list5
fi
test expression = [expression] expression为test可理解的表达式
test可理解的表达式:
-文件测试:检查文件是否满足某种特殊规则
test option file option如下图
-字符串比较:
-z string 长度为0为真
-n string 长度不为0为真
string1 = string2
string1 != sting2
-数字比较:整数比较
int1 option int2 option————>-eq, -ne, -lt, -le, -gt, -ge
= != < <= > >=
-复合表达式:
! 非
-a 与st if [ expression1 -a expression2 ]
-o 或
9.
case word in
pattern1)
list1;;
pattern2)
list2;;
...
esac
10.
while command ——————> 为0时为真
do
list
done
11.
until command
do
list
done
12.数组
下标使用数字,自增应该如此:index=$(expr $index + 1),expr不可少,“+”两边要空格
要应用数组中元素值是,应如此:${array[$index]},花括号不可少
列出数组中所有元素:echo ${arrar[*]}
13.字符处理
截取:
expr substr “$var” 1 2 从第一个字符开始截取变量var的2个字符
var2=·expr substr “$var” 1 2· 把截取的字符赋值给变量
======================================AWK====================================================
1.awk程序:模式+操作
pattern {action}
pattern
{action}
pattern缺省:action应用在每条输入记录
action缺省 :打印匹配记录到标准输出
2中特殊pattern:
BEGIN:与之关联的操作只执行一次,执行在任何命令行文件或一般命令行赋值被处理之前,任何开头的-v选项指定完成之后;多用于初始化
END :与之关联的操作只执行一次,执行在所有输入数据处理完之后;多由于产生摘要报告或做清理工作
2.常用的内建变量:
ARGC 参数计数
ARGV 参数向量,或参数值
FILENAME 当前输入文件的名称
FNR 当前输入文件的记录数
FS 字段分隔字符(正则表达式,默认为" ")
NF 当前记录的字段数
NR 在工作(job)中的记录数
OFS 输出字段的分隔字符,默认为" "
ORS 输出记录的分隔字符,默认为"\n"
3.数组变量:
下标可以是任意数字或字符串表达式,不一定要整数
4.命令行参数:
5.记录:
空行也可以是一条记录
=====================================SED=====================================================
1.sed调用
sed [option] sed命令 输入文件
sed [option] -f sed脚本文件 输入文件
sed脚本文件 [option] 输入文件
option:
-n 不打印编辑行
-p 打印
-c 下一命令是编辑命令
-f 执行sed脚本时使用
2.定位文本(address)
sed浏览输入文件时,默认是从第一行开始,如下可以定位文本:
1).使用行号:
n 第n行
n,m 第n行-第m行(包括行m)
n,m! 行号部位n和m的行
1,$ 第一行-最后一行
2).使用正则表达式:
/pattern/ 包含模式的行
/pattern1/pattern2/ 包含两个模式的行
pattern/,n 指定行上包含模式的行
n,/pattern/ ??
3.sed编辑命令:
p 打印匹配行
= 显示行号
a\ 在定位行号后附加信息
i\ 在定位行号后插入信息
d 删除定位行
c\ 替换
s 模式匹配替换
r 从另一文件中读取文本
w 写文本到文件
q 退出
l 显示控制字符
{}
n
g 全局
y
n
^ 行首开始
实例:sed '/sdd/=' test.txt 打印test.txt的所有内容,并显示匹配'sdd'行的行号
sed -n -e '/sdd/p' -e '/sdd/=' test.txt 仅打印匹配模式的行,并显示行号,两个e都不能少
4.插入文本
5.修改文本
格式:[address[,address]] c\ text
功能:将定位行替换为text
格式:[address[,address]] i\ text
功能:在定位行前插入行text
格式:[address[,address]] a\ text
功能:在定位行后追加行text
6.删除文本
格式:[address[,address]]d
功能:删除定位行
7.替换文本
格式:[address[,address]] s/pattern_to_find/replacement_pattern/[g p w n]
功能:
g: 缺省下是替换第一次模式匹配的,用g可用于全局的模式匹配
p: 缺省下打印所有替换行,用p可以使-n选项无效
w: 写入指定文件
n:
&: 代表原模式
实例:
sed -n 's/aaa/ccc &/p' test.txt 模式aaa前追加ccc
sed -n 's/aaa/& ccc/p' test.txt 模式aaa后追加ccc
8.读写文件
格式:[address[,address]]w filename
功能:将定位行写入文件filename
格式:address r filename
功能:将文件filename的内容追加在定位行后
实例:
sed '/^$/d' filename 删除空行
sed 's/^[0-9]//g' filename 去除行首数字