Linux命令行和shell脚本编程宝典
这次阅读《Linux命令行和shell脚本编程宝典》这本书是第3次阅读。 总的来说,这本书还是挺不错的。很适合入门。我也是从这本书开始了解shell编程的。
不过,因为现在对Linux 环境也比较熟悉了,并且也会一些shell编程了,所以,这次看的时候会比较快,有些已经会的东西就没有写。只是记录下那些之前没有注意到的东西。
第1章 Linux shell入门
Linux 内核
GNU软件:
Gnome shell
Gnome软件
Linux发行版
(1)核心发行版
(2)特定发行版
第2章 了解shell
Linux下的虚拟控制台:ctrl+Alt+F1/F2/F3../F8
模拟终端:xterm, gnome terminal
1. 任务管理命令:
&: 最经常被用到,这个用在一个命令的最后,可以把这个命令放到后台执行
ctrl + z:可以将一个正在前台执行的命令放到后台,并且暂停
jobs:查看当前有多少在后台运行的命令
fg:将后台中的命令调至前台继续运行,如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
bg:将一个在后台暂停的命令,变成继续执行,如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
5.shell中数学计算
(1)count=1;count=$[ $count+1 ]
(2) let i=i+1;(( i=i+1 ))
(3)var=1;var=`expr $var + 1`
第4章 Linux中的权限管理
常用的命令:
useradd用于添加新用户
userdel删除用户,但是只删除/etc/passwd中的用户信息,不会删除账户在系统中拥有的任何文件
passwd 修改账户密码
chsh 修改默认shell
groupadd 添加用户组
chmod 修改权限
chown 修改所有者
chgrp 修改用户组
第10章 结构化命令
(1) if-else
第11章 处理用户输入输出
(1)命令行参数
(2)处理选项
利用case语句的形式
(4)使用临时文件
输入输出重定向:
1.重定向错误
ls -al badfile 2>test4 #将错误重定向到文件test4,这样程序的错误就直接输入到了文件test4中,而在屏幕上看不到输出。
2. 重定向错误和数据
如果需要同时重定向错误和普通数据,则必须使用两个重定向符号。必须在希望重定向的数据前面放置相应的文件描述符,然后将他们指向相应的输出文件以保存数据
如:
ls -al test test3 badfile 2>test6 1>test7
这是将错误重定向到test6文件,将标准输出STDOUT重定向test7文件
其实,也可以将STDEER和STDOUT重定向到同一个文件,使用&>符号,如:
ls -al test test2 test3 badfile &> test7
这样,错误和标准输出都定向到test7文件中了。
3. 临时重定向
如:
echo "This is an error" >&2 #将这句重定向到了标准错误
4. 永久重定向
exec 1>testout 在脚本执行期间,将标准输出重定向到testout
exec 2>testerror 在脚本执行期间,将标准错误重定向到testerror
但是这样存在的一个问题是重定向STDOUT和STDERR之后,就无法再将他们重定向到原来的位置。
exec 0
5. 输出文件描述符。shell中最多有9个打开的文件描述符,其他6个是3~8
exec 3>test13out
echo "and this" >&3
将数字3重定向到test13out文件,这样上面echo后面的一句就输入到了test13out文件。
6. 恢复重定向文件描述符
exec 3>&1
exec 1>test14out
echo "dsafadsfasdf"
exec 1>&3
这样 先将文件描述符3重定向到标准输出,然后将标准输出重定向到文件test14out,之后再把文件描述符1重定向到3,这样1就恢复了原来的STDOUT了。这儿文件描述符3相当于一个临时变量来保存标准输出STDOUT
类似输入文件描述符如下:
exec 6<&0
exec 0
....
exec 0<&6
7. 创建读取/写入文件描述符
确实可以为输入和输出打开同一个文件描述符,可以使用同一个文件描述符从一个文件读取数据,同时向这个文件写入数据
exec 3<>testfile
输入输出都定向到了testfile文件。
8. 关闭文件描述符
要关闭文件描述符,将它重定向特殊符号&-
如:exec 3>&-
第13章 脚本 脚本控制
mktemp testint.XXXXXX 创建临时文件
-t 选项强迫mktemp在系统临时文件夹中创建临时文件
-d mktemp创建一个临时目录
tee命令可以将STDIN的数据同时发送到STDOUT和其所指定的文件
创建函数
return 命令以特定退出状态退出函数。return命令可以使用单个整数值来定义函数退出的状态,提供了一种通过编程设置函数退出状态的简单方法。
必须注意两个容易发生的错误:
(1)请记住在函数完成之后尽快提取返回值。
(2)请记住退出状态的取值范围是0~255
第15章 在脚本中使用颜色
第16章 sed和awk介绍
sed使用
-e 使用多个命令时要使用这个参数
数字用来指定sed编辑器替换哪一个实例
p输出已经修改的行,-n 选项禁止sed编辑器的输出。二者结合使用会只输出那些已经更改行
删除文本d:指定行:sed '2,$d' data
模式指定:sed '/num/d' data#删除带有num的行
插入和附加文本:
插入命令(i)在指定行之前添加新一行
附加命令(a)在指定行之后添加一行
可以在i或a之前使用数字行号(包括某一个范围之内的所有行)或文本模式匹配(在所有的匹配行之后或之前插入),找到相应的行之后,再插入
更改行(c)和插入/附加的使用类似
变换命令y:[address]y/inchars/outchars/
将[address]范围之内的所有inchars字符替换为outchars,注意inchars与outchars的个数必须一致,从而保证一一映射。这是个全局命令
打印行号(=):sed '=' data1
将文件用于sed(可以使用地址范围和模式匹配)
1. 写文件
[address]w filename 如 sed -n '1,3w test' data6 将1到3行写入到test
2. 读文件
[address]r filename
将filename中的内容读入到r行之后,在标准输出上显示
正则表达式
^匹配开头
$匹配结尾
. 单个字符匹配
[]匹配字符类
[^]否定字符类
特殊字符类
gawk的使用
-F 指定分隔符
用户可以在脚本中定义变量
在gawk的脚本中进行变量赋值的方法类似于shell脚本
赋值语句中还可以包含数学计算,如:gawk 'BEGIN {x=4;x=x*2+3;print x}'
第19章高级gawk编程