若是常常操做linux 或者配置文件的话以及平时开发和处理文本文件等,会有不少的重复工做,这时若是有一个简易的shell脚本,会大大提高工做的效率,所以我查阅了了一些资料,下载了shell脚本学习指南,大抵了解怎么去写一个简易的脚本,写一个脚本前,有些基本知识仍是须要了解的。在这里与你们分享。html
①shell脚本一般一开始都是#! /bin/sh 注:/bin/sh 是 c shell的命令解释器。详细了解参阅学习指南。linux
② shell 中的特殊符号shell
③ shell识别三种基本命令函数
内建命令,shell函数,以及外部命令;工具
内建命令:shell自己所执行的命令,例如 cd,read,test,echo,printf学习
shell函数:以shell语言写成,能够像命令那样引用。 this
外部命令:由shell的副本(新的进程)所执行的命令。spa
④基本命令符:
1>变量: name= “my name ” 或name=name 注:有空格需加双引号
2>输出: echo &name 输出变量.net
3>echo name 输出内容htm
经常使用 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' <file.txt | sort >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