如果经常操作linux 或者配置文件的话以及平时开发和处理文本文件等,会有很多的重复工作,这时如果有一个简易的shell脚本,会大大提升工作的效率,因此我查阅了了一些资料,下载了shell脚本学习指南,大抵了解怎么去写一个简易的脚本,写一个脚本前,有些基本知识还是需要了解的。在这里与大家分享。
①shell脚本通常一开始都是#! /bin/sh 注:/bin/sh 是 c shell的命令解释器。详细了解参阅学习指南。
② shell 中的特殊符号
~:主目录,相当于$HOME
`:命令替换
#:shell脚本中的注释
$:变量表达式符号
&:后台作业,将此符号置于命令末端,则让命令于后台运行
*:字符串的通配符
(:启动子shell
):停止子shell
\: 转义一下字符
|:管道
[:开始字符集通配符号
]:结束字符集通配符号
{:开始命令块
}:结束命令块
;:shell命令分隔符
‘:强引用
“:弱引用
>:输出重定向
/:路径名目录分割符
?:单个任意字符
!:管道行逻辑NOT
③ shell识别三种基本命令
内建命令,shell函数,以及外部命令;
内建命令:shell本身所执行的命令,例如 cd,read,test,echo,printf
shell函数:以shell语言写成,可以像命令那样引用。
外部命令:由shell的副本(新的进程)所执行的命令。
④基本命令符:
1>变量: name= “my name ” 或name=name 注:有空格需加双引号
2>输出: echo &name 输出变量
3>echo name 输出内容
常用 echo -c 忽略最后一个字符。 -n 换行 -f清屏 等
4>printf: 模仿于c语言的printf() \n 换行 %s 参数的输出。
5>cat:未指定任何参数,读取标准输入,写入标准输出。
带有最常用选项的tr命令格式为:(linux 命令复习)
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file
这里:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
6>重定向与管道
例vi file.txt "a bc";
以
tr -d 'a' < file.txt
以>改变标准输入
cat file.txt | tr -d 'a' > new_file.txt
以>> 附加文件
program >>file.txt 可将program的标准输出附加到File的结尾处
如果目标文件不存在,>>重定向符会重新建一个。如果存在,不会覆盖文件,附加到结尾处。
以 | 建立管道
p1 | p2 可将p1的标准输出修改为p2的标准输入。
例tr -d 'a' new_file.txt (sort排序 )
sort用法 详见:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html
7> 特殊文件
/dev/null 位桶 传送到此的文件会被丢掉
/dev/tty
8>简单的执行跟踪
set -x 打开跟踪功能 set+x 关闭跟踪功能
⑤文本处理工具
1> uniq
-c 在每个输出行之前加上该行重复的次数
-d 显示重复的行
-u 显示未重复的行
例:JordandeMac-mini:~ jordan$ sort uniq.txt
chun
fan
ning
ning
sun
JordandeMac-mini:~ jordan$ sort uniq.txt | uniq -c
1 chun
1 fan
2 ning
1 sun
JordandeMac-mini:~ jordan$ sort uniq.txt | uniq -u
chun
fan
sun
2> fmt 格式化段落
fmt -s 切割较长的行
fmt -w n 设置输出行宽为n个字符(默认75)
例:fmt 可以将字母分割,但是不能出现字符,出现符符号则会如下
JordandeMac-mini:~ jordan$ fmt -w 1 fmt.txt (有符号)
my
name
is
ninghcunsun,I
like
playing
games
in
my
spare
time.I
enjoy
this
life.
JordandeMac-mini:~ jordan$ fmt -w 1 fmt.txt 没有符号
my
name
is
ninghcunsun
I
like
playing
games
in
my
spare
time
I
enjoy
this
life.
3>sed命令大全 (非常重要)
http://man.linuxde.net/sed