SHELL编程的一些基本指令和简单功能的实现
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
一 为了方便对脚本的书写和说明,在编写脚本之前,需要编辑/etc/vimrc文件,在这个文件的末尾写上一些关于脚本的描述。写上之后每次新建一个脚本就会自动生成说明,免得每次写脚本都要做说明。
二 一些基本的shell指令:
1 diff 对比文件差异
在两个文件中写入不同的文件内容:
diff file1 file2可以对比两个文件file1和file2的差异。一般在对比时是以第二个文件为标准的。比如说2d1的意思是第一个文件第二行删除linux就会和第二个文件内容一致。1a2意思是说第一个文件添加linux内容就会与第二个文件内容一致。还会有比如2c2意思是第一个文件第二行改变内容就会和第二个文件的内容一致。
对比文件差异之后如何修复文件呢?这就需要安装一个程序patch通过文件补丁的方式来修复文件
diff -u westos linux > diff.path 将两个文件对比差异的结果保存到diff.path文件中:
当有了差异文件之后,就可以使用指令patch -b linux diff.path 将文件补丁加给linux这个文件,使linux文件和westos文件的内容一致,达到补丁修复的效果。其中-b的意思是保留linux原文件,修复之后,linux文件的原来内容,也就是和westos文件有差异的文件会保存为linux.orig文件,而新的文件linux是修复后的文件,内容和westos文件一致:
diff 指令也可以用来对比两个目录的内容:
2. sort和uniq:
sort指令:
uniq指令:
sort和uniq的使用:
sort能够对字符或者数字排序,uniq能够对字符做相应的处理。比如说在一个文件中写入一些数:
统计文件中每个数字出现的个数: 左边为数字个数,右边为排序后的数字
只显示唯一的数字:
只显示重复的数字:
3. test指令:
举例:test命令书写脚本比较数的大小
其中-z用来判断是否从键盘收了数据$1,&&指前面的条件为真,就执行后面的指令。在第一行指令的意思是如果没有从键盘接收到$1数据,就执行后面的指令。与&&相对立的指令为||,意思是如果前面的条件为假,就执行||后面的指令:
结果验证:
关于脚本的执行,有两种方式。一种是sh 脚本文件名称,一种是chmod +x 脚本文件名,赋予脚本可执行权限之后,在命令栏直接输入脚本文件的绝对路径,以绝对路径的方式直接执行。
举例:判断文件类型的脚本书写。需要注意的是,由于&&和||之后的指令是完全不同的两种情况,所以在&&指令的最后需要加上一行指令exit 1来结束指令执行,也就是不读取后面的内容。否则当判断文件类型之后,还会输出一个“该文件不存在。”
结果验证:
4. tr指令:用来进行大小写字母的转换:
对于这种情况,比如说在输入密码的时候,如果不区分大小写,就需要进行大小写字母的转换。
举例:将从键盘接收的字母,以不区分大小写的方式判断其是否为hello.如果是,输出yes,如果不是,输出no。指令tr 'A-z' 'a-z'就是用来完成大写字母到小写字母的转换:
结果验证:
三 一些简单的脚本功能的实现:
1 输出本机的ip:
ifconfig eth0查看本机的IP,书写脚本输出本机ip
脚本的书写:其中-d用来指定分隔符为空格,-f指定内容
结果验证:
2 书写脚本,当ping通其他主机时显示ip is up 否则显示ip is down表示无法ping通:
结果验证:
3 书写脚本,新建用户,如果该用户已经存在就显示该用户已存在,否则就新建用户并设置密码。其中"$#" -eq "2"用来判断从键盘接收的数据是否为2个,及用户名和密码。
结果验证: